检测点10.3作业练习
assume cs:codecode segment
start: mov ax,0
call far ptr s
inc ax
s: pop ax
add ax,ax
pop bx
add ax,bx
mov ax,4c00h
int 21h
code ends
end start
;结果ax=1010h为什么呢?
;因为在准备执行call far ptr s指令之前,ip已经指向1000:8
;所以,在执行之后,pop ax输出来的值为0008
;然后程序往下执行自加,ax=0010h
;再往下执行输出bx为1000,因为输出的是cs的值,所以bx为1000h
;最后ax=ax+bx=1010h 本帖最后由 jackz007 于 2020-3-6 00:09 编辑
1433:0000 B80000 MOV AX,0000
1433:0003 9A09003314 CALL 1433:0009 ; 这里跳到 1433:0009,下一条指令的地址 (1433:0008) 就是返回地址,堆栈中就是这一对数值
1433:0008 40 INC AX
1433:0009 58 POP AX ; AX = 返回地址 1433:0008 的偏移值 0008
1433:000A 03C0 ADD AX,AX ; AX = 0008 + 0008 = 0010
1433:000C 5B POP BX ; BX = 返回地址 1433:0008 的段地址 1433
1433:000D 03C3 ADD AX,BX ; AX = 0010 + 1433 = 1443
1433:000F B8004C MOV AX,4C00
1433:0012 CD21 INT 21 jackz007 发表于 2020-3-6 00:02
{:5_109:}你的也没有错,但是题目出的地址是在1000:0,所以按照题目来。 项羽姓秦 发表于 2020-3-6 00:11
你的也没有错,但是题目出的地址是在1000:0,所以按照题目来。
我这是 debug 实测环境的结果。 jackz007 发表于 2020-3-6 00:13
我这是 debug 实测环境的结果。
嗯,我知道
页:
[1]