【问题标题】:How to return a number larger than 8 bits from main()?如何从 main() 返回大于 8 位的数字?
【发布时间】:2019-10-18 20:38:14
【问题描述】:

据我所知,r0 返回的退出代码仅使用该寄存器的最低 8 位。我将如何返回一个高于 8 位的值?

这里是 ARMv7 代码:

@ looping.s
@ calculates sum of integers from 1 to 100
.text
.balign 4
.global main
main:
    MOV r1, #0      @ r1 = 0 as sum
    MOV r2, #0      @ r2 = 0 as counter
loop:
    ADD r2, r2, #1  @ counter = counter + 1
    ADD r1, r1, r2  @ sum = sum + counter
    CMP r2, #100    @ counter - 100
    BLT loop        @ if counter < 100 go to start of loop
    MOV r0, r1      @ Store sum in r0
    BX lr           @ Return summation result to OS

【问题讨论】:

  • 使用循环计算 5050?
  • 这是实验表 3 吗? xD
  • @dangee1705 也许哈哈
  • @ErikEidt 这是一个练习,我只是不明白如何返回超过 8 位,但答案回复明确表示您不能返回超过 8 位,因此您可以使用编写系统调用。

标签: assembly arm armv7 exitstatus


【解决方案1】:

进程的退出状态大小为 8 位。通过正常方式返回更大的退出状态是不可能的。如果你想输出一个大于 255 的数字,你可以使用 write 系统调用将它打印到标准输出(文件描述符 1)。

【讨论】:

  • 请注意,这通常与汇编或 ARM 无关——Unix/Linux/POSIX 上的进程退出代码都是 8 位。
  • @ChrisDodd - MSDOS、Windows 也是 8 位。
【解决方案2】:

您不应该使用main() 函数来执行计算。通常,函数不限于 8 位返回值,所以给你的实际函数一个不同的名称,并在 R0 中返回一个更大的整数。从main() 内部调用你的函数,然后对返回值做任何你需要做的事情,也许将它打印到控制台。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多