首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >近/远jmp/呼叫细节

近/远jmp/呼叫细节
EN

Stack Overflow用户
提问于 2013-10-28 17:11:08
回答 1查看 1.8K关注 0票数 1

我无法完全掌握jmp/call的远/近版本的细节。据我所知,jmp/call指令使用指令本身的相对偏移量作为操作数。Far jmp/call指令使用绝对地址作为操作数。

1)在受保护模式下,这个绝对地址只是编译器放置的虚拟地址。

2)在实际模式中,您通常会写:

代码语言:javascript
复制
jmp [new number of code segment][proc name as offset]

然后用公式计算绝对地址:

代码语言:javascript
复制
address = new number * 10h + offset

这实际上是实模式下的物理地址。

例如,当代码跳转到加载的引导扇区代码时,执行远jmp/时,CPU会自动更新CS。我看不到在引导扇区文件的源代码中设置CS值。

在保护模式下:cs = index in descriptor table = absolute address / page size

实模式:cs = segment index in RAM = specified "new number of code segment"

我的假设正确吗?

EN

回答 1

Stack Overflow用户

发布于 2013-10-28 20:20:18

是的,跳远/呼叫当然会更新CS

在受保护模式下,段选择器根据位#2的值,引用表中的一个条目,即GDT (全局描述符表)或LDT (本地描述符表)。所述描述符项持有该段的基本地址和限制。

这在英特尔手册中都有详细描述。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19640947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档