Sono un principiante al montaggio e non so cosa significano tutte le db, dw, dd, le cose. Ho provato a scrivere questo piccolo script che fa 1 + 1, lo memorizza in una variabile e quindi visualizza il risultato. Ecco il mio codice finora:assembly x86 - Quale dimensione variabile da usare (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
ho bisogno di capire ciò che il db, DW, le cose dd significa e come influenzano l'impostazione variabile e che unisce e quel genere di cose.
Grazie in anticipo, Progrmr
byte db, 8 bit, parola dw 16 bit, dd doppia parola 32 bit. Nota: per x86 su altre piattaforme una parola è di 32 bit e la metà di 16 bit. Altri un byte è 9 bit, ecc. Quello che stai creando con un db è una raccolta di byte. proprio come char unsigned [] = ... in C. –
'push eax' /' pop [num] 'è ridicolo. Solo 'mov [num], eax'. O 'mov dword [num], 1 + 1' per lasciare che l'assemblatore faccia il 1 + 1 al momento dell'assemblaggio, invece del tempo di esecuzione, ed emetta una codifica di istruzione' mov m32, imm32'. (La dimensione 'dword' è necessaria perché non esiste un operando di registro per dedurre la dimensione da). O 'mov eax, 1' /' aggiungi eax, 1'. –
Presumo dal numero di upvotes che questa è una di quelle domande RTFM che emerge più in alto di google rispetto al manuale attuale.** Vedi [la wiki del tag x86] (http://stackoverflow.com/tags/x86/info) ** per i collegamenti al materiale di riferimento e ai tutorial. Una sottigliezza non menzionata nelle risposte è che MASM utilizza la dimensione dello spazio dichiarato dopo un'etichetta per implicare la dimensione dell'operando delle istruzioni che fanno riferimento ad essa. La sintassi NASM non ha strane cose su che cosa vuoi dire: puoi dire come si assemblerà un'istruzione senza guardare le altre linee di origine. –