【问题标题】:"Access to unaligned memory location, bad address=ffffff"“访问未对齐的内存位置,地址错误=ffffff”
【发布时间】: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

标签: sorting assembly armasm


【解决方案1】:

我在编写 arm 组件时遇到了类似的问题
这是因为它期望偏移量为 4 的倍数

STR R2, [R1, #2]

上面的指令抛出了类似的错误。所以它通过使用解决了

STR R2, [R1, #4]

为了更好地理解clickhere

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 2013-10-21
    • 2021-10-16
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多