关于8086汇编的DB和DUP指令

时间:2017-05-18 16:52:16

标签: assembly x86-16

所以我遇到了一个问题,让我质疑我对DB(定义字节)和DUP(重复)指令的基本理解。我理解它们的方式是:

  • 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 (?)

这只是教科书中的一个错误,还是这两行代码完全是另一回事?

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

1 个答案:

答案 0 :(得分:4)

PRINT_SELECT DB 133 (?)
             DB 123 (?)
大多数汇编程序中的

等同于

PRINT_SELECT DB 133 DUP(?)
             DB 123 DUP(?)

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

enter image description here