Assembly 程序集理解低字节和高字节

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

你好,有人能给我解释一下这是怎么回事吗?我知道总延迟为25.344毫秒,但我如何计算?如果我没有使用高字节和低字节,我知道如何计算延迟,但似乎我无法得到正确的答案。多谢各位

 ;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个周期。