x86汇编 – 使用哪个可变大小(db,dw,dd)

我是一个初学者,我不知道db,dw,dd是什么意思。 我试图写这个1 + 1的小脚本,将它存储在一个variables中,然后显示结果。 这是我的代码到目前为止:

.386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib .data num db ? ; set variable . Here is where I don't know what data type to use. .code start: mov eax, 1 ; add 1 to eax register mov ebx, 1 ; add 1 to ebx register add eax, ebx ; add registers eax and ebx push eax ; push eax into the stack pop num ; pop eax into the variable num (when I tried it, it gave me an error, i think thats because of the data type) invoke StdOut, addr num ; display num on the console. invoke ExitProcess ; exit end start 

我需要了解db,dw,dd是什么意思,以及它们如何影响variables设置和组合等等。

在此先感谢,Progrmr

DB – 定义字节。 8位

DW – 定义Word。 在典型的x86 32位系统上一般为2个字节

DD – 定义双字。 在典型的x86 32位系统上一般为4个字节

从x86汇编教程中 ,

popup指令将硬件支持堆栈顶部的4字节数据元素移除到指定的操作数(即寄存器或内存位置)。 首先将位于存储单元[SP]的4个字节移动到指定的寄存器或存储器位置,然后将SP增加4。

你的数字是1个字节。 尝试用DD声明它,使它变成4个字节,并与pop语义相匹配。

完整列表是:

DB,DW,DD,DQ,DT,DDQ和DO(用于声明输出文件中的初始化数据)

请参阅: http : //www.tortall.net/projects/yasm/manual/html/nasm-pseudop.html

可以用很多种方式调用它们(注意:对于Visual-Studio,使用“h”而不是“0x”语法 – 例如:不是0x55而是55h):

  db 0x55 ; just the byte 0x55 db 0x55,0x56,0x57 ; three bytes in succession db 'a',0x55 ; character constants are OK db 'hello',13,10,'$' ; so are string constants dw 0x1234 ; 0x34 0x12 dw 'A' ; 0x41 0x00 (it's just a number) dw 'AB' ; 0x41 0x42 (character constant) dw 'ABC' ; 0x41 0x42 0x43 0x00 (string) dd 0x12345678 ; 0x78 0x56 0x34 0x12 dq 0x1122334455667788 ; 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11 ddq 0x112233445566778899aabbccddeeff00 ; 0x00 0xff 0xee 0xdd 0xcc 0xbb 0xaa 0x99 ; 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11 do 0x112233445566778899aabbccddeeff00 ; same as previous dd 1.234567e20 ; floating-point constant dq 1.234567e20 ; double-precision float dt 1.234567e20 ; extended-precision float 

DT不接受数字常量作为操作数,而DDQ不接受作为操作数的float常量。 任何大于DD的大小都不接受string作为操作数。