WOJSKOWA AKADEMIA TECHNICZNA
Architektura i organizacja komputerów II
Sprawozdanie z pracy laboratoryjnej
Nr5-6
Grupa: I0X3S1
Autor: Karolina Dembek
Nr 19
Data: 2011-05-21
Na ocenę „dostatecznie”:
Wypisze komunikat „Uruchomiono program p1.” i przeniesie kursor dwa wiersze niżej.
Wypisze komunikat „Autorem programu jest ... z grupy … ” (gdzie miejsca … należy wypełnić danymi autora programu) i przeniesie kursor do nowego wiersza.
Wypisze komunikat „Numer wykonawcy w dzienniku = …”. Miejsce wykropkowane program wypełni w trakcie wykonania właściwą liczbą, wykorzystując format %d i zadeklarowaną tablicę liczb całkowitych TNUM
o zainicjowanych wartościach kolejnych liczb całkowitych bez znaku: 1, 2, … 25. Wypisana liczba nie może być zadeklarowana statycznie jako napis, należy jej wartość przed wypisaniem odczytać z TNUM.
Wypisze komunikat „Jesli chcesz zakonczyc prace tej czesci programu, nacisnij …”. (Bez przenoszenia kursora do nowego wiersza, w miejsce … programista wpisze tekst sekwencji kończącej na dst, który jest trzema pierwszymi literami nazwiska).
Wczyta tekst z klawiatury. Jeśli wprowadzony tekst to sekwencja kończąca na dst (i oczywiście Enter), program, zakończy się, jeśli naciśnięto inny klawisz (np. sam Enter) lub sekwencję klawiszy różną od sekwencji kończącej na dst, program powróci do wykonywania działań z punktów 1d, 1e.
Na ocenę „dostatecznie plus”:
Na ocenę „dostatecznie plus”: wykonać zadania na dst, a ponadto zaprojektować (algorytm, opis) i zaimplementować program p2.s, który będzie wykonywał punkty 1.a (z uwzględnieniem nazwy programu p2) i 1.b jak powyżej, bez punktu 1.c, ale punkty d i e należy zmodyfikować: warunkiem zakończenia programu p2.s jest wczytanie sekwencji 3 pierwszych liter nazwiska, niezależnie od wielkości liter, np. gdy sekwencja 3 znaków to „dEm” - wtedy kończy program również sekwencja np. „DeM” i „dEM”.
Kod źródłowy programu p1.s wraz z komentarzami opisującymi jego działanie:
.data
TNUM: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ; deklaracja tablicy
kom1: .asciiz "Uruchomiono program p1.\n\n" ; komunikat pierwszy wyświetlany na ekranie
kom2: .asciiz "Autorem programu jest Karolina Dembek z grupy I0X3S1\n" ; komunikat drugi wyświetlany na ekranie
kom3: .asciiz "Jesli chcesz zakonczyc prace tej czesci programu, nacisnij dem: " ; komunikat czwarty wyświetlany na ekranie
PrintIntFormat: .asciiz "Numer wykonawcy w dzienniku = %d\n"
; komunikat trzeciy wyświetlany na ekranie
.align 2
text1: .word kom1 ; text1 zawiera adres kom1
text2: .word kom2 ; text2 zawiera adres kom2
text3: .word kom3 ; text1 zawiera adres kom1
PrintIntPar: .word PrintIntFormat ;PrintIntPar zawiera adres PrintIntFormat
PrintIntValue: .space 4
;wczytywanie z klawiatury
buffer: .space 80 ; rezerwuje miejsce na bufor
load: .word 0,buffer,80
.text
addi r14,r0,text1 ; r14 zawiera informację: ciąg znaków text1
trap 5 ; wyświetl zawartość r14,czyli komunikat 1
addi r14,r0,text2 ; r14 zawiera informację: ciąg znaków text2
trap 5 ; wyświetl zawartość r14,czyli komunikat 2
;Wypisanie napisu trzeciego z %d:
addi r20, r0, TNUM ;ustawienie pierwszego elementu tablicy na r20
lw r1, 72 (r20) ;ustawienie wskaznika na 19 element (nr. 19)
sw PrintIntValue, r1 ; i wpisanie jego wartości do r1
addi r14,r0,PrintIntPar ;r14 zawiera informację: ciąg znaków PrintIntPar
trap 5 ;wyświetl zawartość r14, czyli PrintIntFormat
question:
addi r14,r0,text3 ; r14 zawiera informację: ciąg znaków text3
trap 5 ; wyświetl zawartość r14, czyli text3
addi r14,r0,load ; r14 zawiera informację: 80 pustych znaków
trap 3 ; Wczytaj z klawiatury 80 pierwszych znaków do buffer
addi r2,r0,buffer ; przypisuje r2 zawartość buffer
lb r3,(r2) ; ładowanie pierwszego znaku z r2 do r3
checkd:
seqi r4,r3,100 ;czy to d?
beqz r4,question ;jesli nie wroc do question
checke:
addi r2,r2,1 ;zwiększ wskaźnik o 1
lb r3,(r2) ;ładowanie drugiego znaku z r2 do r3
seqi r4,r3,101 ;czy to e?
beqz r4,question ;jeśli nie wróć do question
checkm:
addi r2,r2,1 ;zwiększ wskaźnik o 1
lb r3,(r2) ;ładowanie trzeciego znaku z r2 do r3
seqi r5,r3,109 ;czy to m?
beqz r5,question ;jeśli nie wróć do question
Enter:
addi r2,r2,1 ;zwiększ wskaźnik o 1
lb r3,(r2) ;ładowanie czwartego znaku z r2 do r3
seqi r4,r3,10 ;czy to enter?
beqz r4,question ;jeśli nie wróć do question
Koniec:
trap 0 ;kończy program
Algorytm programu p1.s:
Wydruk działania programu p1.s dla przykładowych wartości:
Kod źródłowy programu p2.s wraz z komentarzami opisującymi jego działanie:
.data
kom1: .asciiz "Uruchomiono program p2.\n\n" ; komunikat 1
kom2: .asciiz "Autorem programu jest Karolina Dembek z grupy I0X3S1\n" ; komunikat 2
kom3: .asciiz "Jeśli chcesz zakończyć prace tej części programu, naciśnij dem: " ; komunikat 3
.align 2
text1: .word kom1 ; text1 zawiera adres kom1
text2: .word kom2 ; text2 zawiera adres kom2
text3: .word kom3 ; text3 zawiera adres kom3
buffer: .space 80 ; rezerwuje miejsce na bufor
load: .word 0,buffer,80
.text
addi r14,r0,text1 ;r14 zawiera informację: ciąg znaków text1
trap 5 ;wyświetl zawartość r14
addi r14,r0,text2 ;r14 zawiera informację: ciąg znaków text2
trap 5 ;wyświetl zawartość r14
question:
addi r14,r0,text3 ;r14 zawiera informację: ciąg znaków text3
trap 5 ;wyświetl zawartość r14
addi r14,r0,load ;r14 zawiera informację: 80 pustych znaków
trap 3 ;Wczytaj z klawiatury 80 pierwszych znaków do buffer
addi r2,r0,buffer ;przypisuje r2 zawartość buffer
lb r3,(r2) ;ładowanie pierwszego znaku z r2 do r3
sprawdzajDd:
seqi r4,r3,68 ;czy to D?
seqi r5,r3,100 ;czy to d?
XOR r6,r5,r4 ;sprawdz czy to duze lub czy to male d
beqz r6,question ;jeśli nie jest to ani duże, ani małe d skocz do question
sprawdzajEe:
addi r2,r2,1 ; zwiększ wskaźnik o 1
lb r3,(r2) ; ładowanie drugiego znaku z r2 do r3
seqi r4,r3,69 ;czy to E?
seqi r5,r3,101 ;czy to e?
XOR r6,r5,r4 ;sprawdz czy to duze lub czy to male e
beqz r6,question ;jeśli nie jest to ani duże, ani małe d skocz do question
sprawdzajMm:
addi r2,r2,1 ; zwiększ wskaźnik o 1
lb r3,(r2) ; ładowanie trzeciego znaku z r2 do r3
seqi r4,r3,77 ; czy to M?
seqi r5,r3,109 ; czy to m?
XOR r6,r5,r4 ; sprawdz czy to duze lub czy to male f
beqz r6,question ; jeśli nie jest to ani duże, ani małe f skocz do question
sprawdzaj:
addi r2,r2,1 ; zwiększ wskaźnik o 1
lb r3,(r2) ; ładowanie czwartego znaku z r2 do r3
seqi r4,r3,10 ; czy to Enter?
beqz r4,question ; jeślni nie jest to enter skocz do question
koniec:
trap 0; ; kończy program
Algorytm programu p2.s:
Wydruk działania programu p2.s dla przykładowych wartości: