这里是学习过的过程,所以线写一个简单的C代码,下载进单片机,正常运行
项目为LED的闪烁
上代码
#include<STC15.h>
//ms delay
void Delayms(unsigned int ms) //@11.0592MHz
{
unsigned int i, j;
for(i=0;i<ms;i++)
for(j=0;j<990;j++);
}
main()
{
P3M1 = 0X00;
P3M0 = 0X30;
P34=0;
P35=1;
while(1)
{
Delayms(1000);
P34=~P34;
}
}
下载进单片机,led指示灯闪烁
看下源代码
02 00 38 E4 FD FC C3 ED 9F EC 9E 50 15 E4 FB FA
0B BB 00 01 0A BA 03 F8 BB DE F5 0D BD 00 01 0C
80 E4 22 E4 F5 B1 75 B2 30 C2 B4 D2 B5 7F E8 7E
03 12 00 03 B2 B4 80 F5 78 7F E4 F6 D8 FD 75 81
07 02 00 23 00
把此代码保存为bin,用ida打开
代码到41,就完毕了,对反汇编代码进行整理,这里有的变量没有定义,需要处理掉这些变量,使汇编不报错,就OK了.
下面是汇编,asm,编译正常,
附上汇编代码 ,下面的地址编号,知识一个编号,没有过多的整理, 如果大家感兴趣可以对照C语言去整理一下,
如果是汇编写的代码,在来逆向的话,思路会清晰很多,下个案例我用汇编写,再手工逆出来,对比一下,这样学习
org 0000
code_RESET:
ljmp RESET_0
delayms:
clr A
mov R5, A
mov R4, A
code_6:
clr C
mov A, R5
subb A, R7
mov A, R4
subb A, R6
jnc code_22
clr A
mov R3, A
mov R2, A
code_10:
inc R3
cjne R3, #0, code_15
inc R2
code_15:
cjne R2, #3, code_10
cjne R3, #0xDE, code_10
inc R5
cjne R5, #0, code_20
inc R4
code_20:
sjmp code_6
code_22:
ret
wmain:
clr A
mov 0xb1, A ;
mov 0xb2, #0x30
clr P3.4
setb P3.5
while_:
mov R7, #0xE8
lcall delayms
cpl P3.4
sjmp while_
RESET_0:
mov R0, #0x7F
clr A
code_3B:
mov @R0, A
djnz R0, code_3B
mov SP, #7
ljmp wmain
end