Kalkulator błąd macra

0

Witam, mam problem ze skokami po wyborze działania jakie chce wykonać użytkownik.
Jak widać po wpisaniu cyfr pokazuje się zapytanie jakie działanie przeprowadzić na liczbach, po tym program porównuje wpisany znak z czterema symbolami działań artmetycznych po znalezieniu wywoływany jest skok do etykiety po której znajduje się macro.

Przy kompilowaniu wyskakuje mi błąd typu że macro nie pobiera żadnych danych "macro 'dodaj' exists, but not taking 1 parameters"

Program napisany w NASM

org 100h
start: 
;-------PODAJ PIERWSZA LICZBE-----------
mov ah,9
mov dx, liczba1
int 21h

mov ah,1
int 21h
sub al,30h
mov [l1], al
;--------PODAJ DRUGA LICZBE-------------
mov ah,9
mov dx, liczba2
int 21h

mov ah,1
int 21h
sub al,30h
mov [l2],al
;--------WYBOR DZIALANIA------------
mov ah,9
mov dx, dzialanie
int 21

mov ah,0
int 16h
mov ah,0eh
int 10h

mov cl,'+'
cmp al,cl
jmp dodaj

mov cl,'-'
cmp al,cl
jmp odejmij

mov cl,'*'
cmp al,cl
jmp mnoz

mov cl,'/'
cmp al,cl
jmp dziel

;--------------DODAWANIE-------------
%macro dodaj 2
        mov al,[%1]
        mov bl,[%2]
        add al,bl
%endmacro
;------------ODEJMOWANIE-------------
%macro odejmij 2
        mov al,[%1]
        mov bl,[%2]
        sub al,bl
%endmacro
;----------MNOZENIE------------------
%macro mnoz 2
        mov al,[%1]
        mov ax,[%2]
        mul al
%endmacro
;----------DZIELENIE-----------------
%macro dziel 2
         mov ax,[%1]
         mov bl,[%2]
         div bl
%endmacro
;------WYWOLANIE MAKR----------------
dodaj:
        dodaj l1,l2
odejmij:
        odejmij l1,l2
mnoz:
        mnoz l1,l2
dziel:
        dziel l1,l2
;-----WYSWIETALNIE WYNIKU------------
dodaj l1,l2

mov [c2],al

mov ah,9
mov dx, wynik
int 21h

mov ah,2
mov dl,[c2]
sub dl,30h
int 21h

;------KONIEC PROGRAMU---------------
mov ax,4c00h
int 21h

;-----------ZMIENNE-----------------
liczba1 db "Podaj pierwsza liczbe: ","$"
liczba2 db 10,13,"Podaj druga liczbe: ","$"
dzialanie db 10,13,"Wybierz dzialanie(+,-,*,/): ","$"

l1 db 0
l2 db 0
wynik db 10,13,"Wynik: " ,"$"
c2 db 0
0

Może ja się uczyłem innej odmiany asemblera bo jest ich parę, ale... czemu chcesz skakać do Macra? Z tego co wiem to się je wywoływało trochę inaczej, no i wywołujesz je bez żadnych argumentów, to czemu się dziwisz że wyskakuje taki komunikat?

Jesteś pewien, że sam pisałeś ten kod? :P

Powinieneś to chyba wywołać w stylu:
dodaj pierwszyArgument, drugiArgument

I tak poza tym, widziałem parę tematów wyżej drugi o kalkulatorze w asemblerze, dogadajcie się z koleżanką i róbcie razem :P

0
dodaj l1,l2 

a l1 i l2 to nie sa argumenty?

0

Ahh nie zauważyłem tej części... wybacz. Dziwnie zrobiłeś, znaczy nigdy tak nie robiłem, żeby jump... Ja bym na Twoim miejscu zmienił nazwy etykiet, żeby nie były takie same jak nazwy macr, może to coś psuje.

A poza tym, możesz sprawdzić program na turbodebbuger'ze, przynajmniej jak ja pisałem w asemblerze to czasem je sprawdzałem, masz tam jak program wykonuje się linijka po linijce i jeszcze w dodatku obecne stany rejestrów po każdej z operacji.

Edit:

Coś mi się przypomniało...

dodaj:
        dodaj l1,l2
odejmij:
        odejmij l1,l2
mnoz:
        mnoz l1,l2
dziel:
        dziel l1,l2

Jesteś tego świadom, że jak skoczysz do etykiety np. 'odejmij' to wykona się macro odejmij, mnoz i dziel?

1 użytkowników online, w tym zalogowanych: 0, gości: 1