0

我正在尝试计算 10 个数字的跨度,但在开始之前我被卡住了。我可以使用我的 LW 命令将集合加载到内存中,但之后没有任何工作。当我在执行后进行转储时,没有任何效果。10 个值在那里,但仅此而已。我应该如何为此添加、减去或执行任何命令?没有任何东西被存储,期间。

# This program computes and prints the span of a set of ten integers Set.

.data
Set:  .word 9, 17, -7, 3, -27, 25, 42, 26, 8, -60
Span: .alloc 1

.text
        lw $1, Set($0)
        lw $2, Set($1)
        lw $3, Set($2)
        lw $4, Set($3)
        lw $5, Set($4)
        lw $6, Set($5)
        lw $7, Set($6)
        lw $8, Set($7)
        lw $9, Set($8)
        lw $10, Set($9)
        add $11,$2,$3       
        sw $11, Span($0)
        jr $31     

在这个例子中,我的 add 命令什么都不做, stor 命令也不做。我究竟做错了什么?我是否必须预先分配我想在内存中使用的每个位置?(11 美元)例如。我已经尝试了许多命令,但除了我最后的 lw 命令之外,没有人做任何事情。

4

1 回答 1

1

这是我为创建与您尝试执行的操作等效的代码而编写的内容:

.data
Set:  .word 9, 17, -7, 3, -27, 25, 42, 26, 8, -60
Span: .space 4 #allocate 4 bytes

.set noat #needed to use $1
.text
main:
    la $12  Set    #load the address of set
    lw $1,  0($12) #load first number into $1
    lw $2,  4($12) #load second number into $2
    lw $3,  8($12) #etc
    lw $4,  12($12)
    lw $5,  16($12)
    lw $6,  20($12)
    lw $7,  24($12)
    lw $8,  28($12)
    lw $9,  32($12)
    lw $10, 36($12)

    add $11,$2,$3 #add second and third number, store in $11       

    la $13  Span   #load the address of Span
    sw $11, 0($13) #store the sum in Span
    jr $31

您并没有真正说出到底出了什么问题(程序崩溃?拒绝汇编?)所以我不确定要给出什么建议,但是您对寄存器的使用是可疑的-尤其是 $1 即 $at 我的汇编程序不会'连警告都不让我使用;该寄存器保留供汇编程序使用。

于 2013-09-04T03:09:44.077 回答