使用" db"在intel x86架构和DOSBOX中

时间:2015-11-02 21:40:38

标签: assembly x86 dosbox

我对x86架构和组装都有点新意。我有这段代码,我无法理解。

data1 SEGMENT
    dat1 db 'ABCDEFGH'
data1 ENDS

位于代码的开头。后来我们在代码中使用了这个数据:

mov ax, data1 
mov ds, ax

我正在使用DOSBOX作为模拟器和turbo调试器,并在那里显示为:

mov ax, 0B14 
mov ds, ax

知道为什么吗?我也不了解db的用法。有时它用于显示消息,有时类似于我的例子。

非常感谢您提前:))

2 个答案:

答案 0 :(得分:1)

db语句用于定义字节。这实际上不是一条指令,而是汇编用户将自定义数据放在某处。此数据位于内存中的特定位置,因此反汇编的数据显示的是代码中使用的地址,而不是标签。标签只是地址的占位符,由汇编程序分配。

答案 1 :(得分:1)

data1 位于代码开头的事实并不太重要。汇编器/链接器将在EXE中为其提供合适的位置。因此,在调试器中看到mov ax, 0B14是完全可能的。 0B14h是此数据段放在EXE中的地址。

您的示例与使用db显示消息之间没有太大区别。在后一种情况下,最多会添加一个终止字节。

dat1 db 'ABCDEFGH'

dat1 db 'ABCDEFGH',0

dat1 db 'ABCDEFGH','$'