ARM汇编转C语言
本帖最后由 wglzp123456 于 2019-6-15 19:21 编辑//ARM汇编代码
0894 B570 PUSH {R4-R6,LR}
0896 4938 LDR R1,D00000978; R1=0x20000FA8
0898 2200 MOVS R2,#0x0
089A 2404 MOVS R4,#0x4
089C F891 5041 LDRB.W R5,
08A0 2301 MOVS R3,#0x1
08A2 2D05 CMP R5,#5
08A4 D262 BCS Q0000096C
08A6 E8DF F005 TBB
08AA DB03
DB25
08AC DB3B
DB44
DB59
DB00
//0---------------------------------------------------
08B0 F5A0 42AA SUB.W R2,R0,#0x5500
08B4 3AAA SUBS R2,#0xAA
08B6 D00F BEQ Q000008D8
08B8 3A11 SUBS R2,#0x11
08BA D11A BNE Q000008F2
08BC F891 2086 LDRB.W R2,
08C0 2A00 CMP R2,#0
08C2 D116 BNE Q000008F2
08C4 F881 408A STRB.W R4,
08C8 F8A1 0066 STRH.W R0,
08CC F881 3087 STRB.W R3,
08D0 F8A1 0088 STRH.W R0,
08D4 2003 MOVS R0,#0x3
08D6 E01D B Q00000914
08D8 F891 2062 LDRB.W R2,
08DC 2A00 CMP R2,#0
08DE D108 BNE Q000008F2
08E0 F881 408A STRB.W R4,
08E4 F821 0F42 STRH.W R0,!
08E8 F881 3021 STRB.W R3,
08EC 8448 STRH R0,
08EE F801 3C01 STRB.W R3,
08F2 BD70 POP {R4-R6,PC}
//1--------------------------------------------------
08F4 F891 2063 LDRB.W R2,
08F8 EB01 0342 ADD.W R3, R1,R2,LSL #1
08FC 1C52 ADDS R2,R2,#1
08FE F8A3 0042 STRH.W R0,
0902 F8B1 3064 LDRH R3,
0906 B2D2 UXTB R2,R2
0908 4418 ADD R0,R3
090A F8A1 0064 STRH.W R0,
090E 2A0F CMP R2,#15
0910 D303 BCC Q0000091A
0912 2002 MOVS R0,#0x2
0914 F881 0041 STRB.W R0,
0918 BD70 POP {R4-R6,PC}
091A F881 2063 STRB.W R2,
091E BD70 POP {R4-R6,PC}
//2---------------------------------------------------
0920 F8B1 4064 LDRH R4,
0924 4284 CMP R4,R0
0926 D121 BNE Q0000096C
0928 F8A1 0060 STRH.W R0,
092C F881 3062 STRB.W R3,
0930 E01C B Q0000096C
//3----------------------------------------------------
0932 F891 2087 LDRB.W R2,
0936 EB01 0342 ADD.W R3, R1,R2,LSL #1
093A 1C52 ADDS R2,R2,#1
093C F8A3 0066 STRH.W R0,
0940 F8B1 3088 LDRH R3,
0944 B2D2 UXTB R2,R2
0946 4418 ADD R0,R3
0948 F8A1 0088 STRH.W R0,
094C 2A0F CMP R2,#15
094E D302 BCC Q00000956
0950 F881 4041 STRB.W R4,
0954 BD70 POP {R4-R6,PC}
//---------------------------------------------------
0956 F881 2087 STRB.W R2,
095A BD70 POP {R4-R6,PC}
//4-----------------------------------------------------
095C F8B1 4088 LDRH R4,
0960 4284 CMP R4,R0
0962 D103 BNE Q0000096C
0964 F8A1 0084 STRH.W R0,
0968 F881 3086 STRB.W R3,
096C F881 208A STRB.W R2,
0970 F881 2041 STRB.W R2,
0974 BD70 POP {R4-R6,PC}
//-----------------------------------------------------------------
对应的C语言如下
u16 x2,x3,x4;
u8x5;
x2=0;
x4=4;
x5=uxD0FA8.u841;
x3=1;
switch(x5){
case 0:
if(u16a==0x55AA){
if(uxD0FA8.u886==0){
uxD0FA8.u88A=x4;
uxD0FA8.u1666=u16a;
uxD0FA8.u887=x3;
uxD0FA8.u1688=u16a;
uxD0FA8.u841=3;
}
}else if(u16a==0x55BB){
if(uxD0FA8.u862==0){
uxD0FA8.u88A=x4;
uxD0FA8.u1642=u16a;
uxD0FA8.u863=x3;
uxD0FA8.u1664=u16a;
uxD0FA8.u841=x3;
}
}
break;
case 1:
x2=uxD0FA8.u863;
uxD0FA8.u1642=u16a;
uxD0FA8.u1664+=u16a;
if(x2>=15){
uxD0FA8.u841=2;
}else{
uxD0FA8.u863=x2;
}
break;
case 2:
if(uxD0FA8.u1664==u16a){
uxD0FA8.u1642=u16a;
uxD0FA8.u862=x3;
}
uxD0FA8.u88A=x2;
uxD0FA8.u841=x2;
break;
case 3:
x2=uxD0FA8.u887;
uxD0FA8.u1666=u16a;
uxD0FA8.u1688+=u16a;
if(x2>=15){
uxD0FA8.u841=x4;
}else{
uxD0FA8.u887=x2;
}
break;
case 4:
x4=uxD0FA8.u1688;
if(x4==u16a){
uxD0FA8.u1666=u16a;
uxD0FA8.u886=x3;
}else{
uxD0FA8.u88A=x2;
uxD0FA8.u841=x2;
}
break;
default:
break;
}
呵呵, 好象很强劲的样子, 不过这样的 C 代码, 还是很难读懂啊 C代码有点乱了,不过这是用啥软件把汇编转为C了,软件挺不错的 本帖最后由 wglzp123456 于 2019-6-15 19:13 编辑
lihui567 发表于 2019-6-15 17:31
C代码有点乱了,不过这是用啥软件把汇编转为C了,软件挺不错的
用脑代把汇编转为C 不知道说些什么 c语言如果这样写, 自己看还行。 别人来看 没注释 风格也乱,最关键变量命名很糟糕。 还有c语言里面switch case, 一般汇编都是addls 对应 更为直观。
页:
[1]