[ASM] Trzy zadania do rozwiązania (procesor 8086)

0
  1. Napisz program dodający 2 liczby 16-bitowe umieszczone w komórkach 2000 i 2002.
  2. Napisz program dodający 2 liczby 32-bitowe umieszczone w komórkach 2000 do 2007 .
  3. Napisz program zwiększający zawartość rejestru CX o 3. Wykorzystaj podprogram zwiększający CX o 1 i wywołaj go 3 razy.
  4. Napisz program, który do kolejnych komórek pamięci od adresu DS:300 wpisuje liczby 30h, 31h...70h

Pomoże ktoś? Jestem początkujący w te klocki i udało mi się zrobić 5 wcześniejszych zadanek, ale tych nie mogę ruszyć.

Mała poprawka cztery zadania nie trzy :)

0
CryCris napisał(a)
  1. Napisz program dodający 2 liczby 16-bitowe umieszczone w komórkach 2000 i 2002.
mov ax, mem[2000] ; ewentualnie 2000 * 2 (zależy od tego co miałeś na myśli pisząc "komórki")
add ax, mem[2002] ; po tej operacji w ax znajdzie się wynik...

Co tu trudnego???

0

6 zrobiłem tak

MOV AX, 0
MOV BX, [2000]
ADD AX, BX
MOV BX, [2002]
ADD AX, BX

i chciałem tylko sprawdzić sobie.
Co do dodawania 32-bitowych to nie wiem jak je dodać.

0
CryCris napisał(a)

Co do dodawania 32-bitowych to nie wiem jak je dodać.



Dokładnie tak samo ja robisz na kartce. Najpierw dodajesz mniej znaczące bity:

mov ax, [2000]
add ax, [2004]

Potem dodajesz bardziej znaczące + ew. przeniesienie z młodszych:

mov cx, [2002]
adc cx, [2006]

A później tylko sobie gdzieś zapisujesz (np. 2008:2011)
mov [2008], ax
mov [2010], cx

Dawno nie pisałem, więc nawet nie wiem dla jakiego kompilatora to mogłaby być składnia, ale chodzi o ideę.

Co do pozostałych:
8. Mało sensowne, ale to tylko ćwiczenie. Weź jakiś tutorial i zobacz jak się pisze podprogramy.
9. Podobnie. Poszukaj w tutorialach jak się robi pętle.

Ogólnie - szukaj i czytaj. Wszystko jest w sieci.
0

No tak, jak o trudnejsze rzeczy chodzi to jak zwykle się oglądają na mnie /a zadanka póki co banalne/ ;-P
8.

	call	_inc_cx
	call	_inc_cx
	call	_inc_cx
	retn
_inc_cx:
	inc	cx
	retn

Tutaj nie ma co tłumczyć.
9.

	mov	al, 30h
	mov	bx, 300
  __wstaw:	
	mov	[bx], al
	inc	bx
	inc	al
	cmp	al, 70h
	jle	__wstaw

lub:

	mov	al, 70h
	mov	cx, 40h
	mov	bx, 300
  __wstaw:	
	mov	[bx+cx-1], al
	dec	al
	loop	__wstaw

Wartość do al, adres do bx, przy dostępie do pamięci przez bx domyślny segment to ds.

...a na przyszłość to polecam manuale Intela.

0

Super! Bardzo dziękuję, że się pofatygowaliście. Teraz już mam wszystkie zadanka. Co do manuali intel'a to zerknę. Jeszcze raz dzięki za pomoc. :-)

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