Zadanie 4.1 Wygeneruj 10-elementowy ciąg liczb wg wzoru: ai=2

Transkrypt

Zadanie 4.1 Wygeneruj 10-elementowy ciąg liczb wg wzoru: ai=2
Zajęcia nr 4 Operacje na stosie (POP, PUSH).Podprogramy w asemblerze: rozkazy CALL iRET
Zadanie 4.1
Wygeneruj 10-elementowy ciąg liczb wg wzoru: ai=2-ai-1
Wygeneruj 10-elementowy ciąg wg wzoru ai=ai-1-ai-2
Pierwsze elementy podaj jako parametry natychmiastowe lub zadeklaruj przez DB.
Oblicz iloczyn skalarny1 obu wektorów. Jeśli zabraknie rejestrów podręcznych – użyj stosu
Ćwiczenie 4.1
Uruchom poniższy program i uważnie zaobserwuj zawartość stosu
; -----------------PROCEDURY OPÓŹNIAJĄCE--------------------; ---------Czas opóźnienia kontroluje rejestr AL.-------------------; Kiedy wywoływana jest procedura - zawartość rejestrów AL i F zapisywana jest na stosie (PUSH)
; a na koniec - zawartość tych rejestrów przywracana jest (POP)
; wierzchołek stosu na początku to BF
; Procedura uruchamiana jest 3 razy
;------ PROGRAM GŁÓWNY ---------------------------------------Start: MOV AL,8
; krótkie opóźnienie
CALL 30
; wywołanie podprogramu, którego pierwszy rozkaz
; znajduje się w 30-tej komórce RAM
; adres z IP wędruje na stos
; a w IP znajdzie się adres 30H
MOV AL,10 ; średnie opóźnienie
CALL 30
; wywołanie tego samego podprogramu
MOV AL,20 ; długie opóźnienie
CALL 30
; wywołanie tego samego podprogramu
JMP Start ; powrót
; ----- CIAŁO PODPROGRAMU ------------ORG 30
; Generowanie kodu poniŜszych rozkazów - i umieszczenie go
; w pamięci RAM od adresu 30H
Rep:
PUSH AL
PUSHF
DEC AL
JNZ REP
; Zapisz AL na stosie.
; Zapisz rejestru flag F na stosie.
; dekrementacja AL.
; skok jeśli nie ustawiona jest flaga Z.
POPF
POP AL
RET
; Pobranie rejestru F ze stosu.
; Pobranie rejestru AL ze stosu.
; Powrót do programu - do rozkazu po wywołaniu procedury.
; jego adres jest na stosie
; --------------------------------------------------------------END
; --------------------------------------------------------------Ćwiczenie 4.2
Otwórz przykład z wykładu (obsługa sygnalizacji świetnej) i prześledź jego działanie
1
Iloczyn skalarny to
2008/2009 kierunek informatyka - studia inżynierskie, oprac. dr inż. J.Papińska-Kacperek
Zajęcia nr 4 Operacje na stosie (POP, PUSH).Podprogramy w asemblerze: rozkazy CALL iRET
Ćwiczenie 4.3
Oto program z zadania 3.7, w którym obsługa błędu jest procedurą:
;---------------------------------------------------------------------------clo
jmp next
db "Overflow"
next: mov bl, B0
mov al, 2
push al
; na stos, bowiem wartość ta będzie potrzebna
mov [bl], al
inc bl
mov al, 1
mov [bl], al
push al
mov cl, 8
; licznik stosu - wpisz 8 by sprawdzić obsługę błędu
ret: pop al
; weź element (i-1)
pop dl
; weź element (i-2)
push al
; teraz to element (i-1) , ale w następnym kroku będzie (i-2)
mul al, 2
jno next1
call 60
jmp stop
next1: sub dl, al
jno next2
call 60
jmp stop
next2: push dl
; w następnym kroku będzie (i-1), czyli trzeba zapamiętać
inc bl
mov [bl], dl
dec cl
jnz ret
; wracaj gdy licznik CL nie jest 0 (flaga Z)
jmp stop
;------------------------------error procedure-------------------------------------------org 60
mov al, 3
mov bl, C0
mov cl,8
;długość łańcucha
ret1: mov dl, [al]
mov [bl], dl
inc al
inc bl
dec cl
jnz ret1
ret
;-------------------------------------------------------------------------------------------stop: end
Zadanie 4.2
Wygeneruj dwa ciągi liczb (np. takie jak w zadaniu 6.1)
Oblicz sumy obu wektorów - sumowanie niech będzie procedurą
Zadanie 4.3
Wygeneruj dwa ciągi liczb: pierwszy: ai=2+a i-1 oraz drugi:ai=2*a i-1-7
Wyznacz minimalne wartości obu ciągów – szukanie minimum niech będzie procedurą.
2008/2009 kierunek informatyka - studia inżynierskie, oprac. dr inż. J.Papińska-Kacperek