Je suis un débutant à l’Assemblée et je ne sais pas ce que signifient tous les db, dw, dd. J'ai essayé d'écrire ce petit script qui fait 1 + 1, le stocke dans une variable et affiche ensuite le résultat. Voici mon code jusqu'à présent:
.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
J'ai besoin de comprendre ce que les choses db, dw, dd signifient et comment elles affectent le paramétrage et la combinaison des variables et ce genre de chose.
Merci d'avance, Progrmr
Examen rapide,
De tutoriel sur l’assemblage x86 ,
L'instruction pop supprime l'élément de données de 4 octets situé en haut de la pile prise en charge par le matériel dans l'opérande spécifié (c.-à-d. Registre ou emplacement mémoire). Il déplace d'abord les 4 octets situés à l'emplacement de mémoire [SP] dans le registre ou l'emplacement de mémoire spécifié, puis incrémente SP de 4.
Votre numéro est 1 octet. Essayez de le déclarer avec DD
pour qu'il devienne 4 octets et corresponde à la sémantique pop
.
La liste complète est:
DB, DW, DD, DQ, DT, DDQ et DO (utilisés pour déclarer des données initialisées dans le fichier de sortie.)
Voir: http://www.tortall.net/projects/yasm/manual/html/nasm-pseudop.html
Ils peuvent être appelés de différentes manières: (Remarque: pour Visual-Studio - utilisez la syntaxe "h" au lieu de "0x" - par exemple, pas 0x55 mais 55h à la place):
db 0x55 ; just the byte 0x55
db 0x55,0x56,0x57 ; three bytes in succession
db 'a',0x55 ; character constants are OK
db 'hello',13,10,'$' ; so are string constants
dw 0x1234 ; 0x34 0x12
dw 'A' ; 0x41 0x00 (it's just a number)
dw 'AB' ; 0x41 0x42 (character constant)
dw 'ABC' ; 0x41 0x42 0x43 0x00 (string)
dd 0x12345678 ; 0x78 0x56 0x34 0x12
dq 0x1122334455667788 ; 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11
ddq 0x112233445566778899aabbccddeeff00
; 0x00 0xff 0xee 0xdd 0xcc 0xbb 0xaa 0x99
; 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11
do 0x112233445566778899aabbccddeeff00 ; same as previous
dd 1.234567e20 ; floating-point constant
dq 1.234567e20 ; double-precision float
dt 1.234567e20 ; extended-precision float
DT n'accepte pas les constantes numériques en tant qu'opérandes et DDQ n'accepte pas les constantes à virgule flottante en tant qu'opérandes. Toute taille supérieure à DD n'accepte pas les chaînes en tant qu'opérandes.