鱼C论坛

 找回密码
 立即注册
查看: 610|回复: 4

[已解决]jmp跳转问题????

[复制链接]
发表于 2023-5-13 16:01:57 | 显示全部楼层 |阅读模式
4鱼币

2

2

jmp 向后跳时:
        cs: 20a8        ip: 3
ip = ip + 指令长度(2)
        cs: 20a8        ip: 5
执行 EB06
        ip= 5 + 6
最终跳到
        cs: 20a8        ip: 0bH


1

1

jmp 向前跳时
        cs: 20a8        ip: 3
ip = ip + 指令长度(2)
        cs: 20a8        ip: 5
执行 EBFB
        ip = 5 +  (-3)
最终跳到
        cs: 20a8        ip: 2
--------------------------------------------
这个向前跳为什么debug最后的结果是 【cs: 20a8        ip: 0】 哪位大佬可以跟我解释一下
最佳答案
2023-5-13 16:01:58
根据你提供的信息,跳转指令 EBFB 是一个有符号的跳转指令,其中的 FB 是一个带符号的 8 位数值,它代表了当前指令的偏移量,它的值为 -5。因此,当执行这个跳转指令时,IP 的值会减去 5,也就是从 5 变成了 0。因此,最终的结果是 cs: 20a8, ip: 0。

最佳答案

查看完整内容

根据你提供的信息,跳转指令 EBFB 是一个有符号的跳转指令,其中的 FB 是一个带符号的 8 位数值,它代表了当前指令的偏移量,它的值为 -5。因此,当执行这个跳转指令时,IP 的值会减去 5,也就是从 5 变成了 0。因此,最终的结果是 cs: 20a8, ip: 0。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-13 16:01:58 | 显示全部楼层    本楼为最佳答案   
根据你提供的信息,跳转指令 EBFB 是一个有符号的跳转指令,其中的 FB 是一个带符号的 8 位数值,它代表了当前指令的偏移量,它的值为 -5。因此,当执行这个跳转指令时,IP 的值会减去 5,也就是从 5 变成了 0。因此,最终的结果是 cs: 20a8, ip: 0。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-13 16:02:54 | 显示全部楼层
在执行向前跳的 JMP 指令时,CPU 会将当前 IP 寄存器的值减去指令中给定的偏移量,然后重新赋值给 IP 寄存器。因此,当 IP 寄存器的值为 5 且执行了 JMP -3 的指令时,IP 寄存器的最终值将为 2。而由于你的代码片段中没有展示完整的上下文信息,导致无法对问题进行更进一步的分析。多数情况下在调试阶段出现这种不确定性的情况是因为寄存器或内存中存储的数据被修改,所以建议您在必要时检查相关的寄存器、内存或堆栈变量的值。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-13 16:05:33 | 显示全部楼层
可以考虑一下内存寻址的方式。

第一次 JMP 指令是要往前跳的,最终跳转到了 cs:20a8 的地址 0x02 处,但是实际上这里所看到的寻址并非像 CPU 内部使用的偏移地址那样正整数增长。在指针溢出(overflow)时要特别注意,否则程序就会崩溃或产生不可预测的结果。常见方法是通过模拟器来仔细跟踪每个内存位置和 CPU 寄存器的值。

CPU 中通常采用各种寄存器以及如果寄存器不够,再结合内存中的数据,进行计算获取最后的跳转地址等信息。而跳转后的对应位置由物理RAM/ROM中的实际地址表示,这个地址是一个非负整数值,按照物理地址的习惯会从0开始。因此,在实际内存中,该程序会直接访问物理地址0000H~FFFFH的位置,其中包含属于cs:20a8段的寄存器值对应的位置。

因此,在向前跳转 EBFB 指令执行之后,首先 IP=5+(-3)=2,并将在 cs:20a8 段的该位置上读取下一条待执行指令,即 IP 指针现在已经指向了 cs:20a8 段的第0x02个字节位置,而这里的 0x02 对应于物理内存中的首地址0000:0002H。

因此调试器上打印的结果 cs:20a8 ip:0 是跳转后所访问的内存地址的真实表示方式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-13 16:07:53 | 显示全部楼层
isdkz 发表于 2023-5-13 16:01
根据你提供的信息,跳转指令 EBFB 是一个有符号的跳转指令,其中的 FB 是一个带符号的 8 位数值,它代表了 ...

确实,是我算错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 19:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表