Loops 在LC-3中打印两位数数字
最近一直在学习LC-3,想知道如何打印大于9的数字?在这个程序中,我让它要求宽度和长度,并将两者相乘得到形状的面积。我的问题是任何大于9的输出,它开始打印一个字母或一个数字,与我想要的不接近。我该怎么做呢?我的代码:Loops 在LC-3中打印两位数数字,loops,assembly,add,lc3,lc3-trap,Loops,Assembly,Add,Lc3,Lc3 Trap,最近一直在学习LC-3,想知道如何打印大于9的数字?在这个程序中,我让它要求宽度和长度,并将两者相乘得到形状的面积。我的问题是任何大于9的输出,它开始打印一个字母或一个数字,与我想要的不接近。我该怎么做呢?我的代码: .ORIG x3000 ; Reset Registers AND R0, R0, #0 AND R1, R1, #0 AND R2, R2, #0 AND R3, R3, #0 AND R4, R4, #0 AND R5, R5, #0 AND R6, R6, #0 AND R
.ORIG x3000
; Reset Registers
AND R0, R0, #0
AND R1, R1, #0
AND R2, R2, #0
AND R3, R3, #0
AND R4, R4, #0
AND R5, R5, #0
AND R6, R6, #0
AND R7, R7, #0
LEA R0, numberone
PUTS
GETC
OUT
LD R3, HEXN30
ADD R0, R0, R3
ADD R1, R0, #0
LEA R0, numbertwo
PUTS
GETC
OUT
ADD R0, R0, R3
ADD R6, R0, #0
LOOP
ADD R2, R2, R1
ADD R6, R6, #-1
BRp LOOP
LEA R0, MESG
PUTS
ADD R0, R2, x0
LD R2, NEG_TEN
ADD R2, R2, R0
BRn JUMP
AND R4, R4, #0
ADD R4, R4, R2
LD R0, ASCII_1
OUT
AND R0, R0, #0
ADD R0, R0, R4
JUMP
LD R3, HEX30 ;add 30 to integer to get integer character
ADD R0, R0, R3
OUT
HALT ;{TRAP 25}
numberone .stringz "\nPlease enter the length: "
numbertwo .stringz "\nPlease enter the width: "
MESG .STRINGZ "\n\nThe Area of the Rectangle is: "
HEXN30 .FILL xFFD0 ; -30 HEX
HEX30 .FILL x0030 ; 30 HEX
NEG_TEN .FILL #-10
ASCII_1 .FILL x0031 ; ASCII char '1'
.END
示例输出:
Please enter the length: 4
Please enter the width: 5
The area of the object is: 20
此代码将始终打印
1
:
LD R0, ASCII_1
OUT
它不可能像您希望的那样打印4乘5的2
下一个字符打印为
:
,因为您在R4
中有10
,因为您在重复减法的除法中没有减去10
足够的次数。您只减去了10
一次,20
需要减去10
两次(得到0
作为余数)
通过简单地阅读那里的代码,您应该能够看到第一个问题。加载ascii
1
并打印它,除了打印1
之外,还能做什么?所以这里缺少一些代码
后一个问题是一个off-by-one错误的形式(循环一到几次迭代),这是在单步调试期间应该寻找的。你希望你的重复减法除法留下一个0到9之间的余数-绝对不是10
边界条件非常容易出错。使用
我理解了第二部分的含义,并再次循环它以生成0。我的问题是试图修复LD R0,ASCII_1输出线。当我尝试将其从1更改为2时,我得到一个“指令引用未定义的标签'ASCII_2'。另外还有一个错误“指令引用不可寻址内存位置-1”。很抱歉,我现在又得到了它!谢谢你解决了我的问题。让我想了想