是否可以在作业中使用段寄存器?

Is it possible to use segment registers to in an assigment?

我有以下代码(在 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 寄存器必须包含该值,尽管它没有。为什么会这样?

是的,这是可能的,但它并不像您想象的那样。

说明

mov al, es:0x48

从地址 es:0x48 加载一个字节到 al。如果地址 es:0x48 的字节保持 0x48.

,这只会将 0x48 加载到 al

x86 指令集没有计算线性地址的指令。甚至像

lea ax, es:0x48

只会给你 0x48(即段中的偏移量),而不管 es 持有什么。