首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

关于王爽汇编 检测点10.4 求解,该如何处理

2012-11-08 
关于王爽汇编 检测点10.4 求解下面这个程序 如果不用DEBUG如何推算出 ax 中的值?执行完 call ax 后push ip

关于王爽汇编 检测点10.4 求解
下面这个程序 如果不用DEBUG 如何推算出 ax 中的值?

执行完 call ax 后  
push ip 
jmp 16位寄存器 
ip 是多少? 我以为 入栈的ip 应该是 5 啊?

这个 jmp 16位寄存器 就是 jmp ax ?如何跳动?

检测点10.4

下面的程序执行后,ax中的数值为多少?

内存地址 机器码 汇编指令  
1000:0 b8 06 00 mov ax,6  
1000:3 ff d0 call ax  
1000:5 40 inc ax
1000:6 58 mov bp,sp  
  add ax,[bp]  

debug 结果:-r
AX=0000 BX=0000 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B5A ES=0B5A SS=0B6A CS=0B6A IP=0000 NV UP EI PL NZ NA PO NC
0B6A:0000 B80600 MOV AX,0006
-u
0B6A:0000 B80600 MOV AX,0006
0B6A:0003 FFD0 CALL AX
0B6A:0005 40 INC AX
0B6A:0006 8BEC MOV BP,SP
0B6A:0008 034600 ADD AX,[BP+00]
0B6A:000B B8004C MOV AX,4C00
0B6A:000E CD21 INT 21
0B6A:0010 A13A21 MOV AX,[213A]
0B6A:0013 8B163C21 MOV DX,[213C]
0B6A:0017 8987BE22 MOV [BX+22BE],AX
0B6A:001B 8997C022 MOV [BX+22C0],DX
0B6A:001F 803E450700 CMP BYTE PTR [0745],00

-t

AX=0006 BX=0000 CX=0010 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B5A ES=0B5A SS=0B6A CS=0B6A IP=0003 NV UP EI PL NZ NA PO NC
0B6A:0003 FFD0 CALL AX
-t

AX=0006 BX=0000 CX=0010 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0B5A ES=0B5A SS=0B6A CS=0B6A IP=0006 NV UP EI PL NZ NA PO NC
0B6A:0006 8BEC MOV BP,SP
-t

AX=0006 BX=0000 CX=0010 DX=0000 SP=FFFE BP=FFFE SI=0000 DI=0000
DS=0B5A ES=0B5A SS=0B6A CS=0B6A IP=0008 NV UP EI PL NZ NA PO NC
0B6A:0008 034600 ADD AX,[BP+00] SS:FFFE=0005
-t

AX=000B BX=0000 CX=0010 DX=0000 SP=FFFE BP=FFFE SI=0000 DI=0000
DS=0B5A ES=0B5A SS=0B6A CS=0B6A IP=000B NV UP EI PL NZ NA PO NC
0B6A:000B B8004C MOV AX,4C00

[解决办法]
首先call指令执行的时候ip指向到1000:5这个位置,然后push ip 也就是栈顶值是5
然后jmp到mov bp sp
add ax,[bp](栈顶值是5) ax=000b

热点排行