一个书上的例子想不明白

纯净水o 2018-02-03 04:07:22
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0eh]
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
code ends
end start


这个是王爽的汇编 测试点10.5

call word ptr ds:[0eh] 这段执行之后我特别不理解 为什么会跳转到下面的 inc ax呢???
我的理解是此时的ds:[0eh]中的数据是0 执行call指令后应该跳转到start: 才对啊 实在是不理解


这是是网上的答案
call dword ptr 才会将 cs IP入栈 为什么答案上说 call word ptr 会将cs ip入栈呢?
...全文
1149 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tielian 2018-02-05
  • 打赏
  • 举报
回复
call word ptr ds:[0eh] 是near call ,near call 是将紧跟在call 指令后面的偏移地址压入栈,这个例子里就是inc ax的地址。
  • 打赏
  • 举报
回复
call执行了两次,都不会返回,第一次因为目标地址是cs:0,也就是start开始的位置,第二次再执行到call word ptr ds:[0eh],因为ds:[0eh]处是第一次压入的返回地址,也就是第一条inc ax那里,继续执行下去就int 21h程序结束了。 网上答案上说 call word ptr 会将cs入栈是错的,可能那人单步调试了这段程序,看到栈中有cs值,但那是int1中断压入的。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧