无需段寄存器即可写入地址

时间:2018-10-04 14:51:45

标签: assembly x86 nasm x86-16 real-mode

我知道这段代码实际上会将数据写入ds:[100h]

mov [100h], ax

但是如何在不使用任何段寄存器作为段基的情况下直接写入线性地址100H

1 个答案:

答案 0 :(得分:5)

没有办法解决段寄存器;每个内存访问都与某个段寄存器相关。如果要写入绝对地址,请先将适当的段装入段寄存器:

        xor cx, cx
        mov es, cx        ; es = 0000
        mov [es:100h], ax ; [0000:0100] = ax

要在8086或80286系统上加载大于16位的线性地址,请尝试执行以下操作:

addr    dd 0x12345        ; the address we want to load from
        ...
        mov bl, [addr]    ; load low part
        xor bh,bh
        mov cx, [addr+1]  ; load high part
        shl cx, 4         ; adjust high part for segment selector
        mov es, cx        ; load segment register
        mov [es:bx], ax   ; store ax