天天看点

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

一、知识储备

1.8086CPU是16位结构,有16根数据线,20根地址线。16根数据线可以一次性传送16位数据,也就是两个字节(也就是一个字)的数据。

什么是字?

在这个特定计算机中,字是其用来一次性处理事务的一个固定长度的位(bit)组。一个字的位数(即字长)是计算机系统结构中的一个重要特性。在8086cpu中,内存数据分为一个字节的字节型数据和一个字的字型数据。

2.CPU要读写一个内存单元时,必须给出这个内存单元的地址,内存地址由段地址和偏移地址组成。 DS 地址寄存器存放的就是要访问数据的段地址, [address] 中address是偏移地址并且是一个具体的数。

这里注意,DS并不能直接给定一个数值。比如 mov ds,1000H 语句在8086CPU中是错的。我们只能通过寄存器去改变ds的值,比如 mov ds,ax 。

3.写几条指令,将 al 中的数据送入内存单元 10000H 中。

mov ax,1000H    ;为了让ds为1000H,先让ax为1000H
mov ds,ax       ;ds只接受寄存器向它传送的数据
mov al,[0]      ;[0]是偏移地址,1000:0所对应的物理内存单元是10000H
           

4.关于mov指令 :mov ax,1000H 的含义

简单来说,给ax这个通用寄存器的值是个内存单元地址,并不是存在这个单元里面的数据。

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

对于一条指令而言,分为操作码和操作数。

上述例子中“MOV”为操作码,“A”为第一操作数,其意义为累加寄存器,“52H”为第二操作数,其意义就是立即数。通过该条程序指令可将十六进制数52H直接放入累加器中。当然也可以将立即数表示为二进制数或十进制数,图中二进制01010010 ,也就是十六进制52H。

5. CS是段地址寄存器,配合IP偏移地址寄存器,用于cpu从内存读写指令。而DS也是段地址寄存器,不同的是,它配合[ bx],用于读写内存的数据。

二、引入问题

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

三、解决问题(在windows debug下运行)

1.把数存入内存单元

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

此时代码的段地址是073F,数据的段地址也是073F,偏移地址是0100。

E命令的使用

E命令作用:改变内存单元的内容。

E命令的使用方式为:E [起始位置]。如果是连续的内存单元,直接写数字

在提示符“-”下输入以下命令:e 1000:0。

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

d命令查看内存区域的内容。d CS:IP ,若直接输入1000,则会认为1000是当前段地址的偏移地址。

这里一开始内存的数据就输错了,后面已修改。

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

2.选一段空白内存后存入汇编指令

这段内存没有数据,可以直接输入指令。

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

A命令的使用

A命令作用:输入汇编指令。

一个mov指令3字节

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

3.执行汇编指令

初始状态,r查看当前寄存器的状态

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

1.执行第一条指令

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

2.前两条指令的目的就是将ds置为1000H,内存的段地址为1000H

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

3.下一条指令是把ax里的值2c34,送入内存1000:0的位置,即物理地址10000H处

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

4.ax中的字符数据送到1000:0处,而ax中的字型数据为2c34,高8位2c,低8位是34

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

现在内存中的数为

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作
windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

5.把1000:0的地址中的数据送入bx寄存器中,bx寄存器是16位,故要在内存中找16位的数据,也就是2字节,也就是两个内存单元。

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

6.bx=bx中的数据-内存1000:2中的数据

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作
windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

7.将bx中的字符数据送到内存1000:2处。

此时内存中的数据是

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

debug验证后,如上所示

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

四、汇编符号说明

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

五、允许mov指令的操作

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作
imm是立即数,

mov 寄存器AX,3

mov 内存[a],3

mov 寄存器,内存

mov 内存,寄存器

windows debug下验证汇编指令中的mov指令传送数据一、知识储备二、引入问题三、解决问题(在windows debug下运行)四、汇编符号说明五、允许mov指令的操作

继续阅读