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

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

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

热点排行