我一直在考虑以下汇编代码(NASM IA-32):
ORG 0xFF000 ; This is (1MB - 4KB) 0x100000 - 0x1000=0xFF000.
USE16 ;produce 16bit code
code_size EQU (end -init_16) ; calculates code length
times (4096-code_size) db 0x90 ; fills the rest of the memory with NOP's
init_16:
cli ;disables interrupts (not really necessary, just an example)
jmp init_16 ;infinite loop
align 16
end :
Run Code Online (Sandbox Code Playgroud)
这只是一个例子。这个想法是我们在实模式下有一个 IA-32 处理器。在内存的顶部 4 KB 上,我们有一个 NVRAM(非易失性 RAM)。复位向量指向 0xFFF0,因此代码尝试将cli指令放置在 0xFFFF0 地址中,而与放置在init16标签和align 16指令之间的指令数量无关(限制为 16 字节,因此可以适应 1M 字节)。但我无法理解它是如何做到的。
我对align …