Die variable Größe zu verwenden (db, dw, dd) mit x86 Assembler?

Ich bin ein Anfänger auf Montage und ich weiß nicht, was alle db, dw, dd, Dinge bedeuten.
Ich habe versucht zu schreiben, dieses kleine script, das macht 1+1, speichert es in einer variable und zeigt dann das Ergebnis. Hier ist mein code bisher:

.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

Brauche ich, um zu verstehen, was die db, dw, dd Dinge bedeuten und wie Sie Einfluss auf die variable Einstellung und der Kombination und die Art der Sache.

Vielen Dank im Voraus,
Progrmr

  • db byte, 8 bits, dw Wort 16 bits, dd double word, 32 bits. Hinweis: dies ist für x86, die auf anderen Plattformen ein Wort ist 32 bit und halfword 16 bit. Andere ein byte 9 bits, etc. Was man mit einer db ist eine Sammlung von bytes. genau wie unsigned char[]=... in C.
  • push eax / pop [num] ist lächerlich. Nur mov [num], eax. Oder mov dword [num], 1+1 zu lassen, die assembler machen das 1+1 für Sie beim montieren der Zeit, statt der run-time, und Strahlen eine mov m32, imm32 instruction encoding. (Die dword Größe ist nötig, denn es gibt kein register operand zu schließen, die Größe aus). Oder mov eax, 1 / add eax, 1.
  • Ich gehe davon aus die Anzahl der upvotes, dass dies einer der diese RTFM-Fragen, kommt höher hinauf in google als das eigentliche Handbuch. Finden Sie unter die x86-wiki-tag für links zu Referenzmaterial und tutorials. Eine Besonderheit nicht erwähnt in den Antworten ist, dass MASM verwendet die Größe des Raumes erklärt, nachdem ein label zu bedeuten, das operand-size-Anweisungen, die sich darauf beziehen. NASM-syntax nicht irgendwelche seltsamen guess-what-you-mean Zeug Los: können Sie sagen, wie eine Belehrung montieren, ohne Blick auf andere Zeilen Quelltext.
InformationsquelleAutor Progrmr | 2012-04-16
Schreibe einen Kommentar