79

私は組み立ての初心者で、すべての 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 の意味と、それらが変数の設定や結合などにどのように影響するかを理解する必要があります。

前もってありがとう、Progrmr

4

2 に答える 2

104

簡単なレビュー、

  • DB-バイトを定義します。8ビット
  • DW -Wordを定義します。一般的なx8632ビットシステムでは通常2バイト
  • DD-ダブルワードを定義します。一般的なx8632ビットシステムでは通常4バイト

x86アセンブリチュートリアルから、

pop命令は、ハードウェアでサポートされているスタックの最上位から指定されたオペランド(つまり、レジスタまたはメモリ位置)に4バイトのデータ要素を削除します。最初にメモリ位置[SP]にある4バイトを指定されたレジスタまたはメモリ位置に移動し、次にSPを4ずつインクリメントします。

numは1バイトです。4バイトになり、セマンティクスDDと一致するように、で宣言してみてください。pop

于 2012-04-16T04:39:58.370 に答える