我是彙編的初學者,我不知道db,dw,dd是什麼意思。 我試圖寫這個1 + 1的小腳本,將它存儲在一個變量中,然後顯示結果。這是我到目前爲止的代碼:x86彙編 - 使用哪種可變大小(db,dw,dd)
.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
我需要了解什麼數據庫,DW,DD事是什麼意思以及它們如何影響變量設置和組合以及諸如此類的事情。
由於提前, Progrmr
db字節8位dw字16位dd雙字32位。請注意,對於其他平臺上的x86,一個字是32位,半字是16位。其他一個字節是9位,等等你用db創建的是一個字節集合。就像無符號char [] = ...在C中。 – 2012-04-16 04:40:44
'push eax' /'pop [num]'是荒謬的。只需'mov [num],eax'。或者'mov dword [num],1 + 1'讓彙編程序在彙編時爲你做1 + 1,而不是運行時,併發出'mov m32,imm32'指令編碼。 (由於沒有寄存器操作數可以從中推斷大小,因此需要'dword'大小)。或'mov eax,1' /'add eax,1'。 – 2016-02-25 10:07:47
我從upvotes的數量中認爲,這是Google在實際手冊中出現的RTFM問題之一。**請參閱[x86標記wiki](http://stackoverflow.com/tags/x86/info)**以獲取參考資料和教程的鏈接。答案中沒有提到的一個微妙之處在於,MASM使用標籤後聲明的空間大小來暗示指向它的指令的操作數大小。 NASM語法沒有任何奇怪的猜測 - 你說的是什麼意思:你可以告訴一個指令如何組裝,而不用考慮其他的源代碼。 – 2016-02-25 10:16:13