lbu adalah nilai dari $9 + . Secara $9 adalah sebagai base register yang menunjukkan character pertama maka nilai yg digunakan adalah $9 + 0 untuk character pertama dan $9 + ... untuk character selanjutnya sesuai urutan. Isi dari byte yang berada pada alamat tersebut kemudian diload ke $10 menggunakan instruksi lbu . 3 byte teratas akan berisi zero. Instruksi beq berfungsi untuk mengetes apakah byte tersbut null atau tidak, jika null maka penghitungan selesai.## strlen.asm
##
## Count the characters in a string
##
## Registers:
## $8 -- count
## $9 -- pointer to the char
## $10 -- the char (in low order byte)
.text
.globl main
# Initialize
main: ori $8,$0,0 # count = 0
lui $9,0x1000 # point at first char
# while not ch==null do
loop: lbu $10,0($9) # get the char
sll $0,$0,0 # load delay
beq $10,$0,done # exit loop if char == null
sll $0,$0,0 # branch delay
addiu ,, # count++
addiu ,, # point at the next char
j loop
sll $0,$0,0 # branch delay slot
# finish
done: sll $0,$0,0 # target for branch
.data
string: .asciiz "Time is the ghost of space."
Selanjutnya program akan mengincrement count, kemudian menggerakkan base register agar menunjuk alamat character berikutnya.
Quest 5: fill in the blank
Tidak ada komentar:
Posting Komentar