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

LC3汇编程序修改求助:实现单两位十进制数输入及数位求和

LC3 修改建议:输入两位十进制数并计算数位之和

没问题,我来帮你搞定这个LC3的修改需求!你现在的程序是分两次输入单个数字,要改成一次性输入两位数字(比如直接敲23)然后输出数位和,核心是要处理连续的两个ASCII输入字符,把它们转换成数值后相加,再转成ASCII输出。下面给你具体的修改思路和代码示例:

核心修改逻辑

  • LC3输入的本质:IN指令读取的是键盘输入的ASCII字符,比如输入'2'得到的是十六进制X32,输入'3'是X33。要得到对应的数字,只需要把ASCII码减去X30(也就是十进制的48)就行,因为数字0-9的ASCII码正好是X30到X39。
  • 连续输入处理:用户输入两位数字时是连续敲击的,所以我们只需要连续调用两次IN指令,就能获取到两个数位的ASCII值,不需要额外的换行处理。
  • 求和与输出:把两个数字相加后,再把结果加回X30转成ASCII码,用OUT指令输出就行。

修改后的完整代码

.ORIG X3000

; 读取第一个数位的ASCII字符
IN          ; R0 存储第一个数字的ASCII码(例如输入'2'时R0=X32)
ADD R1, R0, #-X30  ; 转换为数值:R1 = ASCII码 - X30,得到数字2

; 读取第二个数位的ASCII字符(用户连续输入第二个数字,无需换行)
IN          ; R0 存储第二个数字的ASCII码(例如输入'3'时R0=X33)
ADD R2, R0, #-X30  ; 转换为数值:R2 = ASCII码 - X30,得到数字3

; 计算两个数位的和
ADD R3, R1, R2     ; R3 = 2 + 3 = 5

; 将求和结果转换为ASCII码,准备输出
ADD R0, R3, #X30   ; R0 = 5 + X30 = X35,对应字符'5'的ASCII码
OUT                 ; 输出结果

HALT        ; 程序终止
.END

关键说明

  1. 运行时直接输入两位数字(比如23),程序会自动读取两个连续的ASCII字符,不需要分两行输入。
  2. 代码里用了R1、R2来存储转换后的数字,R3存和,你可以根据自己原来的代码调整寄存器使用,只要逻辑一致就行。
  3. 如果作业要求处理用户可能输入非数字的情况,那需要额外加判断,但一般这类基础作业会假设用户输入合法的两位十进制数,所以上面的代码足够满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:41