社区
汇编语言
帖子详情
关于汇编语言“jmp far ptr 标号”指令的问题
keesss
2016-01-13 03:13:38
汇编语言中“jmp far ptr 标号”可以实现长跳转,这时候编译过后机器码中已经贴上了跳转点的具体地址,而不是偏移量。我想知道为什么编译器知道程序的具体地址?程序加载进内存时地址不是固定的,标号如何知道每次程序加载进内存后的地址?
...全文
1020
3
打赏
收藏
关于汇编语言“jmp far ptr 标号”指令的问题
汇编语言中“jmpfarptr标号”可以实现长跳转,这时候编译过后机器码中已经贴上了跳转点的具体地址,而不是偏移量。我想知道为什么编译器知道程序的具体地址?程序加载进内存时地址不是固定的,标号如何知道每次程序加载进内存后的地址?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zara
2016-01-14
打赏
举报
回复
jmp far ptr 这样的指令,是指 dos16 模式下的吧,对 win32 来说普通软件里不会有的。
dos16 下,加载地址的不同,是指起始段址的不同,程序完结后,偏移就是固定的了,所以,jmp far ptr 里,偏移部分是确定的,段址就需要重定位;在最后的代码里,段址部分是相对程序开头的段偏移,这样在进行修正时,只要对需要修正的项加上程序载入的起始段址就可以了。
keesss
2016-01-13
打赏
举报
回复
你的意思是涉及到这种转移指令的时候编译器并没有贴上实际地址,而是运行的时候让操作系统填入吗?
zara
2016-01-13
打赏
举报
回复
重定位项,就是解决这个问题的吧,这类需要根据加载地址进行修正的地方,在 exe 文件里有个专门空间存放的,载入程序后会根据载入的地址对涉及到的地方相应的修正。
汇编语言
指令
jmp
:
jmp
short、
jmp
near
ptr
、
jmp
far
ptr
jmp
short 是段内短转移
指令
,只修改IP的值,其机器码有2个字节,低8位是用于表示
jmp
的段内短转移
指令
的
指令
编码,高8位是用补码形式表示的位移信息,转移的范围:-128 ~ 127。
jmp
near
ptr
是段内近转移
指令
,只修改IP的值,其机器码有3个字节,低8位是用于表示
jmp
的段内近转移
指令
的
指令
编码,高16位是用补码形式表示的位移信息,转移的范围:-32768~ 32767。
jmp
far
ptr
是根据目的地址进行转移的段间转移
指令
(又称为远转移
指令
),可以同时修改CS和IP。
汇编语言
:call、call
far
ptr
、call word
ptr
、call dword
ptr
、call 寄存器
call
指令
是转移
指令
,CPU执行call
指令
,进行两步操作:(1)将当前IP或当前CS和IP压入栈中(2)转移。call
标号
指令
功能:将当前IP压入栈中,然后转移到
标号
处执行
指令
。call
far
ptr
标号
指令
功能:将当前CS压入栈中,然后再将当前IP压入栈中,最后转移到
标号
处执行
指令
。call 16位寄存器
指令
功能:将当前IP压入栈中,然后转移到寄存器中指明的目的地址处执行
指令
。call word
ptr
内存单元地址
指令
功能:将当前IP压入栈中,然后转移到内存中指明的目的地址处执行
指令
。
汇编中的
jmp
转移
指令
:
jmp
short、
jmp
near
ptr
、
jmp
far
ptr
汇编中的
jmp
转移
指令
:
jmp
short、
jmp
near prt、
jmp
far
ptr
从8086CPU的定义上来讲,只要是可以修改IP(
指令
指针寄存器),或同时修改CS(代码段寄存器)和IPIP(
指令
指针寄存器)的
指令
统称为转移
指令
。也就是说,转移
指令
是用来控制CPU
指令
内存中某处代码的
指令
。 那么通过转移区间的不同进行分类则有以下情况: 段内转移:只修改IP的值。也就是说,CS的值不变化...
JMP
指令
JMP
指令
是
汇编语言
中的一种跳转
指令
。该
指令
分直接转移和间接转移两种,直接转移又可分短程(SHORT)、近程(NEAR)和远程(
FAR
)3种形式。当程序执行到
JMP
指令
时,就无条件地转移到
指令
中所指示的目的地址。 1、短程转移(直接短转移)
指令
格式:
JMP
SHORT OPRD 语法格式:
JMP
地址
标号
;(IP)=(IP)+8位位移量
指令
功能:OPRD为转移地址的
标号
,
指令
中的SHORT规
【
汇编语言
】转移
指令
&循环
指令
转移
指令
一、无条件转移
指令
(1)
JMP
指令
概述 (2)
JMP
指令
类型 1.段内转移、相对寻址 2.段内转移、间接寻址 3.段间转移、直接寻址 4.段间转移、间接寻址 (3)条件转移
指令
的使用 1.
标号
的地址属性 2.控制转移 二、条件转移
指令
(1)JCC
指令
概述 (2)条件转移
指令
分类 ①单个标志状态作为条件 ②两数大小关系 (3)产生条件的
指令
循环
指令
一、LOOP
指令
(1)LOOP
指令
格式 (2)LOOP
指令
的应 二、JECXZ
指令
汇编语言
21,500
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章