我有一个问题。 如果我的闹钟= = 60我需要切换inc alarmM并重置闹钟,但我有一个问题
increment_alarm_second:
inc alarmS ; increment alarmS
cpi alarmS , 0x5A ; 0x3C ; Compare alarmS to 60
breq increment_alarm_minute ; If true, jump incMinute
swap alarmS ; swap here to save registers ( swap nibbles )
cpi alarmS , 0xA0 ; compares alarmS register to an inverted 10
brlo endIncSecal ; branch if lower then an inverted 10 to endIncSecal
incSecTenal:
andi alarmS, 0x0F ; does an AND + increment on the alarmS register
inc alarmS ; increments the alarmS register
swap alarmS ; swaps alarm_s register
ret ; returns from the calll
endIncSecal:
swap alarm_s ; swap back
ret
为什么是cpi alarmS,0x5A?而不是0x3C,这是60 ..
之后我们交换半字节并将其与0xA0进行比较?这是为什么?
提前致谢
答案 0 :(得分:0)
该片段分别跟踪秒的数字。也就是说,第一个半字节是10秒的倍数。第二个半字节是剩下的。
当第二个半字节达到10时,它被清除并且第一个半字节递增。
如果值达到" 50和10" (即60秒)然后它被清除并且分钟增加。
此代码段的主要问题是所有这些都需要在代码中的注释中进行解释。它出乎意料地要求它。