探究下i--和--i在keil下编译c与汇编的区别

探究下i--和--i在keil下编译c与汇编的区别

下面是c编写

#include<reg51.h>
void delay1(char i)
{	while(i--);
}
void delay2(char j)
{	while(j--);
}
void main()
{
	while(1)
	{
	P1=0;
	delay1(1);
	P1=1;
	delay2(2);
	}
}

下面是汇编后程序

C:0x0000    020015   LJMP     C:0015
     8: void main() 
     9: { 
    10:         while(1) 
    11:         { 
    12:         P1=0; 
C:0x0003    E4       CLR      A
C:0x0004    F590     MOV      P1(0x90),A
    13:         delay1(1); 
C:0x0006    7F01     MOV      R7,#0x01
C:0x0008    120021   LCALL    delay1(C:0021)
    14:         P1=1; 
C:0x000B    759001   MOV      P1(0x90),#0x01
    15:         delay2(2); 
C:0x000E    7F02     MOV      R7,#0x02
C:0x0010    120028   LCALL    delay2(C:0028)
    16:         } 
C:0x0013    80EE     SJMP     main(C:0003)
C:0x0015    787F     MOV      R0,#0x7F
C:0x0017    E4       CLR      A
C:0x0018    F6       MOV      @R0,A
C:0x0019    D8FD     DJNZ     R0,C:0018
C:0x001B    758107   MOV      SP(0x81),#0x07
C:0x001E    020003   LJMP     main(C:0003)
     2: void delay1(char i) 
     3: {       while(i--); 
C:0x0021    AE07     MOV      R6,0x07
C:0x0023    1F       DEC      R7
C:0x0024    EE       MOV      A,R6
C:0x0025    70FA     JNZ      delay1(C:0021)
     4: } 
C:0x0027    22       RET      
     5: void delay2(char j) 
     6: {       while(--j); 
C:0x0028    DFFE     DJNZ     R7,delay2(C:0028)
     7: } 
C:0x002A    22       RET      

i是放在ax寄存器,如果是i++就是先把内容取出来,放在寄存器,然后再增加;而++i则是先增加再写入ax寄存器,送显示是送ax寄存器的内容。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值