我正在读一本关于x86 / x86-64汇编编程的书。 在那本书中,几乎所有的实验都是由#34;装载机加载的。 这让我很困惑,因为我之前从未使用过这种汇编代码。
我想知道从-S
或--emit-asm
编译器选项生成的程序集是否在&#34;虚拟环境&#34;中运行,其中硬件是由操作系统提取的?< / p>
当我在编译器输出的asm文件中看到eax
,xmm0
或esp
时,
它们是指我CPU中的真实寄存器吗?或者只是一个概念性对象,它将在运行时由OS解释?
答案 0 :(得分:0)
我想知道从-S或--emit-asm编译器选项生成的程序集是否在“虚拟环境”中运行,其中硬件是由OS抽象的?
在大多数情况下,它是相同的物理硬件。如果您在虚拟机环境(VMWare,HyperV)中运行,那么它自然会被抽象化。
在某些情况下,操作系统确实抽象了硬件。有时会模拟过时和不受支持的说明。操作系统有时允许通过模拟INP / OUTP命令与某些硬件外围设备进行交互 - 这些命令通常禁止用于非内核代码。
某些命令在操作系统下不能像在裸机上那样工作 - 例如,堆栈增长是通过保护页实现的,其中超出允许区域的内存访问会导致操作系统控制并增加堆栈。
当涉及到香草命令(例如mov eax, esp
)时,它会在物理硬件上执行。
答案 1 :(得分:-1)
这些是真正的寄存器,汇编语言随计算机体系结构而变化,如寄存器