我只是从MIPS开始。我的任务如下:
计算给定的8个非负数数组中X的倍数,其中X是用户选择的2的幂的乘方,例如1,2,4,8,…。
将必要的代码写入:
a。读取用户输入值X。您可以假定X始终是2的整数,即无需检查无效的用户输入。
b。计算arrayA中X的倍数,然后在屏幕上打印结果。
对于代码中给出的这组输入,我正在尝试使输出为
2
3
但是,我遇到以下错误:“数据/堆栈中的错误地址读取:0x00000090”
我正在使用QTSpim模拟器,这是数据段信息。我可以知道0x00000090不是我要访问的数组的第一个元素的存储位置吗?该代码可能无法实现所需的输出,因为我停留在调试的这个阶段。
# arrayCount.asm
.data
arrayA: .word 11, 0, 31, 22, 9, 17, 6, 9 # arrayA has 8 values
count: .word 999
char: .ascii "\n"
.text
main:
# code to setup the variable mappings
la $t0, 144 #map arrayA
la $t8, 146 #map count
# code for reading in the user value X
li $v0, 5
addu $a1, $v0, -3
syscall
#start printing out the stored int here
li $v0, 1
addu $a0, $a1, $zero
syscall
#print newline character(Assuming string)
li $v0, 4
la $a0, char
syscall
#to set the higher bound to do a while loop
li $a0, 8
addi $t2, $zero, 0
# code for counting multiples of X in arrayA
loop:
slt $t1, $t2, $a0
beq $t1, $zero, exit
sll $t3, $t2, 2
add $t4, $t3, $t0
lw $t5, 0($t4)
and $t6, $t5, $a1
beq $t6, $zero, skip
addi $t8, $t8, 1
skip:
addi $t2, $t2, 1
j loop
exit:
# code for printing result
li $v0, 1
addu $a0, $t8, $zero
syscall
# code for terminating program
li $v0, 10
syscall