是否可以在作业中使用段寄存器?
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
持有什么。
我有以下代码(在 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
持有什么。