如何解决如何将数字最多取64并以000 000二进制格式输出
目标是接受一个最大为64的数字,并以000 000格式以二进制形式输出,因此以两个十进制值进行编码。我知道LMC不允许输出数字如010,所以也可以接受11 100这样的格式。
到目前为止,这是我的代码:
INP
STO INPUT
SUB SUB64
BRP END
LDA INPUT
SUB SUB32
BRP SET_32
RET_32 LDA INPUT
SUB SUB16
BRP SET_16
RET_16 LDA INPUT
SUB SUB8
BRP SET_8
RET_8 LDA INPUT
SUB SUB4
BRP SET_4
RET_4 LDA INPUT
SUB SUB2
BRP SET_2
RET_2 LDA INPUT
SUB SUB1
BRP SET_1
RET_1 OUT OUTPUT_2
OUT OUTPUT_1
END HLT
SET_1 STO INPUT
LDA OUTPUT_1
ADD ADD1
STO OUTPUT_1
BRA RET_1
SET_2 STO INPUT
LDA OUTPUT_1
BRA RET_2
SET_4 STO INPUT
LDA OUTPUT_1
ADD ADD100
STO OUTPUT_1
BRA RET_4
SET_8 STO INPUT
LDA OUTPUT_2
ADD ADD1
STO OUTPUT_2
BRA RET_8
SET_16 STO INPUT
LDA OUTPUT_2
ADD ADD10
STO OUTPUT_2
BRA RET_16
SET_32 STO INPUT
LDA OUTPUT_2
ADD ADD100
STO OUTPUT_2
BRA RET_32
OUTPUT_1 DAT 000
OUTPUT_2 DAT 000
INPUT DAT 000
SUB64 DAT 64
SUB32 DAT 32
SUB16 DAT 16
SUB8 DAT 8
SUB4 DAT 4
SUB2 DAT 2
SUB1 DAT 1
ADD1 DAT 1
ADD10 DAT 10
ADD100 DAT 100
使用输入63运行此命令将输出101101,因此它以正确的格式输出,但不能始终如一地工作:对于输入62,这将输出两个-1。
我应该怎么做才能做到这一点?
解决方法
您的代码中有两个问题(问题末尾的更新版本):
-
OUT
不带参数。OUT
将输出累加器中的所有内容。因此更改:OUT OUTPUT_2 OUT OUTPUT_1
收件人:
LDA OUTPUT_2 OUT LDA OUTPUT_1 OUT
-
对于SET_2,您忘记添加10。需要在此处添加以下两个说明:
ADD ADD10 STO OUTPUT_1
这是更正的代码:
#input:63
INP
STO INPUT
SUB SUB64
BRP END
LDA INPUT
SUB SUB32
BRP SET_32
RET_32 LDA INPUT
SUB SUB16
BRP SET_16
RET_16 LDA INPUT
SUB SUB8
BRP SET_8
RET_8 LDA INPUT
SUB SUB4
BRP SET_4
RET_4 LDA INPUT
SUB SUB2
BRP SET_2
RET_2 LDA INPUT
SUB SUB1
BRP SET_1
RET_1 LDA OUTPUT_2
OUT
LDA OUTPUT_1
OUT
END HLT
SET_1 STO INPUT
LDA OUTPUT_1
ADD ADD1
STO OUTPUT_1
BRA RET_1
SET_2 STO INPUT
LDA OUTPUT_1
ADD ADD10
STO OUTPUT_1
BRA RET_2
SET_4 STO INPUT
LDA OUTPUT_1
ADD ADD100
STO OUTPUT_1
BRA RET_4
SET_8 STO INPUT
LDA OUTPUT_2
ADD ADD1
STO OUTPUT_2
BRA RET_8
SET_16 STO INPUT
LDA OUTPUT_2
ADD ADD10
STO OUTPUT_2
BRA RET_16
SET_32 STO INPUT
LDA OUTPUT_2
ADD ADD100
STO OUTPUT_2
BRA RET_32
OUTPUT_1 DAT 000
OUTPUT_2 DAT 000
INPUT DAT 000
SUB64 DAT 64
SUB32 DAT 32
SUB16 DAT 16
SUB8 DAT 8
SUB4 DAT 4
SUB2 DAT 2
SUB1 DAT 1
ADD1 DAT 1
ADD10 DAT 10
ADD100 DAT 100
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.7/lmc.js"></script>
根据您的规范,这将输出两个十进制数字,其中的数字应解释为二进制。如前所述,这可能会造成混淆。例如,对于输入9,输出为1 1而不是001 001。
如果要显示每个 二进制数字,请考虑输出6个值而不是2个,并让每个输出为0或1。在这种情况下,9的输出为0 0 1 0 0 1。
请参见this answer,了解如何实现这一目标。
,您可以打印最高有效位,然后乘以2(左移1),直到达到要打印的数字的位长。例如:
n = 01100100 # 0
SHL(n,1)
n = 11001000 # 1
SHL(n,1)
n = 10010000 # 1
SHL(n,1)
n = 00100000 # 0
SHL(n,1)
n = 01000000 # 0
SHL(n,1)
n = 10000000 # 1
SHL(n,1)
n = 00000000 # 0
SHL(n,1)
n = 00000000 # 0 (number is 8-bits so we don't stop until we print 8 digits.)
----------------------
Result: '01100100'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。