[英]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.