我设法编写了一个在this simulator上运行的LMC程序以执行整数除法。但是,如果有余数,则会陷入无限循环。
我正在尝试一种方法来保持商而不管是否存在余数,但是我被困住了。
一个想法是增加原始除数的分红,然后在分支之前检查DIVISOR
的负值。但是,只有“零时分支”或“正值时分支”可用,因此我可能不得不从头开始重新编写程序以使用反向逻辑。
任何人都可以提供可以处理非精确划分的版本吗?
// CANT HANDLE NOT-EXACT DIVISION
INP DIVIDEND
STA DIVIDEND
INP DIVISOR
STA DIVISOR
LOOP LDA DIVIDEND
BRZ END
SUB DIVISOR
STA DIVIDEND
LDA QUOTIENT
ADD ONE
STA QUOTIENT
BRA LOOP
END LDA QUOTIENT
OUT
SUB QUOTIENT
STA QUOTIENT
HLT
DIVIDEND DAT
DIVISOR DAT
QUOTIENT DAT 0
ONE DAT 1
答案 0 :(得分:1)
有几种解决方案。例如,您可以使用BRP
从循环的顶部开始继续,但是还可以将某些逻辑移到循环的开始,进入循环时必须跳过这些逻辑。第一次。
其他一些说明:保护您的代码不被零除(无限循环)。另一方面,不需要测试股息为零。在这种情况下,除数的减法将导致循环中断。
#input: 11 3
INP
STA DIVIDEND
INP
BRZ QUIT // no division by zero
STA DIVISOR
BRA ENTRY
LOOP STA DIVIDEND
LDA QUOTIENT
ADD ONE
STA QUOTIENT
ENTRY LDA DIVIDEND
SUB DIVISOR
BRP LOOP
LDA QUOTIENT
OUT
QUIT HLT
DIVIDEND DAT
DIVISOR DAT
QUOTIENT DAT 0
ONE DAT 1
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.7/lmc.js"></script>