Sorting &引用;访问未对齐的内存位置,错误地址=ffffff";
我试图从input.txt文件中读取整数,下面是我的读取循环,我试图在其中读取整数并将其存储到数组中。在“LDR R2、[R2、R5、LSL#2]…我使用ARM SIM卡”之后的任何一行中,我都会不断获得“访问未对齐的内存位置,错误地址=FFFFFFFF”。有人知道我做错了什么吗Sorting &引用;访问未对齐的内存位置,错误地址=ffffff";,sorting,assembly,armasm,Sorting,Assembly,Armasm,我试图从input.txt文件中读取整数,下面是我的读取循环,我试图在其中读取整数并将其存储到数组中。在“LDR R2、[R2、R5、LSL#2]…我使用ARM SIM卡”之后的任何一行中,我都会不断获得“访问未对齐的内存位置,错误地址=FFFFFFFF”。有人知道我做错了什么吗 start: MOV R5, #0 @int i MOV R1, #0 swi SWI_Open LDR R1,=InFileH STR R0,[R1]
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
我在编写arm汇编程序时遇到过类似的问题
这是因为它期望偏移量是4的倍数
STR R2, [R1, #2]
上面的指令抛出了类似的错误。因此使用STR R2, [R1, #4]
为了更好地理解在
LDR R2[R2,R5,LSL#2]的源操作数中使用R2之前,不要将R2设置为值
如何写入该行以保存偏移量并将其读取的整数存储到数组中的正确地址。两个提示:LDR将值从内存加载到寄存器中。STR将值从寄存器存储到内存中。使用LDR R3,=a
指令将数组地址加载到R3中,但不使用我把它从LDR改为STR,并把R3放在里面。我感到困惑,因为所有我寻找正确语法状态汇编的地方都是“LSL R2,R3,#2”。我把我迄今为止的东西放在上面。这至少是正确的轨道吗?[R3,R5,LSR#2]