【发布时间】:2021-03-02 21:56:22
【问题描述】:
以下代码应该采用两个列表并将它们放入一个大列表 (C[10]) 中,作为汇编的初学者,我不确定如何检查我的输出是否正确。 我尝试执行打印以检查左半部分是否有效,但它只打印零。 (https://www.kvakil.me/venus/ 使用这个网站作为模拟器)
.data
A:
.word 0,2,3,3,4
B:
.word 24,22,21,25,23
C:
.word 1,1,1,1,1,1,1,1,1,1,1
min:
.word 0
.text
.globl _main
_main:
add x8,x8,x0 #x8=i=0
addi x9,x9,5 #x9=5
#start of the loop
loop:
bge x8,x9,exit
add x18,x0,x8 #x18=i
slli x18,x18,2 #x18=i*4
addi x19,x18,20 #x19 =i*4+ 4*5
la x20,A #x20=&A
la x21,B #x21=&B
la x22,C #x22=&C
add x20,x18,x20 #x20=&A[i]
lw x20,0(x20) #x23=A[i]
add x21,x19,x21 #x21=&B[i]
lw x21,0(x21) #x24=B[i]
add x23,x22,x19 #x23=&C[i+5]
sw x23,0(x21) #C[i+5]=B[i]
add x22,x18,x22 #x22=&C[i]
sw x22,0(x20) #C[i]=A[i]
addi a0,x0,1
add x20,x0,x20
ecall
addi x8,x8,1 #i=i+1
beq x0,x0,loop
exit:
我猜代码应该打印 0224 但它只打印 0。
【问题讨论】:
-
使用单步功能验证代码操作。此外,您可以将右窗格切换到“内存”并选择“跳转到数据”来检查您的数组。一个明显的问题是
add x21,x19,x21 #x21=&B[i]使用的是x19而不是x18。 -
是的,我想了很久。现在,我知道我的寄存器没有更新。