如何解决尝试将字符串打印到控制台,但是我得到了额外的字符,但我不知道为什么
我是组装和 LC-3 的新手。我的教授向我介绍了我们为课堂所做的大部分工作。我们应该编写一个代码,它接受用户输入并使用子例程执行任务并将输出打印到控制台。它能够成功执行任务,返回正确的输出,但是,我在打印到控制台时遇到了问题。我不知道发生了什么。
.ORIG x3000
BR MAIN
WHILE:
ADD R0,R0,R1
ADD R2,R2,#-1
MULTIPLY:
AND R2,R2
BRp WHILE
RET
MAIN:
AND R1,#0
AND R2,#0
AND R3,#0
LD R3,NEGASCII
AND R0,#0
LEA R0,PROMPT1
PUTS
GETC
OUT
ADD R1,R3
AND R0,NL
PUTS
AND R0,PROMPT2
PUTS
GETC
OUT
ADD R2,R3
AND R0,NL
PUTS
AND R0,#0
JSR MULTIPLY
LD R3,ASCII
ADD R0,R3
OUT
HALT
NL .FILL xA
ASCII .FILL x30
NEGASCII.FILL xFFD0
PROMPT1 .STRINGZ "Enter 1st number: "
PROMPT2 .STRINGZ "Enter 2nd number: "
.END
如果我的输入是 3 3
控制台应该显示
Enter 1st Number: 3
Enter 2nd Number: 3
9
然而,它会显示
Enter 1st Number: 3
0ÐÿEnter 2nd Number: Enter 2nd number: 3
0ÐÿEnter 2nd Number: 9
我不知道为什么。
解决方法
使用 PUTS 打印存储在 .FILL 伪操作中的任何单个 ASCII 值将最终打印存储在 .FILL 地址之后的每个寄存器中的值,直到它达到值 x0000(空字符,这将终止字符串)在内存中。为了只打印新行,您需要将 NL 加载到 R0 中,然后使用 OUT 来打印与存储在 R0 中的值相关联的 ASCII 字符。 这:
AND R0,R0,#0
LEA R0,NL
PUTS
应该是这样的:
AND R0,#0
LD R0,NL
OUT
您的程序目前也无法打印任何大于 9 的输出。考虑到您的两位数字输出实际上需要由两个不同的 ASCII 字符组成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。