当前位置: 代码迷 >> 汇编语言 >> 关于王爽汇编 检测点10.4 求解,该如何处理
  详细解决方案

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

热度:5857   发布时间:2013-02-26 00:00:00.0
关于王爽汇编 检测点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
  相关解决方案