我不知道所有的db,dw,dd是什么意思。我试着写了一个小脚本来执行1+1,将其存储在一个变量中,然后显示结果。下面是我目前为止的代码:
.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的含义,以及它们如何影响变量设置和组合等等。
2条答案
按热度按时间unhi4e5o1#
快速回顾,
*DB-定义字节,8位
*DW-定义字。在典型的x86 32位系统上通常为2字节
*DD-定义双字。在典型的x86 32位系统上通常为4字节
从x86 assembly tutorial开始,
弹出指令将4字节的数据元素从硬件支持的堆栈顶部移到指定的操作数(即寄存器或内存位置)。它首先将内存位置[SP]的4字节移到指定的寄存器或内存位置,然后将SP递增4。
您的num为1字节。请尝试使用
DD
声明它,使其变为4字节并与pop
语义匹配。kninwzqo2#
完整列表为:
DW、DD、DQ、DT、DDQ和DO(用于在输出文件中声明初始化的数据)。
参见:http://www.tortall.net/projects/yasm/manual/html/nasm-pseudop.html
可以通过多种方式调用它们:(注意:对于Visual-Studio-使用"h"而不是"0x"语法-例如:不是0x55,而是55h):
DT不接受数值常量作为操作数,DDQ不接受浮点常量作为操作数。任何大于DD的大小都不接受字符串作为操作数。