为什么可以跳转?

下面的程序执行后,ax中的数值为多少?

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

ax中的数值为3,注意ds与ss中存放的段地址相同,在执行了call word ptr ds:[0EH]之后,程序会先将下一条指令inc ax的偏移量压栈,然后跳转到栈顶所指向的指令的位置,即跳转至第一条inc ax的位置,故最后ax的值为3。

我的问题是ds:[0eh]和ds:[0fh]只存了一个ip的值,为什么CPU就知道要跳转至第一条inc ax的位置?

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进