assembly 68k组件中的延迟环路

pvcm50d1  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(102)

我想在汇编中写一个延迟循环。应产生N周期的延迟。
我的想法是创建一个for循环并迭代NOP指令。在这种情况下,我是否必须减少N,减少程序的其他部分(例如调用for循环)导致的周期数?此外,for循环的每次迭代算为1个循环还是2个循环?
在最好的情况下-有人有这样一个延迟周期的实现吗?

ipakzgxi

ipakzgxi1#

没有68 k指令会在一个周期内执行。即使是一个简单的NOP也需要四个周期-所以你需要稍微调整一下你的期望。
最简单的延迟回路是

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

这将延迟 * 延迟 * 10* 周期数。注意,delay 是字大小的,因此该结构被限制为14到65534个周期之间的延迟。如果你想要一个更大的范围,你需要使用一个使用长字计数器的不同结构:

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个循环。但是,它接受长字循环计数器。
如果你想增加可实现的延迟,你可以考虑嵌套的延迟lops或更复杂的指令和循环内的寻址模式。然而,这两个是最短的可能延迟环路。

相关问题