Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在LC-3中打印两位数数字_Loops_Assembly_Add_Lc3_Lc3 Trap - Fatal编程技术网

Loops 在LC-3中打印两位数数字

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

最近一直在学习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 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”。很抱歉,我现在又得到了它!谢谢你解决了我的问题。让我想了想