You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM汇编实现输入范围奇偶求和功能异常排查

ARM汇编1到N奇偶累加代码修复说明

现有代码核心问题

  • 寄存器用途规划混乱:用户输入的上限值存入r1后被直接修改,未保留原始值,也未初始化循环计数器、偶数累加和、奇数累加和对应的寄存器,初始值随机导致运算错误
  • 奇偶判断逻辑错误:原有判断语句无法识别数值奇偶性,正确奇偶判断需使用TST指令将数值与1按位与,若Z标志位为1则是偶数,为0则是奇数
  • 循环逻辑不匹配需求:原有循环是判断r1等于101退出,未按顺序遍历1到用户输入的上限值,也未在到达上限时停止循环
  • printf调用参数错误:调用输出函数前未按要求设置对应参数,且未定义奇偶累加和的输出格式字符串
  • 寄存器未初始化:用于累加、计数的寄存器未预先清0,初始随机值会导致计算结果错误

修正后完整代码

.equ READERROR, 0 @ 用于检查scanf读取错误

.global main @ 因使用C库需定义main入口
main:
prompt:
    @ 提示用户输入数字
    ldr r0, =strInputPrompt
    bl printf

    @ 读取用户输入
    ldr r0, =numInputPattern
    ldr r1, =intInput
    bl scanf
    cmp r0, #READERROR
    beq readerror @ 读取错误则跳转处理

    @ 回显用户输入
    ldr r1, =intInput
    ldr r1, [r1]
    ldr r0, =strOutputNum
    bl printf

    @ 初始化寄存器:r4存上限值,r2存奇数累加和,r3存偶数累加和,r5存当前遍历数
    mov r4, r1
    mov r2, #0
    mov r3, #0
    mov r5, #1
loop:
    cmp r5, r4 @ 遍历数超过上限则退出循环
    bgt calc_end

    @ 判断奇偶
    tst r5, #1
    beq even_add @ 是偶数跳转到偶数累加

    @ 奇数累加
    add r2, r2, r5
    b loop_continue
even_add:
    @ 偶数累加
    add r3, r3, r5
loop_continue:
    add r5, r5, #1
    b loop
calc_end:
    @ 输出奇数累加和
    ldr r0, =strOutputOddSum
    mov r1, r4
    mov r2, r2
    bl printf

    @ 输出偶数累加和
    ldr r0, =strOutputEvenSum
    mov r1, r4
    mov r2, r3
    bl printf

    b myexit

readerror:
    @ 清除输入缓冲区
    ldr r0, =strInputPattern
    ldr r1, =strInputError
    bl scanf
    b prompt

myexit:
    @ 退出程序返回OS
    mov r7, #0x01
    svc 0

.data
.balign 4
strInputPrompt: .asciz "Input a number between 1 and 100: \n"
.balign 4
strOutputNum: .asciz "You entered: %d \n"
.balign 4
strOutputOddSum: .asciz "The sum of odd numbers from 1 to %d is: %d \n"
.balign 4
strOutputEvenSum: .asciz "The sum of even numbers from 1 to %d is: %d \n"
.balign 4
numInputPattern: .asciz "%d"
.balign 4
strInputPattern: .asciz "%[^\n]"
.balign 4
strInputError: .skip 100*4
.balign 4
intInput: .word 0

.global printf
.global scanf

内容的提问来源于stack exchange,提问作者MaciG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:27:01