0
我正在做一個家庭作業,需要我計算數組中一系列十六進制值的灰度值。這是我理解的部分。我需要遍歷這個值的數組,直到遇到-1。下面是我得到了什麼:循環通過數組mips
# --------------------------------
# Below is the expected output.
#
# Converting pixels to grayscale:
# 0
# 1
# 2
# 34
# 5
# 67
# 89
# Finished.
# -- program is finished running --
#---------------------------------
.data 0x0
startString: .asciiz "Converting pixels to grayscale:\n"
finishString: .asciiz "Finished."
newline: .asciiz "\n"
pixels: .word 0x00010000, 0x010101, 0x6, 0x3333,
0x030c, 0x700853, 0x294999, -1
.text 0x3000
main:
ori $v0, $0, 4 #System call code 4 for printing a string
ori $a0, $0, 0x0 #address of startString is in $a0
syscall #print the string
LOOP: ori $a0, $0, 0x0
lw $t1, 48($a0)
beq $t1 -1, exit
addi $t4, $0, 3
sll $t2, $t1, 8
srl $s1, $t2, 24 #$s1 becomes red value
sll $t2, $t1, 16
srl $s2, $t2, 24 #$s2 becomes green value
sll $t2, $t1, 24
srl $s3, $t2, 24 #$s3 become blue value
add $t1, $s1, $s2
add $t1, $t1, $s3
div $t1, $t4
mflo $s4 #$s4 becomes grayscale value
or $a0, $0, $s4
ori $v0, $0, 1
syscall
ori $v0, $0, 4
ori $a0, $0, 43
syscall
j LOOP
exit:
ori $v0, $0, 4 #System call code 4 for printing a string
ori $a0, $0, 33 #address of finishString is in $a0; we computed this
# simply by counting the number of chars in startString,
# including the \n and the terminating \0
syscall #print the string
ori $v0, $0, 10 #System call code 10 for exit
syscall #exit the program
我知道,48只需要通過4循環的每次迭代遞增,我只是不知道如何做到這一點的MIPS。任何幫助深表感謝!
我意識到,用48代替像素是不好的做法,我們的老師只是告訴我們那樣做了,現在哈哈。並感謝您的幫助!我明白現在該做什麼。 – Haskell