请马老师指教
串行中断+0000031F: 930F PUSH R16
+00000320: 931F PUSH R17
+00000321: 93EF PUSH R30
+00000322: 93FF PUSH R31
+00000323: B7FF IN R31,0x3F
+00000324: 93FF PUSH R31
+00000325: E9EA LDI R30,0x9A ; 0x9A = 0b10011010 = 154
+00000326: E0F2 LDI R31,0x02 ; 0x02 = 0b00000010 = 2
+00000327: 83F0 ST Z,R31 ;将R31寄存器的内容传送至Z所指向的SRAM存储空间 Z指针地址分别由R31和R30指定 所以说这里有点看不懂了 表马老师指教
+00000328: B1FC IN R31,0xC
+00000329: B10B IN R16,0xB
+0000032A: 7108 ANDI R16,0x18 ; 0x18 = 0b00011000 = 24
+0000032B: F501 BRNE +0x20 ; Destination: 0x00034C
+0000032C: E7EE LDI R30,0x7E ; 0x7E = 0b01111110 = 126
+0000032D: 8100 LD R16,Z
+0000032E: 7700 ANDI R16,0x70 ; 0x70 = 0b01110000 = 112
+0000032F: F4E1 BRNE +0x1C ; Destination: 0x00034C
+00000330: E8E5 LDI R30,0x85 ; 0x85 = 0b10000101 = 133
+00000331: 8100 LD R16,Z
+00000332: E7EF LDI R30,0x7F ; 0x7F = 0b01111111 = 127
+00000333: 0FE0 ADD R30,R16
+00000334: 83F0 ST Z,R31
+00000335: E8E5 LDI R30,0x85 ; 0x85 = 0b10000101 = 133
+00000336: 9503 INC R16
+00000337: 8300 ST Z,R16
+00000338: E8E4 LDI R30,0x84 ; 0x84 = 0b10000100 = 132
+00000339: 8110 LD R17,Z 对了忘了说明一下此程序由HEX反汇编而成,此中断仅为一个串行中断的一部份代码。关于那个ST Z R31指令看不懂所以希望马老师能抽空赐教。 抱歉了,从汇编角度,仅这条指令本身的功能你说的一点也没错。
单为什么这样处理,你提供的信息太少,无法分析出来。这个可能是一段C的代码,串行中断中可能有写缓冲,做效验等,不知道数据的结构,以及具体功能,很难知道为什么会产生和使用这样的汇编语句。
如果有C的原码,或知道通信规程,可能会找到点原因。
你在破_解别人的东西吧? 回复【2楼】machao
-----------------------------------------------------------------------
非常好,支持了。
页:
[1]