关于 8086 汇编的 DB 和 DUP 指令
Regarding 8086 assembly's DB and DUP directives
所以我遇到了一个问题,让我质疑我对 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
定义了一个 assemble 时间常数,未存储在数据存储器中。在 MASM 语法 assemblers 中,它在某些上下文中的工作方式类似于变量。但是例如 mul NUM
只适用于内存源,而不是立即数,而 imul eax, ecx, NUM
或 shl ax, NUM
或 mov ax, NUM / 2
只适用于立即数,而不是内存源。
PRINT_SELECT DB 133 (?)
DB 123 (?)
在大多数汇编器中等同于
PRINT_SELECT DB 133 DUP(?)
DB 123 DUP(?)
您可以使用 8086 仿真器来更好地理解 8086 汇编。
下面显示了将更多地解释指令的示例代码。
使用 DB 123 (?)
后,您基本上会在内存中保留 123 个连续字节(内存位置)并为所有字节分配 NULL 值 (?)。
所以我遇到了一个问题,让我质疑我对 DB
(定义字节)和 DUP
(重复)指令的基本理解。我对它们的理解是:
NUM DB 34
将创建一个名为 NUM 的变量,并为其分配值 34。如 Cchar NUM = 34;
1NUM DB 34 DUP(?)
将给我一个包含 34 个项目的数组,每个项目都未分配。NUM DB 3 DUP(4)
会给我一个名为 NUM 的数组,其中包含 3 个项目:4、4、4。
这是正确的吗?
我在课本上遇到过:
PRINT_SELECT DB 133 (?) DB 123 (?)
这只是教科书上的一个错误,还是这两行代码完全是别的意思?
脚注 1:(编者注):asm 中的 NUM = 34
定义了一个 assemble 时间常数,未存储在数据存储器中。在 MASM 语法 assemblers 中,它在某些上下文中的工作方式类似于变量。但是例如 mul NUM
只适用于内存源,而不是立即数,而 imul eax, ecx, NUM
或 shl ax, NUM
或 mov ax, NUM / 2
只适用于立即数,而不是内存源。
PRINT_SELECT DB 133 (?)
DB 123 (?)
在大多数汇编器中等同于
PRINT_SELECT DB 133 DUP(?)
DB 123 DUP(?)
您可以使用 8086 仿真器来更好地理解 8086 汇编。
下面显示了将更多地解释指令的示例代码。
使用 DB 123 (?)
后,您基本上会在内存中保留 123 个连续字节(内存位置)并为所有字节分配 NULL 值 (?)。