Assembly 程序集理解低字节和高字节
你好,有人能给我解释一下这是怎么回事吗?我知道总延迟为25.344毫秒,但我如何计算?如果我没有使用高字节和低字节,我知道如何计算延迟,但似乎我无法得到正确的答案。多谢各位Assembly 程序集理解低字节和高字节,assembly,avr,Assembly,Avr,你好,有人能给我解释一下这是怎么回事吗?我知道总延迟为25.344毫秒,但我如何计算?如果我没有使用高字节和低字节,我知道如何计算延迟,但似乎我无法得到正确的答案。多谢各位 ;Delay Subroutine (25.351 ms) delay: in save,SREG ;Preserve status register ldi YH,high($18C0) ;Load high byte of Y
;Delay Subroutine (25.351 ms)
delay: in save,SREG ;Preserve status register
ldi YH,high($18C0) ;Load high byte of Y
ldi YL,low($18C0) ;Load low byte of Y
loop: sbiw Y,1 ;Decrement Y
brne loop ;and continue to decrement until Y=0
out SREG,save ;Restore Status register
ret ;Return
在我看来,这取决于处理器的时钟频率,这在你的问题中没有具体说明。将一个
sbiw
和一个brne
所需的周期相加(分支所在位置),将其乘以$18C0
,然后将得到的结果乘以每个周期的秒数。这基本上是一项任务,我们知道,如果从00到FF,将需要255*768个循环。1兆赫时钟频率。如果我们取高字节18和低字节C0,它应该是从小数点24到192,不是吗?结束我们将以192*768*24结束?sbiw
在16位寄存器对上运行。您已经用值$18C0
初始化了寄存器对Y
(YL
和YH
),所以这就是您将循环的次数。我们解决了它。通过将“18C0”乘以4,我们得到了25351的答案。这完全是偶然的,偶然的sbiw
和brne
(分支时)都指定为需要2个周期。因此,循环每次迭代需要4个周期。