Невозможно адресовать память более 64 КБ с сегментными регистрами - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь получить доступ к памяти в разделе данных с сегментными регистрами.Однако при достижении адресов около 64 КБ вместо содержимого сегмента данных я получаю несколько байт мусора, за которыми следуют нули.Код выглядит следующим образом:

section .data
    start: db 42
    other: times 100000 db 2

section .text

_main:  
    mov ax, ds
    add ax, 4062
    mov ds, ax
    mov si, start

    mov al, [ds:si]

Для сегментов, меньших, чем указано в регистре кода, al содержит 2, как и ожидалось, но начиная примерно со смещения сегмента 4062 (что составляет приблизительно 64 кБ), значения сначала кажутсяrandom, затем просто нули.

hexdump исполняемого файла показал, что он содержит весь раздел данных.В чем может быть проблема, если все данные есть и сегменты для более низких адресов доступны правильно?

Я использую компилятор NASM и DOSBox для запуска исполняемого файла.Вот как я собираю код:

nasm -f bin src/main.asm -o main.exe
...