小弟刚接触MSP430,老板丢来一段汇编代码,实在看不懂是什么用途。摘取其中一个数据处理的函数。
主要是不明白它的SWPB交换字节一般是做什么用的?还有一大堆的移位操作。搞明白了这个大概也就能知道它是什么用途了。
虚心求教。。。。
/////////////
// E4BC
PUSH.W R6
// E4BE
MOV.W R13 , R6
// E4C0
ADD.W R6 , R6
// E4C2
CMP.W #0xFF01 , R6
// E4C6
JC 0xE5A4
// E4C8
MOV.W R15 , R6
// E4CA
ADD.W R6 , R6
// E4CC
CMP.W #0xFF01 , R6
// E4D0
JC 0xE4EA
// E4D2
MOV.W R15 , R6
// E4D4
AND.W #0x8000 , R6
// E4D8
XOR.W R6 , R13
// E4DA
MOV.W R13 , R6
// E4DC
ADD.W R6 , R6
// E4DE
CMP.W #0xFF00 , R6
// E4E2
JNZ 0xE4EE
// E4E4
MOV.W R15 , R6
// E4E6
ADD.W R6 , R6
// E4E8
JNZ 0xE5A4
// E4EA
MOV.W #FFFF , R13
// E4EC
JMP 0xE5A4
// E4EE
MOV.W R15 , R6
// E4F0
ADD.W R6 , R6
// E4F2
CMP.W #0xFF00 , R6
// E4F6
MOV.W #0x7FFF , R6
// E4FA
JNZ 0xE50C
// E4FC
BIT.W R6 , R13
// E4FE
JZ 0xE4EA
// E500
AND.W #0x8000 , R13
// E504
BIS.W #0x7F80 , R13
// E508
MOV.W #0 , R12
// E50A
JMP 0xE5A4
// E50C
BIT.W R6 , R13
// E50E
JZ 0xE5A4
// E510
BIT.W R6 , R15
// E512
JNZ 0xE518
// E514
BIC.W R6 , R13
// E516
JMP 0xE508
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
// E518
PUSH.W R10
// E51A
PUSH.W R11
// E51C
PUSH.W R8
// E51E
MOV.W R12 , R10
// E520
MOV.W R13 , R11
// E522
BIS.W #0x80 , R11
// E526
ADD.W R13 , R13
// E528
SWPB R13
// E52A
MOV.B R13 , R8
// E52C
MOV.W #0 , R12
// E52E
MOV.W #0 , R13
// E530
MOV.W #0 , R6
// E532
CMP.W #0 , R14
// E534
JZ 0xE550
// E536
MOV.W #1 , R6
// E538
CMP.B #0 , R14
// E53A
JNZ 0xE540
// E53C
SWPB R6
// E53E
SWPB R14
// E540
RRC.W R14
// E542
JLO 0xE548
// E544
ADD.W R10 , R12
// E546
ADDC.B R11 , R13
// E548
RRC.B R13
// E54A
RRC.W R12
// E54C
ADDC.W R6 , R6
// E54E
JLO 0xE540
// E550
MOV.W #2 , R6
// E552
JZ 0xE556
// E554
BIS.W #1 , R6
// E556
RRC.W R15
// E558
JLO 0xE55E
// E55A
ADD.W R10 , R12
// E55C
ADDC.B R11 , R13
// E55E
RRC.B R13
// E560
RRC.W R12
// E562
ADDC.B R6 , R6
// E564
JLO 0xE556
// E566
AND.W #0xFF , R15
// E56A
ADD.W R15 , R8
// E56C
SUB.W #0x7F , R8
// E570
JN 0xE5BC
// E572
CMP.W #0xFF , R8
// E576
JGE 0xE5C0
// E578
ADD.W R10 , R12
// E57A
ADDC.B R11 , R13
// E57C
JLO 0xE5A8
// E57E
ADD.W #1 , R8
// E580
CMP.B #FFFF , R8
// E582
JZ 0xE5C0
// E584
ADD.W R11 , R11
// E586
RRC.B R8
// E588
RRC.B R13
// E58A
SWPB R8
// E58C
BIS.W R8 , R13
// E58E
RRC.W R12
// E590
JLO 0xE59E
// E592
CMP.W #0 , R6
// E594
JNZ 0xE59A
// E596
BIT.W #1 , R12
// E598
JZ 0xE59E
// E59A
ADD.W #1 , R12
// E59C
ADDC.W #0 , R13
// E59E
POP.W @R1+ , R8
// E5A0
POP.W @R1+ , R11
// E5A2
POP.W @R1+ , R10
// E5A4
POP.W @R1+ , R6
// E5A6
RET
//
// E5A8
CMP.W #0 , R8
// E5AA
JZ 0xE5B4
// E5AC
RRA.W R6
// E5AE
ADDC.W R12 , R12
// E5B0
ADDC.B R13 , R13
// E5B2
JMP 0xE584
// E5B4
CMP.B #FFFF , R13
// E5B6
JNZ 0xE5BC
// E5B8
CMP.W #FFFF , R12
// E5BA
JZ 0xE584
// E5BC
MOV.W #0 , R13
// E5BE
JMP 0xE5C4
// E5C0
MOV.W #0xFF00 , R13
// E5C4
ADD.W R11 , R11
// E5C6
RRC.W R13
// E5C8
MOV.W #0 , R12
// E5CA
JMP 0xE59E |