Cześć. Ostatnio dostałem za zadanie napisać prosty kalkulator w asemblerze, który przyjmuje zmienne i wypisuje wynik w cpp. Program działa, jeśli wyrzucę z niego mnożenie i dzielenie(jakiś problem z rejestrami się pojawia kiedy chcę mnożyć lub dzielić), ale dobrze chodzi jedynie odejmowanie więc popełniam też jakiś błąd w instrukcjach warunkowych. Mógłby ktoś zerknąć? Bo już siedzę trochę nad tym a mam jeszcze kilka rzeczy do zrobienia :(
section .text
global calc
calc:
push ebp
mov ebp,esp
mov ebx,[ebp+16]
_add:
cmp ebx, 49
jne _sub
mov eax, [ebp+12]
add eax, [ebp+8]
jmp _end
_sub:
cmp ebx, 50
jne _mul
mov eax, [ebp+12]
sub eax, [ebp+8]
jmp _end
_mul:
cmp ebx, 51
jne _div
mov eax, [ebp+12]
mul eax, [ebp+8]
jmp _end
_div:
mov eax, [ebp+12]
div eax, [ebp+8]
jmp _end
_end:
mov esp, ebp
pop ebp
ret
#include<iostream>
using namespace std;
extern "C" int calc(int, int);
int main()
{
int a, b, i;
cout<<"podaj liczbe a"<<endl;
cin>>a;
cin>>b;
cout<<"podaj opcje"<<endl;
cin>>i;
switch(i)
{
case 1:
cout<<"suma= "<<(calc(a, b));
break;
case 2:
cout<<"roznica= "<<(calc(a,b));
break;
case 3:
cout<<"iloczyn= "<<(calc(a,b));
break;
case 4:
cout<<"Iloraz= "<<(calc(a,b));
break;}
return 0;
}