【发布时间】:2019-02-28 14:54:02
【问题描述】:
我想知道使用 mov 指令直接加载代码段寄存器是否有任何限制。
这让我在从实模式切换到保护模式时感到震惊。我发现为了在代码段中放入正确的值,“跳转”指令用于设置正确的段。
那么这种跳转指令的使用是由于任何这样的限制吗?为什么我们不能直接将值加载到代码段中?
【问题讨论】:
-
您不能直接使用 MOV 指令修改 CS,但可以使用 FAR JMP 或 FAR CALL 设置它,在其中指定要加载到 CS 中的段和标签跳到。您也可以使用 FAR CALL。还有一些其他更复杂的方式我不会提及。 FAR JMP 的语法取决于您使用的汇编程序(您从未提到过)
-
如果你查看MOV 的指令集参考,它有这样的语句MOV 指令不能用于加载CS 寄存器。尝试这样做会导致无效的操作码异常 (#UD)。要加载 CS 寄存器,请使用 far JMP、CALL 或 RET 指令
标签: assembly x86 memory-segmentation