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

LC3冒泡排序程序报错修复:获取0-100范围的8个输入值

LC3冒泡排序输入部分错误修复方案

核心报错原因

你遇到的immediate field is out of range错误,是因为LC3的ADD指令仅支持5位补码立即数,范围限制在**-16到15**,而你代码里用的#-100和#100都远超这个范围,编译器直接拒绝编译。

关键修复点

1. 替换超范围立即数

把-100、100这类大数值定义成内存常量,用LD指令加载后再进行运算,避开立即数范围限制。

2. 重构输入逻辑

原代码的输入逻辑存在多处根本性错误:

  • 未初始化数组存储空间,也没设置正确的数组基址
  • 单个字符转数字的逻辑错误,无法处理多位数(比如100是三位数)
  • 计数器R1仅赋值未使用,没控制只输入8个数字

修复后的完整代码

.ORIG x3000
    ; 初始化数组:预留8个存储单元(x3010开始)
    LD R0, ARRAY_BASE    ; R0 = 数组基址
    ADD R1, R1, #8       ; R1 = 剩余需要输入的数字个数
    LEA R2, PROMPT       ; 显示输入提示

INPUT_LOOP:
    PUTS
    AND R3, R3, #0       ; R3 = 当前输入的数字,初始化为0

GET_DIGIT:
    GETC
    OUT                  ; 回显输入字符
    ; 判断是否为数字字符
    LD R4, ASCII_ZERO
    ADD R5, R0, R4       ; R5 = 输入字符 - '0'
    BRN END_INPUT        ; 非数字字符,结束当前数字输入
    ADD R5, R5, #-9
    BRP END_INPUT        ; 大于'9',结束当前数字输入
    ; 计算当前数字:current = current*10 + digit
    ADD R3, R3, R3       ; current *=2
    ADD R6, R3, R3       ; current *=4
    ADD R6, R6, R6       ; current *=8
    ADD R3, R3, R6       ; current *=10
    ADD R3, R3, R5       ; 加上当前digit(R5=输入字符-'0')
    BR GET_DIGIT         ; 继续输入下一位

END_INPUT:
    ; 检查数字范围(0-100)
    LD R4, NEG_100
    ADD R5, R3, R4       ; num -100,若小于0则num<100
    BRN CHECK_LOWER
    ADD R5, R3, #0
    BRP INVALID_INPUT    ; num>100,无效
CHECK_LOWER:
    ADD R5, R3, #0
    BRN INVALID_INPUT    ; num<0,无效
    ; 存储数字到数组
    STR R3, R0, #0
    ADD R0, R0, #1       ; 数组指针后移
    ADD R1, R1, #-1      ; 剩余输入数减1
    BRP INPUT_LOOP       ; 未输够8个,继续
    ; 输入完成,后续可添加冒泡排序逻辑
    HALT

INVALID_INPUT:
    LEA R0, ERROR_MSG
    PUTS
    BR INPUT_LOOP        ; 重新输入当前数字

; 常量定义
ARRAY_BASE .FILL x3010   ; 数组起始地址
ASCII_ZERO .FILL x0030   ; '0'的ASCII值
NEG_100    .FILL #-100   ; -100常量
PROMPT     .STRINGZ "Enter a number (0-100): "
ERROR_MSG  .STRINGZ "\nInvalid input! Please enter a number between 0 and 100.\n"

; 数组存储空间(8个单元)
.ORIG x3010
ARRAY      .BLKW 8
.END

额外说明

  • 代码里添加了多位数输入处理逻辑,支持输入0-100之间的整数
  • 用数组存储8个输入值,后续可以直接在HALT前添加冒泡排序的实现
  • 所有超范围的数值都改用内存常量加载,彻底解决立即数范围报错问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:20:36