Wpisz do komórek pamieci o adresach <1500:0000-1500:0030> kolejne liczby (liczba bbb =< 1,2.....n) które spełniają następujące warunki:
bbb mod 4 = 1
bbb mod 5 = 1
proszę o jakąkolwiek wskazówke jak to rozwiążać
Wpisz do komórek pamieci o adresach <1500:0000-1500:0030> kolejne liczby (liczba bbb =< 1,2.....n) które spełniają następujące warunki:
bbb mod 4 = 1
bbb mod 5 = 1
proszę o jakąkolwiek wskazówke jak to rozwiążać
Assembler na jaki procesor?
8086
mov ax,1500
mov ds,ax
mov cx,30
mov ax,1 ;pierwsza liczba w ax
petla:
call znajdzKolejnaLiczbe ;załóżmy że ta procedura zapisuje nam znalezioną liczbę w bx
mov ax,bx
mov bx,cx
mov ds:[bx],ax
add ax,1 ;nastepna liczba po ostatnio znalezionej w ax
loop petla
znajdzKolejnaLiczbe:
;teraz lecisz sobie pętlą dla kolejnych liczb począwszy od tej w ax i sprawdzasz czy ax modulo 4 ==1 i modulo 5 == 1 i jeśli tak to koniec
;modulo sprawdzamy robiąc div a potem odczytując wartość reszty z dzielenia z odpowiedniego rejestru
;proponuje pamiętać o tym ze div modyfikuje wartości niektórych rejestrów i trzeba o nich pamiętać!
;na koniec wynik ląduje w bx
ret
dzięki za pomoc, tyle że jest mały błąd chyba bo przy asemblacji takie coś podaje :
wrong parametrs mov [ax],bx
probably it's an an undefined var: [ax]
call znajdzKolejnaLiczbe ;załóżmy że ta procedura zapisuje nam znalezioną liczbę w bx
znajdzKolejnaLiczbe:
pop bx
yyhhyh... call
odkłada na stos adres powrotu, więc na szczycie stosu już nie jest nasz bx
…
to już lepiej przekazywać przez wartość w bx
.
Mea culpa, bo najpierw chciałem to zrobić inaczej ale zapomniałem ze nie wolno zrobić ds:[ax] i potem cośtam pozmieniałem na prędce :P