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作为操作数。