yuandzyx 发表于 2011-8-20 22:43:26

请马老师指教

串行中断
   +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

yuandzyx 发表于 2011-8-20 22:48:36

对了忘了说明一下此程序由HEX反汇编而成,此中断仅为一个串行中断的一部份代码。关于那个ST Z R31指令看不懂所以希望马老师能抽空赐教。

machao 发表于 2011-8-23 20:52:41

抱歉了,从汇编角度,仅这条指令本身的功能你说的一点也没错。

单为什么这样处理,你提供的信息太少,无法分析出来。这个可能是一段C的代码,串行中断中可能有写缓冲,做效验等,不知道数据的结构,以及具体功能,很难知道为什么会产生和使用这样的汇编语句。

如果有C的原码,或知道通信规程,可能会找到点原因。

你在破_解别人的东西吧?

lsbzjk 发表于 2011-10-25 09:33:14

回复【2楼】machao
-----------------------------------------------------------------------

非常好,支持了。
页: [1]
查看完整版本: 请马老师指教