Написать на адрес без сегментного регистра - PullRequest
0 голосов
/ 04 октября 2018

Я знаю, что этот код будет фактически записывать данные в ds: [100h]

mov [100h], ax

Но как я могу записать в линейный адрес 100H напрямую, без использования какого-либо регистра сегмента для базы сегмента?

1 Ответ

0 голосов
/ 04 октября 2018

Нет способа обойти сегментный регистр;каждый доступ к памяти относится к некоторому сегментному регистру.Если вы хотите записать в абсолютный адрес, сначала загрузите регистр сегмента с соответствующим сегментом:

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

Чтобы загрузить линейный адрес больше 16 бит в системе 8086 или 80286, попробуйте что-то вроде этого:

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
...