【发布时间】:2019-04-13 13:32:18
【问题描述】:
我已经编写了一个 LMC 程序,该程序在 this simulator 上运行,用于执行整数除法。但是,如果有余数,则会进入无限循环。
我正在想办法只保留商而不管是否有余数,但我被卡住了。
一个想法是通过原始除数增加被除数,然后在分支之前检查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
【问题讨论】:
-
您可以轻松地创建分支否定指令,只需使用
BRP跳过BRA。
标签: assembly integer-division little-man-computer