【发布时间】:2019-12-04 18:43:05
【问题描述】:
我读到 32 位 x86 CPU 在访问内存时使用段寄存器,但是当我在 NASM 中编写汇编代码时,我不必指定任何段寄存器。
这是否意味着 NASM 在生成的机器指令中包含段寄存器,还是我遗漏了什么?
【问题讨论】:
-
使用的段寄存器是隐式的,大部分指令使用
ds。当地址中使用ebp/esp时,隐式使用ss。一些特定用途的指令使用固定段(例如stosb)。如果程序员需要,可以显式覆盖加载和存储中使用的段(例如,NASM 中的mov [cs:label], eax)。在使用主流操作系统的 32 位汇编中,很少需要这样做(只有 Windows 中的 TLS 和 PEB/TEB 除外)。 -
为了清楚起见,“used”指的是cpu,而不是nasm。