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.


Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na pw przyjmuje tylko 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


C#, C/C++, Java, ASM

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.


Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na pw przyjmuje tylko 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


Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na pw przyjmuje tylko 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