assembly 在Mars MIPS中将单词存储到数组中

92dk7w1h  于 2023-03-08  发布在  其他
关注(0)|答案(2)|浏览(142)

我正在尝试使用Mars自学MIPS体系结构的汇编,并想知道如何将一系列单词存储到数组中。
我知道如果我有4个单词,我会分配16个字节,如下所示:

.data
X: .space 16

我再讲几句话:

.data
X:       .space 16
Ryan:    .asciiz "Ryan"
Tammi:   .asciiz "Tammi"
Mike:    .asciiz "Mike"
Jessica: .asciiz "Jessica"

现在,如果我想把X[0]赋给Ryan,X[1]赋给Tammi,等等,我是不是先把数组地址加载到$a0,然后把字加载到临时寄存器?我不太清楚如何把值赋给它们各自的索引,然后把值打印到控制台。

xxe27gdn

xxe27gdn1#

如果你不需要在运行时做这件事,你当然可以直接用指针初始化你的数组:

.data
X:       .word Ryan, Tammi, Mike, Jessica
Ryan:    .asciiz "Ryan"
Tammi:   .asciiz "Tammi"
Mike:    .asciiz "Mike"
Jessica: .asciiz "Jessica"

否则,您必须在运行时手动执行赋值,例如:

la $t0, X
la $t1, Ryan
sw $t1, ($t0)
la $t1, Tammi
sw $t1, 4($t0)
la $t1, Mike
sw $t1, 8($t0)
la $t1, Jessica
sw $t1, 12($t0)

随后可以使用循环打印它们。

gg58donl

gg58donl2#

喜欢这个解决方案,对我来说我用了第一个解决方案,只是想添加如何打印它:

.data

array_temperaturas: .space 20 
array_cidades: .word cidade_1, cidade_2, cidade_3, cidade_4, cidade_5
cidade_1: .asciiz "Porto"
cidade_2: .asciiz "Lisboa"
cidade_3: .asciiz "Faro"
cidade_4: .asciiz "Coimbra"
cidade_5: .asciiz "Viseu"

.text
# Index arrays = 0
addi $t0, $zero, 0

# Get word in index $t0
lw $t7, array_cidades($t0)

    li $v0, 4
    move $a0, $t7
    syscall

基本上,只对array_cidades($t0)处的$t7寄存器使用了lw,并使用了基本的打印字符串调用

相关问题