我想知道在Motorola 68000汇编中是否有执行模运算的命令/方法?
我想执行d4 mod 1000和d3 mod 100。
目前我正在使用以下公式,但需要多行代码:
如果a 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
。这将余数移动到低位字。
CLR.W D2
,然后再执行 SWAP D2
。这将清除低位字(商),然后执行交换操作。 - David HoelzerSTART
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
unsigned foo(unsigned x) { return x/1000; }
或%
放入C编译器中。 - Peter Cordes