Jestem początkującym w montażu i nie wiem, co oznaczają wszystkie db, dw, dd, rzeczy. Próbowałem napisać ten mały skrypt, który robi 1 + 1, przechowuje go w zmiennej, a następnie wyświetla wynik. Oto mój kod do tej pory:x86 assembly - Który zmienny rozmiar użyć (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
muszę zrozumieć, co db, DW, DD rzeczy, myśli i jak wpływają one na zmienne ustawienie i łączenie i tego typu rzeczy.
Dzięki z góry, Progrmr
bajt db, 8 bitów, dw słowo 16 bitów, dd podwójne słowo 32 bitów. Zauważ, że jest to dla x86 na innych platformach słowo to 32 bity, a pół słowa to 16 bitów. Inne bajty to 9 bitów itd. To, co tworzysz za pomocą db, to zbiór bajtów. tak jak unsigned char [] = ... w C. –
'push eax' /' pop [num] 'jest śmieszne. Po prostu "mov [num], eax". Lub 'mov dword [num], 1 + 1', aby pozwolić asemblerowi zrobić 1 + 1 dla ciebie w czasie składania, zamiast wykonywania, i emitować kodowanie instrukcji' mov m32, imm32'. (Rozmiar 'dword' jest potrzebny, ponieważ nie istnieje operand rejestru, z którego można wywnioskować rozmiar). Lub 'mov eax, 1' /' add eax, 1'. –
Przyjmuję z liczby przegranych, że jest to jedno z tych pytań RTFM, które pojawiają się wyżej w google niż rzeczywisty podręcznik.** Zobacz [wiki tagu x86] (http://stackoverflow.com/tags/x86/info) ** dla odnośników do materiałów referencyjnych i samouczków. Jedna subtelność nie wymieniona w odpowiedziach jest taka, że MASM używa wielkości przestrzeni zadeklarowanej po etykiecie, aby implikować wielkość instrukcji odnoszących się do niego. Składnia NASM nie ma żadnego dziwnego przypuszczenia - o tym, co masz na myśli - możesz powiedzieć, w jaki sposób instrukcja zostanie zebrana bez patrzenia na inne linie źródłowe. –