【问题标题】:How do I calculate the offset to load R1 with address x3100?如何计算偏移量以使用地址 x3100 加载 R1?
【发布时间】:2021-08-04 03:51:13
【问题描述】:

这是我的代码。该程序要求用户输入一个数字并存储在 R3 中。然后它检查该数字与存储在内存位置 x3101 - x3105 中的 5 个其他数字。 (数字分别为2、2、4、4、4)

我相信我的问题与我的第二行有关。 “LD R1,x0030”。
我知道 x0030 不正确,我只是在玩它。我正在尝试让它用 x3100 加载 R1,以便它可以稍后移动到 3101、3102 等等。

到目前为止的代码:

.ORIG   x3000       ;0011 0000 0000 0000 ?


    AND R5, R5, #0
    LD R1, x0030
    TRAP x23
    LDR R4, R1, #0
    ADD R2, R4, #-5
    BRz #8
    NOT R4, R4
    ADD R4, R4, #1
    ADD R4, R4, R3
    BRnp #1
    ADD R5, R5, #1
    ADD R1, R1, #1
    LDR R4, R1, #0
    BRnzp #-10
    LD R3, #5
    ADD R3, R3, R5
    TRAP x21
    TRAP x25
.FILL x3100



.END


.ORIG x3100
.FILL  x0005      ; iteration number
.FILL  x0032      ; number 2
.FILL  x0032
.FILL  x0034      ; number 4
.FILL  x0034
.FILL  x0034
.END

【问题讨论】:

    标签: assembly lc3


    【解决方案1】:

    为常量使用标签:

        LD R1, myLabel
        ...
        ...
    myLabel .FILL x3100
    

    如果您使用这种方法,并且(通过汇编程序运行它,然后)将其加载到模拟器中,您将能够看到机器代码指令 (x2210),具有达到所需的 PCOffset9 值.填充 x3100。如果需要,您可以将代码更改为适当的偏移量(此处为 x10,也称为 #16)——但它会比使用标签更脆弱,因此如果您进行后续更改,偏移量可能会改变。

    【讨论】:

      【解决方案2】:

      让汇编器帮你算算:

       LEA R1, mylabel
       ...
       ...
       .ORIG xVVVV    ;(whatever value you want)
      mylabel .FILL  x0005 
      .FILL  x0032      ; number 2
      ...
      

      您对地址使用文字值越少,您的代码就越健壮。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 2015-06-27
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多