Assembler dodawanie i mnozenie

0

Witam, mam problem z ruszeniem zadania.

Napisać program pobierający z linii zleceń trzy argumenty x, y i z (gdzie z jest znakiem „-” lub ”*”) tak, aby na ekranie terminala
po jego uruchomieniu wypisane została suma lub iloczyn liczb x i y (w zależności od wprowadzonego symbolu operacji z). Np. w przypadku
gdy x = ”12” i y = ”32” a z = ” − ”, to efektem działania programu powinno być wyprowadzenie na ekran liczby -20.

Totalnie zielony z tego jezyka. Ktos podrzuci jakis material ? Wiem ze musze jakis konwerter zrobic ale nie za bardzo wiem jak.

0

Zalecam kurs asemblera od podstaw.

0

Poszukaj jak zrobić takie operacje:

Resztę możesz zrobić w C/C++ i przetłumaczyć na ASM, np. tak:
https://godbolt.org/g/sSNlIg

A jak już będziesz chciał to wszystko połączyć - przydadzą się podstawy ASM.

0

Same działania arytmetyczne jako zajawkę masz tutaj: https://4programmers.net/Forum/Inne/263956-asembler+cpp_?p=1211114#id1211114
NASM 32bit

0

Do czegos juz tam podochodzilem, i nie chce zakladac nowego tematu bo mam maly problem:
wrzucam argument pobrany z polecenia do rejestru i chce sprawdzic czy ten argument rowna sie * albo - itd

 mov eax, [esp+8]
 cmp eax, '*'
 je working
working:
 blablabla

niestety nie dziala, ktos rzuci jakas podpowiedz jak to poprawnie sprawdzic ? Czy znak tez musze przekonwertowac tak jak liczbe ?!

1

Nie działa tylko dlatego że źle dobrałeś rozmiary danych. Zauważ ze jeden znak to jest byte i ma raptem 8 bitów a eax ma bity 32! Kiedy robisz

mov eax, [esp+8]

to ładujesz do eaxa wartość 4 bajtowej (!) zmiennej ze stosu. A potem porównujesz to z tym jednym bajtem * więc oczywiscie nie będą sobie równe.

0
Shalom napisał(a):

Nie działa tylko dlatego że źle dobrałeś rozmiary danych. Zauważ ze jeden znak to jest byte i ma raptem 8 bitów a eax ma bity 32! Kiedy robisz

mov eax, [esp+8]

to ładujesz do eaxa wartość 4 bajtowej (!) zmiennej ze stosu. A potem porównujesz to z tym jednym bajtem * więc oczywiscie nie będą sobie równe.

czyli al ?

0

Możliwe, ale ja nie wiem co ty masz za zmienną tam na stosie i ile ona ma bajtów. Jeśli masz tam faktycznie jeden bajt to użyj al

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