Little Man计算机整数除法余数

问题描述 投票:0回答:1

我设法编写了一个在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
assembly integer-division little-man-computer
1个回答
0
投票

有几种解决方案。例如,您可以使用BRPcontinue循环的顶部,但是将一些逻辑移到循环的开始,您必须在第一次进入循环时跳过该逻辑。

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

START    INP DIVIDEND
         STA DIVIDEND
         INP DIVISOR
         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/[email protected]/lmc.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.