簡體   English   中英

68k 組裝中的延遲循環

[英]Delay Loop in 68k Assembly

我想在匯編中編寫一個延遲循環。 它將產生N個周期的延遲。

我的想法是創建一個 for 循環並遍歷NOP指令。 在這種情況下,我是否必須將N減少由程序其他部分引起的循環數,例如調用 for 循環? 此外,for 循環的每次迭代算作 1 個循環還是 2 個循環?

在最好的情況下 - 有沒有人實現這樣的延遲周期?

沒有 68k 指令可以在一個周期內執行。 即使是一個簡單的 NOP 也需要四個周期 - 所以你需要稍微調整一下你的期望。

可以想象的最簡單的延遲循環是

       move.w #delay-1,d0
loop:  dbf    d0,loop       ; 10 cycles per loop + 14 cycles for last 
                            ; (branch not taken) 

這將延遲延遲 * 10個周期。 請注意,延遲是字大小的,因此該構造僅限於 14 到 655354 個周期之間的延遲。 如果您想要更廣泛的范圍,則需要使用使用長字計數器的不同構造:

       move.l  #delay,d0
       moveq.l #1,d1
 loop: sub.l   d1,d0        ; 6 cycles for Dn.l->Dn.l
       bne.s   loop         ; 10 cycles for branch

每次迭代需要 16 個周期。 但是,它確實接受長字循環計數器。

如果您想增加可實現的延遲,您可以考慮嵌套延遲循環或更復雜的指令和循環內的尋址模式。 然而,這兩個是最短的可能延遲循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM