在LC-3中打印两位数字

问题描述 投票:0回答:1

最近了解LC-3,并想知道如何打印大于9的数字?在这个程序中,我要求输入宽度和长度,然后将两者相乘以得到形状的面积。我的问题是,任何大于9的输出都会开始打印一个字母或一个与我想要的数字不符的数字。我应该怎么做呢?我的代码:


; 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```

Example Output:
Please enter the length: 4
Please enter the width: 5
The area of the object is: 20
loops assembly add lc3 lc3-trap
1个回答
0
投票

此代码将始终打印1

LD R0, ASCII_1 
OUT 

[没有机会从4到5打印您想要的2


下一个字符打印为:,因为您在10中有R4,因为在通过重复减法的除法中没有将10减去足够的次数。您只减去了10一次,而20需要减去10两次(以获得0作为余数)。


您只需阅读那里的代码,就能看到第一个问题。除了打印1以外,如何加载ascii 1并进行打印?因此,那里缺少一些代码。

后一个问题是一种不正确的错误形式(循环一次到几次迭代),这是您在单步调试过程中应寻找的东西。您希望通过重复减法进行除法运算,使余数保持在0到9之间-绝对不是10!]

© www.soinside.com 2019 - 2024. All rights reserved.