@Roiben ;
po 1. kod wklejaj w bloki [.code] [./code] (bez kropek)
po 2. jak korzystasz z sqrt(a*a) to bez sensu Ci pisać jakiegokolwiek IFa.
W przypadku a = 4; i a = -4; wyniki beda przeciez identyczne.
Wersja do druku
@Roiben ;
po 1. kod wklejaj w bloki [.code] [./code] (bez kropek)
po 2. jak korzystasz z sqrt(a*a) to bez sensu Ci pisać jakiegokolwiek IFa.
W przypadku a = 4; i a = -4; wyniki beda przeciez identyczne.
Opracuj algorytm (schemat blokowy) i napisz program zwracający największą z trzech liczb podanych przez użytkownika. Nie bardzo wiem jak to zrobić, kombinuje z ifami no ale nic z tego nie wynika. Ktoś da jakąś wskazówke?
max()
petla for
if max < liczba then max = liczba
O to 3 wskazowki, powodzenia :) Można wiedziec ile masz lat / w ktorej klasie jestes?
Te zadania sa proste do zrobienia oczywiscie, ale na poczatku trudne do sformulowania na kartce. Dlatego najpierw zanim zaczniesz pisac, to sie zastanow sam, jak ty jako czlowiek porownujesz ktora z tych liczb podanych jest najwieksza. A pozniej dokladnie to samo zapisz na kartce :)
20 / 1 rok automatyki i robotyki
zaimplementuj sortowanie bąbelkowe i po sprawie
Jasne, i dostanie baniaka bo nie rozumie 1. zdaniowego polecenia...
@Roiben
https://pl.wikipedia.org/wiki/Dziel_...%C4%99%C5%BCaj
Ktoś to jest into asembler? Podstawy, prosty program:
Program ma wczytywać tekst, a potem wypisywać go n razy (też ilość podana przez użytkownika). Działa dobrze dla 0,3, 5,6,7,8,9. Dla 1 nie wyswietla nic, dla 2 wyswietla 4x, dla 4 wyswietla 4x ale w 1 lini dopisuje 4. O co chodzi? XD
Ad2: Jak zapisać aby program wczytywał liczbę która ma więcej niż 1 znak?
Kod:section .text
global _start:
_start:
call fun1
call fun2
xor esi, esi
etyk:
call fun3
koniec:
mov eax, 1
int 80h
fun1:
mov eax, 3
mov ebx, 0
mov ecx, napis
mov edx, [dlugosc]
int 80h
mov eax, 3
mov ebx, 0
mov ecx, znak
mov edx, 1
int 80h
ret
fun2:
mov al, [znak]
sub al, 48
mov [cyfra], al
int 80h
ret
fun3:
cmp esi,[cyfra]
jae koniec
mov eax, 4
mov ebx, 1
mov ecx, napis
mov edx, [dlugosc]
int 80h
inc esi
jmp etyk
ret
section .data
napis times 50 db 0
dlugosc dd $ - napis
znak db 0
cyfra dd 0
@LordCompi ; chyba jest into assembler :)
Dobra, błędy już ogarnąłem. Za bardzo namieszałem tam z tymi funkcjami. Natomiast czy istnieje możliwość wpisania do asm wiecej niż 1 cyfry przez int 80h? Czy tylko trzeba operować przez printf/scanf?
https://mitpress.mit.edu/sicp/full-text/book/book.html
bdb ksiazka polecam
cc rolly
jest jest, możesz np liczbę 123 wczytywać po znaku (ascii) i załóżmy wrzucać sobie te znaki na stos,
jak masz 1,2,3 to dostaniesz wartości ascii 49,50,51, więc trzeba od nich odjąć 48, będziesz miał już 1,2,3 i potem jak ściągasz ze stosu to mnożysz przez kolejne potęgi 10 i wrzucasz do rejestru
dx += 1 * 100
dx += 2 * 10
dx += 3 * 1
@sw.5 ;
Czyli ogólnie najpierw wczytuje sobie jeden znak z dajmy na to funkcji1, używam funkcji2 gdzie mam odejmowanie, a potem push na stos, wczytuje znak 2 i 3. Gdy już wszystkie mam, to ściągam je po kolei popem pierwszy *1, drugi *10 itd i wszystko wpisać do JEDNEGO rejestru. Dobrze zrozumiałem? A można to ew wpisywać do rejestrów odrazu? Zamiast na stos to wrzucam do np dx *100 pierwszy itd.? :d
Pytam sie bo jedna grupa miała na kolosie zadanie które polegało na tym żeby wpisać wynik działania 12*12 jeśli prawidłowy wynik został podany to kończyło program komunikatem. W przeciwnym razie trzeba było zrobić tak żeby było można wczytac wynik jeszcze raz.
I do tego najlepiej chyba takim algorytmem, a ilość wczytywanych znaków uzależnić po prostu od wyniku oczekiwanego, no i wszystko w pętlach.
Nawet lepiej od razu wrzucać wszystko do jednego rejestru. Gdybyś chciał korzystać ze stosu to przypominam jeszcze o pewnym problemie o którym trzeba pamiętać podczas używania stosu i funkcji - (to się chyba ramka stosu nazywało) - chodzi o to że jak korzystasz z jakieś funkcji i używasz mnemo call to adres powrotny z funkcji ląduje na stosie, gdy w trakcie funkcji będziesz coś zmieniał na stosie to potem program nie wróci w dobre miejsce. Więc w przypadku gdy musiałbyś korzystać ze stosu wewnątrz jakiejś funkcji to trzeba zapisać wskaźnik stosu gdzieś tak aby można było przed końcem funkcji przywrócić go do stanu jaki był przed wejściem do funkcji.
I wracając do tego polecenia na kolosie to tak, dokładnie tak trzeba to zrobić :p
btw w jakim asm'ie piszecie?