Assembly 小人计算机余数整除

Assembly 小人计算机余数整除,assembly,integer-division,little-man-computer,Assembly,Integer Division,Little Man Computer,我已经成功地编写了一个LMC程序,它可以执行整数除法。然而,如果有余数,它将进入一个无限循环 我在想一种方法,不管是否有余数,都能保持商,但是我被卡住了 一个想法是通过原始除数增加红利,然后在分支之前检查除数的负值。然而,只有“零分支”或“正分支”可用,因此我可能必须从头开始重新编写程序以使用反向逻辑 有人能提供一个能处理非精确除法的版本吗 // CANT HANDLE NOT-EXACT DIVISION INP DIVIDEND STA DIVIDEND INP DIVISOR STA DI

我已经成功地编写了一个LMC程序,它可以执行整数除法。然而,如果有余数,它将进入一个无限循环

我在想一种方法,不管是否有余数,都能保持商,但是我被卡住了

一个想法是通过原始除数增加红利,然后在分支之前检查
除数的负值。然而,只有“零分支”或“正分支”可用,因此我可能必须从头开始重新编写程序以使用反向逻辑

有人能提供一个能处理非精确除法的版本吗

// 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

有几种解决方案。例如,您可以使用
BRP
从循环的顶部继续,但也可以将一些逻辑移到循环的开头,第一次进入循环时必须跳过

其他一些注释:保护代码不被零除(无限循环)。另一方面,不需要测试股息是否为零。在这种情况下,除数的减法将导致循环中断

#输入:11 3
磷化铟
STA股息
磷化铟
BRZ退出//不被零除
STA除数
胸罩入口
循环STA红利
LDA商
加一
STA商
分录股息
子除数
BRP环路
LDA商
出来
退出HLT
股息数据
除数DAT
商DAT 0
一个DAT 1

您可以轻松生成一条分支否定指令,只需使用
BRP
跳过
BRA