关于 8086 程序集的 DB 和 DUP 指令

sar*_*ona 5 assembly directive x86-16

所以我遇到了一个问题,让我质疑我对DB(define byte) 和DUP(duplicate) 指令的基本理解。我对它们的理解方式是:

  • NUM DB 34将创建一个名为NUM的变量,并为其分配值 34。类似于 C char NUM = 34;1
  • NUM DB 34 DUP(?)会给我一个包含 34 个项目的数组,每个项目都未分配。
  • NUM DB 3 DUP(4)会给我一个名为NUM的数组,其中包含 3 个项目:4、4、4。

它是否正确?

在我的教科书中我遇到过:

PRINT_SELECT DB 133 (?)
             DB 123 (?)
Run Code Online (Sandbox Code Playgroud)

这只是教科书上的一个错误,还是这两行代码完全有其他含义?


脚注 1:(编者注):NUM = 34在 asm 中定义了一个不存储在数据存储器中的汇编时常量。在 MASM 语法汇编器中,它的工作方式与某些上下文中的变量类似。但例如mul NUM仅适用于内存源,不适用于立即数, whileimul eax, ecx, NUM或 ,shl ax, NUMmov ax, NUM / 2仅适用于立即数,不适用于内存源。

小智 5

PRINT_SELECT DB 133 (?)
             DB 123 (?)
Run Code Online (Sandbox Code Playgroud)

在大多数汇编器中相当于

PRINT_SELECT DB 133 DUP(?)
             DB 123 DUP(?)
Run Code Online (Sandbox Code Playgroud)

您可以使用8086模拟器来更好地理解8086汇编。
下面显示了更多解释这些指令的示例代码。
一旦您使用了DB 123 (?),您基本上就在内存中保留了 123 个连续字节(内存位置),并为所有这些字节分配了 NULL 值 (?)。

在此输入图像描述