codefish123 发表于 2011-5-24 20:53:28

ip为什么等于0123h

本帖最后由 loop 于 2011-5-29 23:28 编辑

mov sp,10h
mov ax,0123h
mov ds:,ax
call word ptr ds:执行后ip为什么等于0123h

Y.H 发表于 2011-5-24 21:37:37

回复 codefish123 的帖子

代码:
    mov sp,10h       ;这里是定义栈顶吧?
    mov ax,0123h   ;把0123h送入ax中
    mov ds:,ax    ;把ax=0123h送入ds数据段中
    call word ptr ds: ;问题的关键就是这里,因为call word ptr ds: 指令是输入段内近转移,而call指令是是把ds数据段的第一个字单元中的内容送给ip(因为ds数据段的第一个字单元是0~1,而刚好ax送入到ds数据段的第一个字单元),所以他就会用ds:0号的字单元中的内容改写ip

嗯 还是建议去把第十章仔细看看的好,毕竟我说的不是很清楚!

tawtg 发表于 2011-5-24 23:57:55

简单的给你解释一下,call word ptr "内存单元",这种格式的call指令,执行后本质上是将IP = "内存单元" ,和call reg(寄存器)这种格式的call一样,所以先前放在DS:中的ax内容,被赋给了IP。
页: [1]
查看完整版本: ip为什么等于0123h