W poniższym tutorialu utworzymy przykładowy projekt C/ASM za pomocą Visual Studio 2008.
Nasza aplikacja będzie mnożyła dwie liczby i zwracała wynik na ekranie.
W pierwszym kroku dodajemy nowy projekt Visual C++/Win32/Win32 Console Application
Typ projektu Console Application
Zaznaczamy Empty Project
Do nowo utworzonego pustego projektu dodajemy plik (C++ File .cpp) np: program.cpp
W kolejnym kroku w folderze projektu dodajemy plik tekstowy któremu zmieniamy rozszerzenie i nazwę np na program.asm. Dodajemy istniejący plik do projektu.
Ważne aby w kolejnym kroku zaznaczyć „Matching Custom Build Rules” na projekt MASM i zatwierdzić „OK”
Przystępujemy do pisania, zacznijmy od kodu c++/c program.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream> using namespace std; extern "C" { unsigned int liczba=1; unsigned int druga=2; unsigned int wynik; int asm_main(); } int main(){ wynik = asm_main(); cout << wynik << endl; system("PAUSE"); return 0; } |
proj.asm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | .386 ;Instrukcje procesora 80386 .MODEL FLAT, C ;Model rozmieszczenia programu w pamieci (FLAT) EXTERN liczba:DWORD ;Zmienna zadeklarowana w innym module (EXTERN) EXTERN druga:DWORD EXTERN wynik:DWORD .CODE ;Poczatek segmentu przeznaczonego na instrukcje asm_main PROC ;Definicja procedury (funkcji) "asm_main" mov eax, liczba ;Skopiowanie wartosci z obszaru pamieci zajetej przez zmienna "liczba" do rejestru bx mul druga ;Pomnożenie zawartości rejestru eax przez zmienną "druga" i pozostawienie wyniku w rejestrze eax mov wynik, eax ;Skopiowanie wartosci z rejestru eax do obszaru pamieci zajetego przez zmienna "wynik" ret ;Powrot z funkcji asm_main ENDP END |
W przypadku błędów przy kompilacji należy dodać do środowiska Visual Studio foldery
C:\Windows\system
C:\Windows\System32
Options>Projects and Solutions>VC++ Directories
Debugowanie C/ASMw Visual Studio
Aby rozpocząć debugowanie programu w języku assembler należy zatrzymać program poprzez ustawienie breakpointa.
Przydatne okna w trybie debuggera:
Registers (Rejestry) Skrót Ctrl+Alt+G w trybie debuggera lub z menu: Debug/Windows/Registers
Dissasembly (wyświetla kod ASM) Skrót Ctrl+Alt+D w trybie debuggera lub z menu: Debug/Windows/Dissasembly – pozwala np uzyskać kod ASM z kodu C++/C itp
W oknie poruszamy się za pomocą klawiszy:
F10 – Step Over
F11 – Step Into
Shift + F11 – Step Out
F5 – Continue
I to by było tyle na temat pierwszego programu w Assemblerze
Comments