簡體   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