汇编网首页登录博客注册
crarook的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
文章收藏
友情链接

[2009-08-29 09:26] 实验2 用机器指令和汇编指令编程

实验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
评论次数(1)  |  浏览次数(673)  |  类型(汇编作业) |  收藏此文  | 

[  blackberry   发表于  2009-08-31 08:43  ]

第(2)个题目涉及到的中断是后面讲解的内容,这里先留个意,在debug下跟踪的时候,有时候由于栈大小设置的问题,会出现类似问题,到时候要想到可能是这个问题,这样就不会一头雾水了。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码