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的指令有关。等下周听老师讲完再补充吧。