首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问程序集中的每个单词?

如何访问程序集中的每个单词?
EN

Stack Overflow用户
提问于 2012-11-30 21:30:01
回答 1查看 1.9K关注 0票数 1

给予:

代码语言:javascript
复制
.data
arr: .word 2,5,1,3,4
len: .word 5
sum: .word 0

如何访问"arr“中的每个单词,如2、3和4?

最后,我想做的是找到"arr“中所有值的和,但我在遍历"arr”时遇到了困难。

谢谢您抽时间见我!

附加信息:

  1. 我用的是eduMIPS64
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-01 02:44:33

首先将数组的地址加载到寄存器中,然后可以使用常量偏移量访问这些项。(您的汇编程序可能支持像lw $t0, arr+12这样的结构,以此作为方便的缩写。见你的手册。)对于迭代,要么增加地址寄存器,要么添加另一个包含偏移量的寄存器。请务必说明项目的大小。对于32位mips,根据需要对64位进行调整:

代码语言:javascript
复制
.data
arr: .word 2,5,1,3,4
len: .word 5
sum: .word 0

.text
.globl main
main:
    la $t0, arr
    lw $t1, 12($t0)     # load arr[3] using byte offset
    li $t1, 3           # index
    sll $t1, $t1, 2     # multiply by item size
    addu $t1, $t1, $t0  # add base address
    lw $t1, ($t1)       # load arr[3]

# iteration type 1
# for(i=len, ptr=arr; i != 0; i -= 1, ptr += 1)
# ... use *ptr ...
    la $t0, arr
    lw $t1, len         # load length
loop1:
    lw $t2, ($t0)       # load item
    # process item here
    addi $t0, $t0, 4    # add item size to pointer
    addi $t1, $t1, -1   # decrement counter
    bne $t1, $0, loop1  # if counter != 0, repeat

# iteration type 2
# for(i=0, i != len; i += 1)
# ... use arr[i] ...
    la $t0, arr
    lw $t1, len         # load length
    li $t2, 0           # index
loop2:
    sll $t3, $t2, 2     # multiply by item size
    addu $t3, $t3, $t0  # add base address
    lw $t3, ($t3)       # load item
    # process item here
    addi $t2, $t2, 1    # increment index
    bne $t2, $t1, loop2 # if index != len, repeat

(注意,这些示例循环不处理零长度数组,必要时添加检查)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13653474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档