实验二 用机器指令和汇编指令编程

1、预备知识:Debug的使用

Debug在执行“d 1000:0”时,会将段地址送入ds

Debug的命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。

2、实验任务

①使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运算情况填空。

mov ax,ffff

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,[0]                                            ;ax= C0EA            

add ax,[2]                                             ;ax= C0FC            

mov bx,[4]                                            ;bx= 30F0            

add bx,[6]                                             ;bx= 6021            

push ax                                                ;sp= 00FE           ;修改的内存单元的地址是 2200:FE到FF 内容为   FC       C0                 

push bx                                                ;sp= 00FC           ;修改的内存单元的地址是 2200:FC到FD 内容为   21        60                 

pop ax                                                  ;sp= 00FE           ;ax=  6021              

pop bx                                                  ;sp=0100            ;bx=   C0FC            

push [4]                                                ;sp= 00FE          ;修改的内存单元的地址是  2200:FE到FF   内容为    F0      30                

push [6]                                                ;sp= 00FC          ;修改的内存单元的地址是  2200:FC到FD   内容为    31      2F                

 

本实验中存在两个段,一个数据段和一个栈段。数据段的段地址被赋值为ffff,栈段的段地址被赋值为2200。程序段首先执行了算术指令。ax、bx得到新数据分别为C0FC、6021。然后将ax、bx的数据依次存入栈段中,通过pop指令对数据的先后取出赋值实现ax、bx的数据交换。此时,ax、bx的数据分别为6021、C0FC。最后,通过push指令将数据段中地址为ffff:0004和ffff:0006对应的数据依次存入栈段中。

②仔细观察图中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变。

 emmmmm,对照书上的源代码打了一遍。还是不知道为什么会变。感觉是与mov ss,ax修改寄存器SS的指令有关。等下周听老师讲完再补充吧。

猜你喜欢

转载自www.cnblogs.com/Yangruzhang/p/9785364.html