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