Write to address without segment register

ぃ、小莉子 提交于 2019-12-24 00:32:36

问题


I know this code will actually write data to ds:[100h]

mov [100h], ax

But how can I write to linear address 100H directly without using any segment register for a segment base?


回答1:


There is no way to get around segment register; every memory access is relative to some segment register. If you want to write to an absolute address, first load a segment register with an appropriate segment:

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

To load a linear address larger than 16 bit on an 8086 or 80286 system, try something like this:

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


来源:https://stackoverflow.com/questions/52649719/write-to-address-without-segment-register

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!