繁体   English   中英

模数68K组装

[英]Modulo in 68K assembly

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

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

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

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

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

CLR.L D2
MOVE.W D0,D2
DIVU D1,D2
SWAP D2

谢谢你的回答。

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

DIVU D1, D2

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

  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符号会扩展一个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM