7163313949

7163313949



Algorytm jest mało efektywny, ale tutaj nie jest to istotne, bo liczba znaków w linii jest niewielka

wykorzystywane rejestry:


int iptr => $a0 int jptr => $al int cnt => $a2 int ch => $a3

int mfc => $v0, wartość zwracana int mfccnt => $vl

char at jptr

=> $t0

ir:

subu $sp, $sp, 224 sw $ra, 20($sp)

#

miejsce na ramkę stosu

li $vl, 0

#

mfccnt = 0

add $tl, $sp, 24

#

zapisać w $tl wskaźnik do tablicy

lin«

move $a0, $tl

#

argument: $a0 <= $tl

li $v0, 8

#

usługa: read_string

li Sal, 200 syscall

#

maksymalna liczba znaków w linii:

200

move $a0, $tl

#

iptr = adres line[0]

iloop:

lb $a3, ($a0)

#

ch = znak_wskazywany_przez iptr

beqz $a3, endiloop

#

przerwać gdy ch jest NUL

li $a2, 0

#

cnt=0

move $al, $tl

#

jptr = adres line[0]

jloop:

lb $t0, (Sal)

#

jch = znak_wskazywany_przez jptr

beqz $t0, endjloop

#

przerwać, gdy jch jest NUL

bne $t0, $a3, jincr

#

skok, gdy ch != jch

addi $a2, $a2, 1

#

kolejne wystąpienie, więc cnt++

jincr:

addi $al. Sal, 1

#

jptr++

b jloop

#

zapętlić dla nowej wartości jptr

endjloop:

bgt $vl, Ja2, iincr

#

if mfccnt > cnt, pominąć aktualizację

move $vl, $a2

#

aktualizacja: mfccnt = cnt

move $v0, $a3

#

aktualizacja: mfc = ch

iincr:

addi $a0, $a0, 1

#

iptr++

b iloop

#

zapętlić dla nowej wartości iptr

endiloop:

endoffunc:

lw $ra, 20(Ssp)

#

odtworzenie adresu powrotnego

addu $sp, $sp, 224

#

zniszczenie ramki stosu

jr Sra

#

powrót z funkcji


char line[200] => 24($sp), rozmiar 200 bajtów pointer to line[0] => $tl

b) Program ten przechowuje w ramce stosu tablicę znaków, jako zmienną lokalną. W języku C, odpowiadałoby to następującej deklaracji funkcji:

char mostfreqchar(void)

{

char line[200];    # lokalna tablica 200 znaków

>

c)    Przeanalizować wprowadzony program, starając się zrozumieć algorytm i metodę jego implementacji w języku asemblera, a następnie program poddać asemblacji i wykonać.

d)    Wykonując krokowo, zaobserwować stan stosu tuż przed wywołaniem funkcji, podczas realizacji prologu, a następnie - podczas realizacji epilogu funkcji. Odnaleźć, na stosie, tablicę wprowadzanych znaków linii. W sprawozdaniu opisać spostrzeżenia i przedstawić wnioski.



Wyszukiwarka

Podobne podstrony:
skanuj0013 (117) korporacyjnych wskazują, że może to być w wielu sytuacjach efektywny kierunek dział
Eh, ale tutaj jest super... Ludzie są mili, nie muszę robić nic po godzinach pracy i jeszcze mi za t
poetyka018 jest tutaj nie sam świat, lecz dekoracje tego świata, czyli mamy do czynienia nie z samym
IMG?37 Egz. nr 1 B - No tak, ale... Co nie zmienia faktu, że......... C - ... Politycznie jest to...
IMG?37 (2) Egz. nr 1 B - No tak, ale... Co nie zmienia faktu, że......... C • ... Politycznie jest
page0251 247 stosuje, która jest nietylko pojedynczą w ścisłem słowa znaczeniu, ale wogóle nie ma w
page0254 250 ożywione i wykonywa czyny życiowe, ale samo nie jest życiem, ani też jego przyczyną: je
KB0010 trudnił się nie tylko sztuką pisarską, ale i zdobieniem ksiąg, na to mamy dowody. Jednym z ni
Labirynt Dziecięce zabawy i gry Twoim zadaniem jest zjeść wszystkie serki. Ale uwaga! Nie wolno wejś
HPIM4482 228 Elżbieta Zakrzewska-MatUcrp 4mv, ale ona nie uwierzyła, mówiła, ie dziecko jest podobne
ROWER JEST DOBRODZIEJSTWEM ALE NIECH NIE BĘDZIE PLAGA DRÓG Z obliczeń dokonanych na podstawie raport
[12I AktualnościOfiarować cząstkę siebie .oNOH — „Człowiek jest wielki nie przez to co ma, ale przez
Depresja jest jak tonięcie Niby się zdaje, że umie się pływać, ale nie bardzo się chce, bo pod

więcej podobnych podstron