模数68K组装

时间:2017-10-13 22:11:51

标签: assembly modulo 68000

我想知道是否有一个命令/方法在Motorola 68000程序集中执行模数?

我想执行d4 mod 1000和d3 mod 100。

目前我正在使用以下公式,但这需要几行,

  

如果mod n则a - (n * int(a / n))

我已经看过d0 mod d1的这个公式

   d3.select('#btnExport')
        .on('click', function() {
            var data = newTableDim.top(Infinity);
            var blob = new Blob([d3.csv.format(data)], {type: "text/csv;charset=utf-8"});
            saveAs(blob, 'data.csv');
        });

感谢您的回答。

2 个答案:

答案 0 :(得分:7)

DIVU指令正是您正在寻找的。执行DIVU时,目标的长字除以源的字。在你的情况下,你写道:

DIVU D1, D2

所以,D2被除以D1。在商中,有两个部分返回。 D2的高位字将包含余数(模数),而低位字包含商。这就是您通常会看到SWAP d2的原因。这会将余数移到低位字。

答案 1 :(得分:2)

  1. 进行除法,结果以低16位为商,以模高16位为商
  2. 将商设置为零,以便...
  3. ..当您交换模数时,它是有效的32位值

START
       DIVU  #1000,D4
       CLR.W D4             ; delete quotient
       SWAP  D4             ; modulus from top to bottom 16 bits

       DIVU  #100,D3
       CLR.W D3             ; delete quotient
       SWAP  D3             ; modulus from top to bottom 16 bits

此代码无法处理的一件事是结果是否大于#ffff(65535),为此您需要额外的代码,可能需要进行测试以检查D3 / D4是否大于上移的除数。 16位。

由于模数将是介于0到99/999之间的数字,因此可以选择在交换之后 使用EXT.W而不是在交换之前使用CLR.W。请注意,EXT符号扩展了一个值。