Witam,
dopiero zaczynam swoją przygodę z Assemblerem, więc na początku proszę o wyrozumiałość.
Muszę nauczyć się programowania obiektowego wlaśnie w Assemblerze ( obiekty, metody wirtualne... itp. ). Na początku zacząłem od Visual Studio i wstawek assemblerowych i napisałem metodę klasy - int dodaj(), dodająca atrybuty; Ale wydaje mi się, że idę w złym kierunku. Bo wg mnie nie utworzyłem w asemblerze metody ale jedynie jej ciało.
Moglibyście mi pomóc i naprowadzić na właściwe tory? Jakieś przydatne linki?
A może nie robić tego w VS tylko NASM?
Poniżej będę aktualizował swoje poczynania: może ułatwi to Wam, a w konsekwencji mi ogarnięcie tego :D
v0.1 : Ustawilem Assembly Project w Visual Studio, wiec NASM wg mnie juz mi nie potrzeby.
v0.2 : Znalazłem taki fajny translator na Assembly, co uważacie na ten temat? Na razie nie działa, walczyć z tym, good idea? https://godbolt.org/
using namespace std;
class cKlasa {
public:
int a;
int b;
int dodaj(){
return(a+b);
};
};
int main(){
cKlasa obiekt;
int result = obiekt.dodaj();
}
Powyższy kod translator przetłumaczył na: ( 5 linijek sam dodałem)
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.code
_this$ = -4 ; size = 4
int cKlasa::dodaj(void) PROC ; cKlasa::dodaj, COMDAT
push ebp
mov ebp, esp
push ecx
mov DWORD PTR _this$[ebp], ecx
mov eax, DWORD PTR _this$[ebp]
mov eax, DWORD PTR [eax]
mov ecx, DWORD PTR _this$[ebp]
add eax, DWORD PTR [ecx+4]
mov esp, ebp
pop ebp
ret 0
int cKlasa::dodaj(void) ENDP ; cKlasa::dodaj
_obiekt$ = -12 ; size = 8
_result$ = -4 ; size = 4
_main PROC
push ebp
mov ebp, esp
sub esp, 12 ; 0000000cH
lea ecx, DWORD PTR _obiekt$[ebp]
call int cKlasa::dodaj(void) ; cKlasa::dodaj
mov DWORD PTR _result$[ebp], eax
xor eax, eax
mov esp, ebp
pop ebp
ret 0
_main ENDP
END _main
ERROR: 50 - MSB3721
9,21,30 linijka - A2008 blad skladniowy...