鱼C论坛

 找回密码
 立即注册
查看: 1119|回复: 7

[已解决]检测点3.1.2的问题

[复制链接]
发表于 2023-4-7 20:57:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
jmp 0ff0:0100,这个语句是跳到哪里了呀,我怎么看不懂了呢
最佳答案
2023-4-7 21:46:10
本帖最后由 jackz007 于 2023-4-7 21:57 编辑

    8086/8088 处理器的段地址:偏移地址到 20 位内存地址的计算公式为:
20 位内存地址 = 段地址 x 10h + 偏移地址

    所以,对于地址 0ff0:0100,其对应的 20 位内存地址为 ff0h x 10h + 100h = ff00h + 100h = 10000h

    可见,段地址:偏移地址与 20 位内存地址的对应关系并不唯一,1000:0000、0fff:0010、0ff0:0100、0fe0:0200、0ffe:0020、0fd0:0300、0ffd:0030 等不同的形式所表达的都是同一个内存地址 10000h。

    所以,段 : 偏移 的具体外在形式并不重要,重要的是他们组合在一起所表达的内存地址才是最重要的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-7 20:59:40 | 显示全部楼层
代码呢,图片呢(https://fishc.com.cn/thread-226351-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-7 20:59:44 | 显示全部楼层
这是一个x86汇编指令,它表示跳转(jump)到指定的内存地址。这个地址由两个部分组成:0FF0(段地址)和0100(偏移地址)。这个指令用于将程序的执行流程转移到这个地址。

我们来计算一下这个地址。在x86架构中,物理地址是通过将段地址左移4位(乘以16)然后加上偏移地址来计算的:

物理地址 = (段地址 << 4) + 偏移地址
物理地址 = (0FF0 << 4) + 0100

将0FF0左移4位后得到FF00,然后加上0100得到10000。所以这条指令表示跳转到物理地址0x10000。

这个jmp指令让程序跳转到物理地址0x10000处执行代码。如果你在阅读汇编代码时遇到这个指令,你需要查看地址0x10000处的指令以了解程序接下来会执行哪些操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-7 21:06:50 | 显示全部楼层
歌者文明清理员 发表于 2023-4-7 20:59
代码呢,图片呢(https://fishc.com.cn/thread-226351-1-1.html)

完全没看懂怎么上传图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-7 21:10:12 | 显示全部楼层
isdkz 发表于 2023-4-7 20:59
这是一个x86汇编指令,它表示跳转(jump)到指定的内存地址。这个地址由两个部分组成:0FF0(段地址)和010 ...

说实话,还是没看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-7 21:13:26 | 显示全部楼层
liuming1978 发表于 2023-4-7 21:10
说实话,还是没看懂

前面有的例子,jmp 1000:3   是跳到内存段10000的第三号字节处,可是这个怎么又变以你说的这样了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-7 21:46:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2023-4-7 21:57 编辑

    8086/8088 处理器的段地址:偏移地址到 20 位内存地址的计算公式为:
20 位内存地址 = 段地址 x 10h + 偏移地址

    所以,对于地址 0ff0:0100,其对应的 20 位内存地址为 ff0h x 10h + 100h = ff00h + 100h = 10000h

    可见,段地址:偏移地址与 20 位内存地址的对应关系并不唯一,1000:0000、0fff:0010、0ff0:0100、0fe0:0200、0ffe:0020、0fd0:0300、0ffd:0030 等不同的形式所表达的都是同一个内存地址 10000h。

    所以,段 : 偏移 的具体外在形式并不重要,重要的是他们组合在一起所表达的内存地址才是最重要的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-7 22:34:36 | 显示全部楼层
jackz007 发表于 2023-4-7 21:46
8086/8088 处理器的段地址:偏移地址到 20 位内存地址的计算公式为:

这个我看懂了,并且我也用二进制格式检验了一下,完全正确,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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