嵌入式arm课件程序设计_第1页
嵌入式arm课件程序设计_第2页
嵌入式arm课件程序设计_第3页
嵌入式arm课件程序设计_第4页
嵌入式arm课件程序设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

GNUARM程序设ARM体系结构与编本节内GNUARM汇编编程语GNUARM操GNUARM编程序举GNUGNU

汇编、连C语言和汇编语言混合编GNUARM编语法格–instruction:指令 –pseudo-instruction:伪指令–<label>:为标号,comment movr1 @主程本节内GNUARM汇编编程语GNUARM操GNUARM编程序举GNUGNU

汇编、连C语言和汇编语言混合编汇编语言伪操伪操作汇编语言程序里的一些特殊的助记为编程方便,完成一些辅助功能的操在对汇编源程序进行汇编过程中由汇编 GNUARM汇编伪操主要的GNUARM环境下的伪操符 符号定义伪操语法格式

symbol,exprsymbol, 符号定义伪操常量定义伪操作 symbol, 符号定义伪操 全局常量伪操作.global或语法格式.global symbol为 的全局变量名符号定义伪操 外部常量伪操作语法格式.extern 为 的外部变量名数据定义伪操1.字节定义语法格式其中

expr{,expr 数字表达式或程序中的标数据定义伪操2.半字定义.hword或语法格式.hwordexpr{,expr其中

expr{,expr 数字表达式或程序中的标数据定义伪操语法格式

expr{,expr}….expr{,expr}…expr{,expr}… 数据定义伪操语法格式

expr{,expr}…expr{,expr}…expr{,expr}… 数据定义伪操5.双字定义语法格式其中

expr{,expr 数字表达数据定义伪操6.四字定义语法格式其中

expr{,expr 数字表达数据定义伪操

expr{,exprexpr{,expr 为32IEEE数据定义伪操8.双精度浮点数定义语法格式.doubleexpr{,expr 为32位的IEEE单精度浮点o数据定义伪操语法格式.fillrepeat{,size}{,

数据定义伪操9.零填充字节内存单元定义语法格式.zero 所分配的0填充字节数据定义伪操

size{,value}size{, 数据定义伪操 数据缓冲池语法格汇编与反汇编代码控制伪操指令集类型标识伪操.code.code汇编与反汇编代码控制伪操段定义伪操作,语法格式如下.section<section_name>section_name称.text、.data、.bssflagsELF<Flag>可以是a可加载w可写 可执行汇编与反汇编代码控制伪操GNUARM预定义的具体的语法格式如目标文件中的汇编与反汇编代码控制伪操 {alignment}{,.balign{alignment}{,alignment是一个数值表达式,用于指定对齐 预定义控制伪操预定义控制伪操 程序代码段 预定义控制伪操 宏定义伪操作{macroname.endm预定义控制伪操3.文件包含伪操作.d伪操作用于将一个源文件包含到当.cd指语法格式.include本节内GNUARM汇编编程语GNUARM操GNUARM编程序举GNUGNU

汇编、连C语言和汇编语言混合编GNUARM编程序示test.s示例内 @指定代码放到.text.globaldo_sub 全局标subr0,r0,movpc,

本节内GNUARM汇编编程语GNUARM操GNUARM编程序举GNUGNU

汇编、连C语言和汇编语言混合编GNUARM具集汇编、连用arm-linux-as汇本节内GNUARM汇编编程语GNUARM操GNUARM编程序举GNUARM汇编、连GNU C语言和汇编语言混合编ARMC/C++和汇编混合编C/CC/C++汇编混 的内–C/C++汇编混 的方C和汇编相 的规则与实GNUARM嵌汇asmvolatile(“asm volatile(“asmoutput:input:–必须以‘;’结尾,不管有多长对C都只是一条语–举例int ("mov%[result],%[value],ror#1:[result=r”(y)/*移位结果:[value]“r”:/*无破坏描述

/*移位值 ("mov%0, ror#1":"=r"(result):"r"GNUARM嵌汇unsignedlong long{ volatile"eorr3,%1,%1,ror r3,r3,%0,%0,lsr:"=r"::return} asm 代替asm,volatile可以避免严格ANSIGNUARM嵌汇“asm“\n\t”分开。指令中的操作数可以使用占位符C"mov%[result],%[value],rorGNUARM嵌汇编例代asm"movr0,r0\n\t""movr0,r0\n\t""movr0,r0\n\t""movr0,r0" volatile "ldr%0,[%1]"str%2,[%1,#4]:"=&r":"r"(&table),"r":GNUARM内嵌汇输出部–C语言变量–[result]"=r"GNUARM嵌汇编例代asm"movr0,r0\n\t""movr0,r0\n\t""movr0,r0\n\t""movr0,r0" volatile "ldr%0,[%1]"str%2,[%1,#4]:"=&r":"r"(&table),"r":GNUARM嵌汇=+&GNUARM嵌汇f/h/G/H同G/I:ORRR0,R0,如:SWIoperandJ如:LDRR1PC如:SUBR0R0KLlM如:MOVR2R1ROR如:ADDR0SPmGNUARM嵌汇N/如:LSLR0R1O/如:ADDSP,#operandr/w/XGNUARM嵌汇输入部–[value]"r"GNUARM嵌汇破坏描述部GNUARM嵌汇unsignedlong long{ volatile"eorr3,%1,%1,ror r3,r3,%0,%0,lsr:"=r"::return} asm 代替asm,volatile可以避免严格ANSI规定寄存器使规定函数传参方规定栈使用方StackPointerLinkRegister

ATPCS(orAPCS)如果RWPI选项有效,作为栈 如果软件堆栈检查有寄存器使参数传 参数传ParameterPassing(4

ParameterPassing(6func1(inta,{0x000000lr,[sp,#-return0x000004}0x0000080x00000C:{}return:::0x0000200x0000000x0000240x0000040x0000280x0000080x00002C0x00000c0x0000300x000034

0x000038:0x00003C:0x000040:0x000044:

0x0000140x0000180x00001c0x0000140x0000180x00001c0x0000200x000024B参数传bbafx(inta,doubleb,intbbafx(inta,doubleb,intddcbbaacfz(doublea,doubleb,intc,doublebbcafy(inta,fz(doublea,doubleb,intc,doublebbcafy(i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论