2014年8月份嵌入式开发培训课件代码_第1页
2014年8月份嵌入式开发培训课件代码_第2页
2014年8月份嵌入式开发培训课件代码_第3页
2014年8月份嵌入式开发培训课件代码_第4页
2014年8月份嵌入式开发培训课件代码_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

数据传送(MOV算术运算(ADDADCSUBSBCRSBRSC)位运算(ANDORREORBIC)比较测试(CMPCMNTST器 (先操作(,加载),后增加地址^:PC,CPSR寄存器列表中没有PC,模式使用用多寄存器加载指 LDM{cond}{addressing_mode}Rb{!},<Reglist>{^} R0,{R0-R0(基址)表示内容,加载到R0R1,多寄存器指令STM{cond}{addressing_mode}Rb{!},<Reglist>{^}当寄存器列表包含PC时,CPSR=SPSR R0!, 当寄存器列表中不包含PC时,则模LDMIA/ IncrementLDMIB/ IncrementLDMDA/ DecrementLDMDB/ DecrementSTMIAR10,{R0,R1,R4}STMIBR10,{R0,R1,R4}STMDAR10,{R0,R1,R4}STMDBR10,{R0,R1, R0!,{R1,R2,R3,R4}R1=2R2=R3=R4=5R0=0xLDMIAR0!,{R1,R2,R3,R4}Descendingstacks(减栈)Ascendingstacks Fullstacks(满栈)Emptystacks(空栈综合以上两种特点,有以下4种栈 ED(EmptyDescending) EA(EmptyAscending) FullDescendingstack[多寄存器 -STMDB] FullDescendingstack[多寄存器加载-LDMIA] 根据满减栈原则,先减地址,栈,高MRS指令语法格式 condRd目标寄存器(不能是Psr程序状态寄存器MRS{<cond>}<Rd>,CPSRMRS{<cond>}<Rd>, R0,CPSR ;将CPSR状态寄存器读取,保存到R0中 R1,SPSR ;SPSR状态寄存器读取,保存到R1中MSR程序状态寄存器写指令MSR{<cond>}CPSR_<fields>,MSR{<cond>}CPSR_<fields>,MSR{<cond>}SPSR_<fields>,MSR{<cond>}SPSR_<fields>,c控制域字节x扩展域字节s状态域字节f标志域字节(psr[31..24])immediate_8:8位图立即数 R0, Readthe R0,R0,@CleartheN,Z,CandV CPSR_f, UpdatetheflagbitsintheZ,CandVflagsnowall

@ R0, the R0,R0,#0x80 @Settheinterruptdisablebit CPSR_c, Updatethecontrolbitsinthe@interrupts(IRQ)now R0, the R0,R0,#0x1F @Clearthemodebits R0,R0, @themodebitstoFIQUpdatethecontrolbitsintheCPSR_c,@inFIQ CPSR_c,

@FIQ,TARM状态,中断都IFTMode需要改成一个确ARM伪指令不属于ARMARM汇编程序设计变ARM伪指令可以像其他ARM指令一样使汇编器会自动用一条或多条ARMARM 小范围地址加载伪指令ADR{cond}register,exprexpr:地址表达式(pc或寄存器+/-1020bytes(255×4) R1, 伪指令MOV令地址给 R0,0x20ADD R1,PC,#0x3c0x64 R0,伪指令 register,exprexpr:地址表达式(pc或寄存器-256K~256K地址非字对齐时:-64K~64K register,=[expr| 据的地址R1=&(0x R0,[R1].word .word的空操作,比如可能是“MOVR0,R0”指令等。NOP可用于延时操作。 MOV MOVR0,R0 movr1,r0 @主程序test.s示例 到.text段.global @全局标 r0,r0,r1 movpc, 伪操作作用,汇编结束,伪操作作用。GNUARM环境下主要的伪操作 symbol, TEST_NUM,全局常量伪操作.global或.globl.global symbol为要的全局变量名称 symbol为要的外部变量名称 exprexpr… 半字定义.hword或.short expr{,expr.shortexprexpr…expr.wordexpr{,expr expr{,expr exprexpr… .word字符串定义.ascii和.asciz或.string exprexpr exprexpr .stringexpr{,expr}… .asciz.spacesize{, size{, 从yy1024.code.codeGNUARM预定义的段.code.globalmystrcmpldrbr2,[r1],#1ldrbr3,[r0],#1cmpr2,#0beqmystrcmpbxlr voidmystrcmp(char *d,constchar*s);int{charbuf[256];mystrcmp(buf,“ledon”); }C程序要调用这个汇编函数,这个函 voidmystrcmp(char *d,constchar*s);C.globalyy.word汇编中将该变量位全局在C语言中为外部标 C汇编语言如何调用C add(inta,intb,intc,int{return}汇编程序中为外部 movr0,#1 movr1, movr2, movr3,#4 r0,汇编语言如何调用C C中变量为全局变汇编程序中为外部变 r0,=a r1,C替换成号的函数原型即清除bss段调用start.s文件BSS.code.global.extern

stmfdsp!,ldrr0,=bss_startldrr1,=endmovr2,#0strr2,[r0],#4cmpr0,r1bccclear_bssblldmfdsp!, makeclean管理模式SVC:5SVC PC=0x4软中断异常:执行SWI指令,SVC管理 PC=0x8 PC=0xC PC=0x10PC=0x18 PC=0x1CCPSRSPSR_mode=CPSRARMCPSRT的异常模式,改CPSR的mode[4:0]设置中断位,相应的中保存返回地址到 PC为相应的异常向量的地址subr1,r1,swi1 addr0,r0,#0x1 r0,r0, ,执行,在swi指令的执行阶Tmodelr=PC–4(PC= 6.PC=add r1,r1,#0x5abc#3 addr0,r0,#0x1 r0,r0, ,执行,当在执行abc指令阶PC=lr=PC-4= pc, CPSR=FIQ r1,r1,#0x5addr0,r0,#0x1 r0,r0,#0xF0cmpr0,r1Sub执行时,来了中断,虽然来了中断,先将sub指令执行完 lr, CPSR= r1,r1,#0x5addr0,r0,#0x1 r0,r0,#0xF0cmpr0,r11.sub取指,根本没有取到,直到执行2.PC=3.lr

温馨提示

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

评论

0/150

提交评论