使用段寄存器不能寻址超过64 kB的内存

时间:2019-02-15 21:52:18

标签: assembly x86 nasm dos dosbox

我正在尝试使用段寄存器访问数据部分中的内存。但是,当到达接近64 kB的地址而不是数据段内容时,我得到几个字节的垃圾,后跟零。代码如下:

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 kB)开始,该值首先看起来是随机的,然后只是零。

可执行文件的十六进制转储表明它确实包含整个数据段。那么,如果所有数据都存在并且正确访问了较低地址的段,那可能是什么问题?

我正在使用NASM编译器和DOSBox启动可执行文件。 这就是我编译代码的方式:

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

0 个答案:

没有答案