【问题标题】:Very new to ARM assembly language. Can someone help me with this program?ARM 汇编语言的新手。有人可以帮我完成这个程序吗?
【发布时间】:2021-02-12 13:34:12
【问题描述】:

用ARM汇编代码(树莓派)编写以下代码

g=12, h=8, i=2, j=5;

f = (g + h) - (i + j);

您的程序显示消息:

f = (g + h) – (i + j) = 13

注意,13 应该是计算出来的,而不是硬编码的

        .data
string: .ascii  "\n f = (g+h) - (i+j) = %d\n"
@Code Section
        .text
        .global main
        .extern printf
main:   ldr R0,12
        ldr R1,8
        ldr R2,2
        ldr R3,5
        add R4,R0,R1
        add R5,R2,R3
        sub R6,R4,R5
        bl printf

在 ARM 汇编中如何显示消息:f = (g + h) – (i + j) = 13。我知道我做错了,那是我的尝试。当我遵守时,它说“指令错误”...1 谁能告诉我如何修复我的代码并完成这个程序?非常感谢!!!

【问题讨论】:

  • printf() 是一个 C 库函数。您可能不会在您的装配环境中调用它。即使可以调用 printf(),它也希望 r0/r1/r2/r3 遵守 Arm AAPCS(过程调用标准)。 printf() 可能不期望您的 R0/R1。
  • 谢谢!我应该用什么来显示消息“f = (g + h) – (i + j) =” 13?

标签: c assembly arm


【解决方案1】:

要将常量加载到寄存器中,请尝试ldr R0, =12。当常量可以适当编码时,这应该会生成立即 mov 指令,这是小数字的情况,因此在这种情况下,您也可以编写 mov R0, #12。如果常量不适合,则将常量组装到内存中并生成加载指令。

您还需要注意printf 期望的参数和寄存器。首先,它需要一个格式字符串。

【讨论】:

  • 谢谢!!我应该如何打印消息“ f = (g + h) – (i + j) = " 13?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多