社区
汇编语言
帖子详情
jmp指令的疑惑?
boywang
2003-07-26 01:34:16
77DFE021 EB21 jmp 77DFE044
77DFE855 E99F000000 jmp 77DFE8F9
以上是我用w32Dasm反汇编的代码,为什么同样的jmp指令反汇编成机器码时会有不同的结果呀?
...全文
204
4
打赏
收藏
jmp指令的疑惑?
77DFE021 EB21 jmp 77DFE044 77DFE855 E99F000000 jmp 77DFE8F9 以上是我用w32Dasm反汇编的代码,为什么同样的jmp指令反汇编成机器码时会有不同的结果呀?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xinxinyu2000
2003-07-26
打赏
举报
回复
构造jmp near指令
指令格式:
db 0e9h;(jmp near指令机器码)
dw RelativeOffset(相对偏移量)
所以构造jmp near指令的关键在于计算RelativeOffset
用两个等例子来说明问题:
JmpAddr : jmp Exit JmpAddr: db 0e9
... dw offset Exit-offset JmpAddr+3
... ...
Exit:
nop Exit: nop
RelativeOffset=jmp指令的后一条指令地址 减去 你要跳转的位置地址
而jmp指令的后一条指令地址=offset JmpAddr+3(3是本jmp指令长度)
对于Win32的32位jmp near来说,jmp指令机器玛不变,而长度则为5
因为32位的jmp near的RelativeOffset是32位的(它跳转的相对空间是:-2^31~2^31-1)
xinxinyu2000
2003-07-26
打赏
举报
回复
E9 是段内相对转移指令, 后面跟的是个相对当前指令的下一条指令的地址的偏移量, 不是目标地址的绝对值. 即转移去的目的地址是该指令中的偏移值再加上本转移指令的下一条指令的地址, 也就是说, 如果要 JMP 00481F3C, 这条指令在不同的地方是不同的. 比如:
00401000 E9370F0800 JMP 00481F3C
00401005 ...
因为在win32下e9指令占5个字节, 所以偏移量=目的地址-(转移指令地址+5)=00481f3c-(00401000+5)=00080f37, 输入时LSB在前,MSB在后就是了.
Areslee
2003-07-26
打赏
举报
回复
JMP分远、近跳转,又有直接间接之分,当然不同啊
karach
2003-07-26
打赏
举报
回复
机器不同吧
汇编语言_第2版答案
汇编语言_第2版答案 学习必不可少的资料
汇编语言程序设计课后答案
这是汇编语言程序设计的课后答案,非常有用,可以多多参照。
IBM-PC汇编语言程序设计课后习题答案(沈美明))
整套答案发布,敬请下载! 找同学要的,真不容易啊,支持csdn积分
微型计算机原理masm5.0
学习微型计算机原理和汇编语言必备的编译器
汇编语言教程及答案,很详细,有老师课件
汇编语言教程及答案,很详细,有老师课件,抓紧下
汇编语言
21,497
社区成员
41,616
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章