Assembler dodawanie i mnozenie

Odpowiedz Nowy wątek
2017-01-11 12:46
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.

edytowany 1x, ostatnio: greek96, 2017-01-11 12:47

Pozostało 580 znaków

2017-01-11 13:39
0

Zalecam kurs asemblera od podstaw.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2017-01-11 13:54
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.

edytowany 1x, ostatnio: vpiotr, 2017-01-11 14:06
@vpiotr: chciałeś napisać: 10h 21h 80h i 40h ;) - akasei 2017-01-12 12:17
@akasei: w sumie to nie chciałem ;-) Nie lubię pisać oczywistości. - vpiotr 2017-01-12 12:28

Pozostało 580 znaków

2017-01-11 16:23
0

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

Pozostało 580 znaków

2017-01-19 19:26
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 ?!

Pozostało 580 znaków

2017-01-19 19:50

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.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2017-01-19 19:57
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 ?

Pozostało 580 znaków

2017-01-19 20:19
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


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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