Assembly 使用「;db";在英特尔x86体系结构和DOSBOX中

Assembly 使用「;db";在英特尔x86体系结构和DOSBOX中,assembly,x86,dosbox,Assembly,X86,Dosbox,我对x86体系结构和汇编有些陌生。我有一个我无法理解的代码 data1 SEGMENT dat1 db 'ABCDEFGH' data1 ENDS 在代码的开头。稍后,我们将在代码中使用此数据1: mov ax, data1 mov ds, ax 我将DOSBOX用作模拟器和turbo调试器,其中它显示为: mov ax, 0B14 mov ds, ax 知道为什么吗?我也不理解db的一般用法。有时它用于显示消息,有时类似于我的示例 非常感谢:)使用db语句定义字节。这实际上不

我对x86体系结构和汇编有些陌生。我有一个我无法理解的代码

data1 SEGMENT
    dat1 db 'ABCDEFGH'
data1 ENDS
在代码的开头。稍后,我们将在代码中使用此数据1:

mov ax, data1 
mov ds, ax
我将DOSBOX用作模拟器和turbo调试器,其中它显示为:

mov ax, 0B14 
mov ds, ax
知道为什么吗?我也不理解db的一般用法。有时它用于显示消息,有时类似于我的示例


非常感谢:)

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

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

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

dat1 db 'ABCDEFGH'

dat1 db 'ABCDEFGH',0

dat1 db 'ABCDEFGH','$'

这是打字错误吗
mov-ax,donnee1
你的意思是
mov-ax,data1
?@user3144770是的,谢谢:)好的,非常感谢,但现在我还有一个问题:)那么当我进入ds到0B14时,我应该能够看到“ABCDEFGH”,可能是ascii码,但当我看到时,我看到一些随机数。顺便说一句,我们假设ds:data1,所以它应该在dsb中。如果值0B14h是EXE中实际编码的值,那么它将通过程序加载器的重新定位过程进行更改。因此,当您使用调试器时,您必须知道事物的位置。无法帮助您。@BOK和用户号guy:0B14是段,而不是段内的地址。一旦您的代码执行了
mov-ds,ax
,则
ds:[dat1]
处的内存应保存ASCII字符串。请注意,
data1
是段标签,
dat1
是常规标签。IDK如果DOS程序得到任何运行时重新定位。16位分段内存模型不是一件非常有用的东西,特别是如果你只是想学习汇编。如今,asm最有用的方法是编写优化的内部循环(例如,用于视频编解码器之类的东西),该循环以64位模式运行,具有分页内存。看见