读书人

关于王爽汇编 检测点10.4 求解解决思路

发布时间: 2013-01-02 13:08:44 作者: rapoo

关于王爽汇编 检测点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

读书人网 >汇编语言

热点推荐