用机器指令和汇编指令编程
实验任务:
(一)使用 Debug,将下面的程序段写入内存,逐条执行,根据指令执行后实际运行情况填空。
- mov ax,ffff
- mov ds,ax
- mov ax,2200
- mov ss,ax
- mov sp,0100
- mov ax,[ 0 ] ; ax =
- mov ax,[ 2 ] ; ax =
- mov bx,[ 4 ] ; bx =
- mov bx,[ 6 ] ; bx =
- push ax ; sp = ,修改的内存地址是 内容为
- push bx ; sp = ,修改的内存地址是 内容为
- pop ax ; sp = ,ax =
- pop bx ; sp = ,bx =
- push [ 4 ] ; sp = ,修改的内存地址是 内容为
- push [ 6 ] ; sp = ,修改的内存地址是 内容为
在中途输入指令的时候,错把 add 指令输成了 mov 指令。
并且有一个有趣的地方是,我这段指令中是有 mov sp,0100 这个指令的,但是在执行的时候这条指令并没有显示的执行出来,但是 sp 中的值是改变了的。
(二)仔细观察下图的实验过程,然后分析:为什么 2000:0 ~ 2000:f 中的内容会发生改变?
从指令的角度看,并没有对 2000:0000 这篇区域做任何修改,但是这块区域的内存数据为什么变了呢?
原因是:在使用T命令进行单步追踪的时候,产生了中断,为了保护现场,CPU将PSW、CS和IP依此入栈,导致了内存相关位置内容的改变。