adres pamięci [asembler]

0

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ć

0

Assembler na jaki procesor?

0

8086

0
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
0

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]

0
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.

0

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

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