- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章程序设计7
第4章 程序设计 §4.1 汇编语言程序设计 [例4.1] 程序每隔一段时间从A口输出数据,驱动LED亮。 数制及数据类型 μ’nSPTM算符及优先次序 全局标号与局部标号 标号 是一种符号地址。是指令或数据的起始地址。 全局标号 各程序段都能调用。以字母或“_”开头,以“:”结束。 局部标号 只在该程序段调用。以“?”为前缀或后缀。 汇编语言程序举例 [例4.3] 程序每隔一段时间从A口输出数据,驱动LED亮。 [例4.4] 冒泡排序 关于子程序 子程序的结构 子程序名 .PROC 程序体 RETF .ENDP 现场保护-返回地址、寄存器。 参数传递 通过寄存器传递—R1~R4 通过变量传递—不同文件使用变量时,PUBLIC声明全局变量,使用此变量的其它文件,应该用EXTERNAL声明为外部变量。 通过堆栈传递 [例4.5] 求32位符号数的绝对值。 §4.2C语言程序设计 关于GCC GCC对ANSI-C基本数据类型的支持 [例4.6]用C语言编写用IO控制闪灯程序 §4.3 C和汇编混合编程 §4.3.2 C与汇编语言的交叉调用 C语言调用汇编程序 [例4.11] [例4.12]在IOA口上以2S的速率闪烁 汇编语言程序调用C函数 作业 本章小节 §4.3.1C语言的在线汇编 指令格式 asm (“汇编指令模板”:输出参数:输入参数:clobbers参数); 例、 asm (“%0+=%1” :“+r”(foo):“r”(bar)); 汇编指令摸板 说明当前汇编指令。如, “%0+=%1” : 其中%0 、 %1为形参,数字为冒号后操作数序号。将分别被输入输出参数替代。 操作数—上例中, (foo)、 (bar) 约束符—上例中, “+r” 、“r” 在线汇编举例 汇编程序调用C语言 * .INCLUDE handware.inc .RAM .VAR R_LedCounter; .VAR R_DelayCounter; .CODE .PUBLIC _main; _main: R1=0xFFFF; [P_IOA_Dir]=R1; [P_IOA_Attrib]=R1; R1=0x0000; [P_IOA_Data]=R1; [R_LedCounter]=R1; L_MainLoop: R1= [R_LedCounter]; [P_IOA_Data]=R1; R1= [R_LedCounter]; R1+=1; [R_LedCounter]=R1; R1=0; [R_DelayCounter]=R1; CALL F_Delay; JMP L_MainLoop; 用单或双引号括起来 ASCII字符串 H后缀或0x、$前缀 十六进制 D/无后缀 十进制 O/Q后缀 八进制 B后缀 二进制 数的表示 数制 IEEE格式浮点数 64 双精度(DOUBLE) IEEE格式浮点数 32 单精度(FLOAT) -2147483648 ~ +2147483647 0-4294967295 32 双字(DD) -32768 ~ +32767 0-65535 16 字(DW) 符号数 无符号数 位数 数据类型 ||、 ^或xor、或and、|或or !=、= = 、=、、= 、 -、+ %、/、* -、+ not、~、! 运算符 逻辑算符-真/假 按位操作 右移、左移 加减运算符 正负操作符 逻辑算符-真/假 说明 优先级 .INCLUDE handware.inc .RAM .VAR R_LedCounter; .VAR R_DelayCounter; .CODE .PUBLIC _main; _main: R1=0xFFFF; //PIOA口为同相低电平输出 [P_IOA_Dir]=R1; [P_IOA_Attrib]=R1; R1=0x0000; [P_IOA_Data]=R1; [R_LedCounter]=R1; //清变量R_LedCounter 什么寻址方式? L_MainLoop: R1= [R_LedCounter]; //从变量R_LedCounter处获取 [P_IOA_Data]=R1; //显示值,显示。 R1= [R_LedCounter]; //修改变量R_LedCounter, R1+=1; [R_LedCounter]=R1; //使变量R_LedCounter加1。 R1=0; [R_DelayCounter]=R1; //清变量R_DelayCounter CALL F_Delay; JMP L_MainLoop; L
文档评论(0)