【发布时间】:2021-12-27 14:20:13
【问题描述】:
我有以下代码(在 16 位实模式下使用 nasm 工作):
mov bx , 0x0 ;; use es(egmen) register
mov es , bx ;; to mov a value in al
mov al , es:0x48 ;; and print
int 0x10
mov al , 0x48 ;; shouldn't this print
int 0x10 ;; the same as above ?
据我所知 es:0x48 (es=0x0) 应该计算为 0x48。 所以 al 寄存器必须包含那个值,尽管它没有。为什么会这样?
【问题讨论】:
-
奇怪的是,NASM 允许内存地址使用类似 MASM 的语法,打破了内存操作数 总是 周围有
[]的通常 NASM 规则。用ndisasm -b16 foo.bin反汇编你会看到26A04800 mov al,[es:0x48]
标签: assembly x86-16 memory-segmentation