首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LC3汇编语言

LC3汇编语言
EN

Stack Overflow用户
提问于 2012-05-10 12:31:01
回答 1查看 18.5K关注 0票数 1

我正在尝试写一个接受两个输入数字并打印出x * y = z的LC3汇编语言程序。

我可以让它工作于数字,0-9,然而,任何数字以上,我得到奇怪的字母或符号。

另外,我如何才能使它不仅可以接受每个GETC只有1个输入,而且可以接受两个数字,例如。10 * 12= 120?任何帮助都将不胜感激!:)

以下是我到目前为止所做的工作

代码语言:javascript
复制
    .ORIG x3000
AND R3, R3, #0 ;r3 stores the sum, set r3 to zero
AND R4, R4, #0 ;r4 is the counter
LD R5, INVERSE_ASCII_OFFSET ;inverse ascii offset
LD R6, DECIMAL_OFFSET ;decimal offset
;---------------------
;storing first input digits
LEA R0, display1 ;load the address of the 'display1' message string
PUTS ;Prints the message string
GETC ;get the first number
OUT ;print the first number
ADD R1, R0, #0 ;store input value(ascii) to r1
ADD R1, R1, R5 ;get real value of r1
;storing second input digits
LEA R0, display2 ;load the address of the 'display2' message string
PUTS ;Prints the message string
GETC ;get the first number
OUT ;print the first number
ADD R2, R0, #0 ;store input value(ascii) to r2
ADD R2, R2, R5 ;get real value of r2
;----------------------
ADD R4, R2, #0 ;fill counter with multiplier
MULTIPLICATION:
ADD R3, R3, R1 ;add to sum
ADD R4, R4, #-1 ;decrease counter by one
BRp MULTIPLICATION ;continue loop until multiplier is 0
LEA R0, stringResult
PUTS
ADD R0, R3, R6 ;move result to r0
OUT ;print result
HALT
display1 .STRINGZ "\nenter the 1st no.: "
display2 .STRINGZ "\nenter the 2nd no.: "
stringResult .STRINGZ "\nResult: "
INVERSE_ASCII_OFFSET .fill xFFD0 ; Negative of x0030.
DECIMAL_OFFSET .fill #48
.END
EN

回答 1

Stack Overflow用户

发布于 2012-07-11 07:42:15

您的显示函数的工作方式是在'0'的基本ascii值上添加一个数字。这是因为ascii表是以方便的方式排列的。例如,相当于0x30 + 1 = 0x31'0' + 1 = '1'。但是,如果您可能正在查找该'0' + 12 = '<'。这是因为'0' = 0x30,所以0x30 + 12 (0xC) = 0x3C。查看ascii图表,我们可以看到0x3C = '<'。也就是说,这是一种只打印出一个数字的有效方法。

这两个问题的答案在于编写一个迭代处理数字并与其形成数字的例程。换句话说,您将需要一个循环来确定下一步打印哪个字符并打印它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10527531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档