【发布时间】:2017-04-21 03:39:34
【问题描述】:
我正在尝试从 input.txt 文件中读取整数,下面是我尝试读取整数并将其存储到数组中的读取循环。我在使用 ARM SIM 的“LDR R2,[R2,R5,LSL #2]...im做错了吗?
start:
MOV R5, #0 @int i
MOV R1, #0
swi SWI_Open
LDR R1,=InFileH
STR R0,[R1]
MOV R3, #0
readloop:
LDR R0, =InFileH
LDR R0, [R0]
swi SWI_RdInt
CMP R0, #0
BEQ readdone
@the int is now in R0
MOV R1, R0
LDR R3,=a
STR R2,[R3,R5,LSR#2]
MOV R2, R1
ADD R5, R5, #1 @i++
bal readloop
readdone:
MOV R0, #0
swi SWI_Close
swi SWI_Exit
.data
.align 4
InFileH: .skip 4
InFile: .asciz "numbers.txt"
OutFile: .asciz "numsort.txt"
OutFileH: .skip 4
NewLine: .asciz "\n"
a: .skip 400
【问题讨论】:
-
在
LDR R2,[R2,R5,LSL #2]的源操作数中使用R2之前,不要将其设置为一个值 -
我将如何编写该行以保存偏移量并将其读取的整数存储到数组中的正确地址。
-
两个提示:LDR 将值从内存加载到寄存器中。 STR 将寄存器中的值存储到内存中。您使用
LDR R3,=a指令将数组的地址加载到 R3 中,但您不会在任何地方使用 R3 中的值。 -
我把它从 LDR 改成了 STR 并把 R3 放在里面。我很困惑,因为我寻找正确语法状态程序集的所有地方都是“LSL R2,R3,#2”。我把到目前为止的东西放在上面。这至少是正确的轨道吗?
-
[R3,R5,LSR#2]LSL,而不是LSR。