实验2 用机器指令和汇编指令编程
(1)使用Debug,将上面的程序段写如内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax, ffff
mov ds, ax
mov ax, 2200
mov ss, ax
mov sp, 0100
mov ax, [0] ; ax = ( 5BEAH )
add ax, [2] ; ax = ( 5CCAH )
mov bx, [4] ; bx = ( 30F0H )
add bx, [6] ; bx = ( 6027H )
push ax ; sp = (00FEH);修改的内存单元的地址是(2200:00FE),内容是(5CCAH)
push bx ; sp =(00FCH);修改的内存单元的地址是(2200:00FC),内容是(6027H)
pop ax ; sp = ( 00FEH ); ax = ( 6027H )
pop bx ; sp = ( 0100H ); bx = ( 5CCAH )
push [4] ; sp = ( 00FEH );修改的内存单元的地址是(2200:00FE),内容是(30F0H)
push [6]; sp =(00FCH);修改的内存单元的地址是(2200:00FC),内容是(2F37H)
(2)仔细观察下图的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
答:现在还不能理解!
下面是前辈的答案(先收藏):
答:因为用T指令进行调试时,会产生中断。而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。
补充完后续指令执行情况:
-t;执行指令0AF2:0108 mov ax, 3123后各寄存器的情况
AX=3123 BX=0000 CX=0000 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0AF2 ES=0AF2 SS=2000 CS=0AF2 IP=010B NV UP EI PL NZ NA PO NC
0AF2:010B 50 PUSH AX
-d 2000:0 f;我们发现CS和IP的值又入栈了(覆盖了原来的值)
2000:0000 00 00 00 00 00 00 23 31-00 00 0B 01 F2 0A 56 05 ......#1......V
-t;执行指令0AF2:010B push ax后各寄存器的情况
AX=3123 BX=0000 CX=0000 DX=0000 SP=000E BP=0000 SI=0000 DI=0000
DS=0AF2 ES=0AF2 SS=2000 CS=0AF2 IP=010C NV UP EI PL NZ NA PO NC
0AF2:010C B86633 MOV AX,3366
-d 2000:0 f;我们发现CS和IP的值又覆盖了原来的值,同时AX也入栈了
2000:0000 00 00 00 00 23 31 00 00-0C 01 F2 0A 56 05 23 31 ....#1......V.#
-t;执行指令0AF2:010C mov ax, 3366后各寄存器的情况
AX=3366 BX=0000 CX=0000 DX=0000 SP=000E BP=0000 SI=0000 DI=0000
DS=0AF2 ES=0AF2 SS=2000 CS=0AF2 IP=010F NV UP EI PL NZ NA PO NC
0AF2:010F 50 PUSH AX
-d 2000:0 f
2000:0000 00 00 00 00 66 33 00 00-0F 01 F2 0A 56 05 23 31 ....f3......V.#1
-t;执行指令0AF2:010F push ax后各寄存器的情况
AX=3366 BX=0000 CX=0000 DX=0000 SP=000C BP=0000 SI=0000 DI=0000
DS=0AF2 ES=0AF2 SS=2000 CS=0AF2 IP=0110 NV UP EI PL NZ NA PO NC
0AF2:0110 B80020 MOV AX,2000
-d 2000:0 f
2000:0000 00 00 66 33 00 00 10 01-F2 0A 56 05 66 33 23 31 ..f3......V.f3#1
- [blackberry] 第(2)个题目涉及到的中断是后面讲解的内容,这里先留个意,在debug下跟踪的时候,有时候由于栈大小 08/31 08:43
- [yigeling] 写的没为题,继续努力。 04/30 11:40
- [游客] 很不错。 04/15 10:08
- [bslg123] 博主学习得很认真!继续加油! 04/13 10:02
- [crarook] 谢谢 第四题以前没有看明白要干什么! 04/06 21:34
- [mouse] 不错,博主继续加油啊~ 第三题rom不能改,这个也是体验啊。第四题是显存,能在屏幕看到显示的字 04/06 17:19
- [younggay] 回答正确。 03/30 10:52
- [younggay] 呵呵,对喽。 03/30 10:46
- [younggay] 回答正确。 03/30 10:45
- [crarook] 补上 03/29 18:11
[ blackberry 发表于 2009-08-31 08:43 ]
第(2)个题目涉及到的中断是后面讲解的内容,这里先留个意,在debug下跟踪的时候,有时候由于栈大小设置的问题,会出现类似问题,到时候要想到可能是这个问题,这样就不会一头雾水了。