for语句功能如此强大,为了建议不了解for语句的实现的原理。我们参考一下keil实现方法。通过观察keil的汇编结果来了解for. 为了观察for语句的框架,我们尽可能把程序写的简单。#include#includeint 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 AC: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,AC:0x000A C3 CLR CC:0x000B E508 MOV A,0x08C:0x000D 6480 XRL A,#P0(0x80)C:0x000F 94E4 SUBB A,#0xE4C:0x0011 5009 JNC C:001C 12: n=m; C:0x0013 850809 MOV 0x09,0x08C:0x0016 0508 INC 0x08C:0x0018 0508 INC 0x08C:0x001A 80EE SJMP C:000A 13: return 0; C:0x001C E4 CLR AC:0x001D FE MOV R6,AC: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)存储内容清0C: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,结果移入AC:0x0011 5009 JNC C:001C //是否借位,如果借位转至0x001C 12: n=m; C:0x0013 850809 MOV 0x09,0x08//m值移入nC: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 AC:0x001D FE MOV R6,AC:0x001E FF MOV R7,A 14: }C:0x001F 22 RET 我们可以明显观察到初始化、比较、跳转、更新条件。
导读:目前正在解读《C语言与单机--循环for编译器实现》的相关信息,《C语言与单机--循环for编译器实现》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言与单机--循环for编译器实现》的详细说明。
简介: for语句功能如此强大,为了建议不了解for语句的实现的原理。我们参考一下keil实现方法。通过观察keil的汇编结果来了解for. 为了观察for语句的框架,我们尽可能把程序写的简单。
提醒:《C语言与单机--循环for编译器实现》最后刷新时间 2024-03-14 01:04:27,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言与单机--循环for编译器实现》该内容的真实性请自行鉴别。