单机编程c语言,C语言与单机-22-循环for编译器实现

for语句功能如此强大,为了建议不了解for语句的实现的原理。我们参考一下keil实现方法。通过观察keil的汇编结果来了解for.    为了观察for语句的框架,我们尽可能把程序写的简单。

#include

#include

int main( )

{

volatile char m=0;

volatile char n=0;

for(m=0;m<100;m++)

n=m;

return 0;

}

我们来看一下keil汇编结果

5: int main( )

6: {

7:

8:    volatile char m=0;

C:0x0003    E4       CLR      A

C:0x0004    F508     MOV      0x08,A

9:    volatile char n=0;

10:

C:0x0006    F509     MOV      0x09,A

11:    for(m=0;m<100;m+=2)

C:0x0008    F508     MOV      0x08,A

C:0x000A    C3       CLR      C

C:0x000B    E508     MOV      A,0x08

C:0x000D    6480     XRL      A,#P0(0x80)

C:0x000F    94E4     SUBB     A,#0xE4

C:0x0011    5009     JNC      C:001C

12:          n=m;

C:0x0013    850809   MOV      0x09,0x08

C:0x0016    0508     INC      0x08

C:0x0018    0508     INC      0x08

C:0x001A    80EE     SJMP     C:000A

13:   return 0;

C:0x001C    E4       CLR      A

C:0x001D    FE       MOV      R6,A

C:0x001E    FF       MOV      R7,A

14: }

C:0x001F    22       RET

我们逐行来分析

我们来看一下keil汇编结果

5: int main( )

6: {

7:

8:    volatile char m=0;

C:0x0003    E4       CLR      A

C:0x0004    F508     MOV      0x08,A   //0x08地址(m)存储内容清0

9:    volatile char n=0;

10:

C:0x0006    F509     MOV      0x09,A //0x09地址(n)存储内容清0

11:    for(m=0;m<100;m+=2)

C:0x0008    F508     MOV      0x08,A   //0x08地址(m)存储内容清0

C:0x000A    C3       CLR      C         //CY(借位)标志清零

C:0x000B    E508     MOV      A,0x08     //0x08地址(m)存储内容移入A寄存器

C:0x000D    6480     XRL      A,#P0(0x80)//A^0x80结果存入A寄存器(最高位置1)

C:0x000F    94E4     SUBB     A,#0xE4    //A寄存器值减去0xe4,结果移入A

C:0x0011    5009     JNC      C:001C     //是否借位,如果借位转至0x001C

12:          n=m;

C:0x0013    850809   MOV      0x09,0x08//m值移入n

C:0x0016    0508     INC      0x08      //m++

C:0x0018    0508     INC      0x08      //m++

C:0x001A    80EE     SJMP     C:000A    转至0x000A

13:   return 0;

C:0x001C    E4       CLR      A

C:0x001D    FE       MOV      R6,A

C:0x001E    FF       MOV      R7,A

14: }

C:0x001F    22       RET

我们可以明显观察到初始化、比较、跳转、更新条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值