卡在一些 RISC-V 作业上,我知道问题出在哪里,但不知道问题是什么

问题描述 投票:0回答:1

我正在为我的班级编写代码,尽管我认为我已经接近目标,但我一直在比我应该做的事情上付出更多的努力。每当我到达

lh
命令时,它就会终止。我确信(至少我认为我是对的)我转移不正确并试图加载一个不存在的地址。我知道问题出在
lh
;我只是不知道如何解决它。

我们应该编写 10 个不同的步骤来解决数独,但我陷入了第二步。这是在 64 位 RISC-V 处理器中。这是我的代码:

         # get_used(board, group) -> used      #s1:board s2:group s3:group_index s4:elt
get_used:                             #s0: used t0:g_index  a3:9  t1:g_elt_add   t2: b_index
                                      #t3: scaled_b_index  t4: b_elt_add  t5:elt
                addi    sp, sp, -48
                sd      ra, 40(sp)
                sd      s0, 32(sp)
                sd      s1, 24(sp)
                sd      s2, 16(sp)
                sd      s3, 8(sp)
                sd      s4, 0(sp)

                mv      s0, a0
                mv      s1, a1
                li      s2, 0
                li      s3, 0

loop:
                li      t0, 9
                bge     s3, t0, end_loop

                slli    t1, s3, 3
                add     t1, s1, t1
                ld      t2, 0(t1)
                slli    t2, t2, 1
                add     t3, s0, t2
               ** lh      s4, 0(t3)**      #line where it quits

                mv      a0, s4
                jal     ra, count_bits
                mv      t4, a0
                li      t5, 1
                beq     t4, t5, add_to_used
                j       next_iter

add_to_used:
                or      s2, s2, s4
next_iter:
                addi    s3, s3, 1
                j       loop
end_loop:
                mv      a0, s2
                ld      ra, 40(sp)
                ld      s0, 32(sp)
                ld      s1, 24(sp)
                ld      s2, 16(sp)
                ld      s3, 8(sp)
                ld      s4, 0(sp)
                addi    sp, sp, 48
                ret

这是我的第一步供参考:

count_bits:
                li      a2, 0
                li      a1, 0
                li      t1,10
1:              bge     a1, t1, 2f
                srl     t0, a0, a1
                andi    t0, t0, 1
                beqz    t0, 3f
                addi    a2, a2, 1
3:              addi    a1, a1, 1
                j       1b
2:              mv      a0, a2
                ret

在这一点上我已经尝试了很多,但我很困难。我不断遇到一个又一个的问题。

riscv sudoku
1个回答
0
投票

没有足够的信息来说明问题所在,但它涉及到您的数据结构。使用 64 位项目作为索引有点不寻常,所以也许可以研究一下。

用 C 语言编写一些代码并进行测试以确保其有效。然后在汇编中复制它。

研究您的数据,了解好的地址是什么样的。 (在 C 和汇编版本中执行。)

编写小型汇编测试程序,以熟练地访问汇编中的数据。

© www.soinside.com 2019 - 2024. All rights reserved.