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