我对x86架构和组装都有点新意。我有这段代码,我无法理解。
data1 SEGMENT
dat1 db 'ABCDEFGH'
data1 ENDS
位于代码的开头。后来我们在代码中使用了这个数据:
mov ax, data1
mov ds, ax
我正在使用DOSBOX作为模拟器和turbo调试器,并在那里显示为:
mov ax, 0B14
mov ds, ax
知道为什么吗?我也不了解db的用法。有时它用于显示消息,有时类似于我的例子。
非常感谢您提前:))
答案 0 :(得分:1)
db
语句用于定义字节。这实际上不是一条指令,而是汇编用户将自定义数据放在某处。此数据位于内存中的特定位置,因此反汇编的数据显示的是代码中使用的地址,而不是标签。标签只是地址的占位符,由汇编程序分配。
答案 1 :(得分:1)
data1 位于代码开头的事实并不太重要。汇编器/链接器将在EXE中为其提供合适的位置。因此,在调试器中看到mov ax, 0B14
是完全可能的。 0B14h是此数据段放在EXE中的地址。
您的示例与使用db
显示消息之间没有太大区别。在后一种情况下,最多会添加一个终止字节。
dat1 db 'ABCDEFGH'
dat1 db 'ABCDEFGH',0
dat1 db 'ABCDEFGH','$'