当前位置:编程学习 > 汇编语言 >>

汇编大牛请进。关于jmp short s 指令。

jmp short s 指令中s已经标明了转移目的地址的偏移地址,为什么对应的机器码中要用转移位移?
追问:jmp far ptr s这个指令为什么用标号s的段地址和偏移地址修改cs和ip,难道不怕标号的偏移地址可能改变吗?我的意思是jmp far ptr s如果用标号s的段地址和偏移地址修改cs和ip,应该算是绝对跳了,万一程序放到另一台电脑找不到那个ip了,怎么办?jmp far ptr s这个指令为什么用标号s的段地址和偏移地址修改cs和ip,难道不怕标号的偏移地址可能改变吗?不知道你有没有看   土匪平头395  的回答,能不能具体点,王爽汇编语言 附注3看了几遍了。不知道你有没有看   上面 “土匪平头395  ”的回答。
答案:我的想法是:如果jmp指令给定的是标号s的ip,然后直接跳过去,那这应该算是绝对跳了。
,如果程序放到了另一台电脑上可能就不一定找的到那个ip了,因为标号的偏移地址可能改变,而如果是给定相对差,那么就可以直接找到那个ip,
额,我也不懂,乱说的,不要笑。。。
其他:转移位移?
你想问什么呢?
你的问题阐述的不是很清楚呢. 我的理解。jmp short  s中的S只是一个标号,代表着 要转向的程序段的地址,源代码经过编译,变成机器代码,机器代码被分配了逻辑地址,描述着指令序列及其中间的位置关系。程序运行时 依据这位置关系开始占用实际内存地址。代码编译后S被 转向的程序段落的地址所取代。 没有为什么,汇编语言就是这样定义的,短跳转是位移,长跳转是段地址加偏移地址。 首先你要去明白, 短跳转和远跳转,近跳转。
再来看看你这个问题,你就明白为何这样啦。
他们跳转的段地址在哪里??好好看看。 因为自己在代码中标明的S是汇编语言,也就是程序员自己表达要转移的地方,而在机器码中不是存要转移到哪个标号,而是转移到向前或者向后转移多少个字节;比如要向后转移3个字节,机器中存储的就是EB03,向前转移5个字节就是EBF6,EB就是jmp意思,而03和F6就是转移位移,F6是补码;至于什么是机器码和汇编指令,不懂你就再追问吧,这里就不啰嗦了! 

上一个:单片机通过T0定时1s,同时T1开始计数并通过LCD显示的程序
下一个:汇编语言 实验16为什么要在加org 200h,能具体讲解吗

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,