这个db汇编语句是什么意思?

Dig*_*tel -2 x86 assembly tasm

我正在使用汇编语言编辑项目,数据段中有一行:

buffer1 db 80, 0, 80 dup(0)
Run Code Online (Sandbox Code Playgroud)

有人可以详细说明吗?

MBy*_*ByD 5

DB伪指令进行数据分配内存,并与给定的值进行初始化.您可以通过用逗号分隔连续值来指定连续值.所以DB 5将分配一个字节,并将其值设定为5DB 4, 3将分配2个字节,其值设置为4和3.

X DUP(V)将复制VX次,所以2 DUP(4)就像4, 4.

结合这些,我们得到的DB 80, 0, 80 DUP(0)DB 80, 0, 0, 0, 0, ... 将分配82个字节,第一个初始化为80,其余为0.

前缀buffer1是缓冲区标签,它允许您从代码中的其他位置引用缓冲区.

这一行与C代码松散相等:

char buffer1[] = {
    80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0
};
Run Code Online (Sandbox Code Playgroud)

或者,甚至更简单:

char buffer1[82] = { 80, 0 };
Run Code Online (Sandbox Code Playgroud)

  • 这可能是一个缓冲区,用于从MSDOS中的控制台读取一行,int 21h,寄存器AH = 0AH,或旧的C conio.h函数cgets().第一个字节是缓冲区的大小(在本例中为80个字节),第二个字节是用户输入的返回的实际字节数.其余字节是用户的输入. (3认同)