我正在做一个家庭作业,要求我计算数组中一系列十六进制值的灰度值。这是我理解的部分。我需要遍历这个值数组,直到遇到 -1。这是我所拥有的:
# --------------------------------
# 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 中执行此操作。任何帮助深表感谢!