文稿案例讲稿_第1页
文稿案例讲稿_第2页
文稿案例讲稿_第3页
文稿案例讲稿_第4页
文稿案例讲稿_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

数据传送(MOV算术运算(ADDADCSUBSBCRSBRSC)位运算(ANDORREORBIC)比较测试(CMPCMNTST器IA(先操作(,加载),后增加地^:寄存器列表有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, R1=2R0!,{R1,R2=R3=R4=R0=R0!,{R1,Descendingstacks(减栈)Ascendingstacks Fullstacks(满栈)Emptystacks(空栈综合以上两种特点,有以下4种栈 ED(EmptyDescending) EA(EmptyAscending) FullDescendingstack[多寄存器 -STMDB] FullDescendingstack[多寄存器加载-LDMIA] 根据满减栈原则,先减地址,栈,高 cond条件码Rd目标寄存器(不能是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, Updatetheflagbitsinthe@N,Z,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指令一样使 ADR{cond}register,exprexpr:地址表达式(pc或寄存器)+/-1020bytes(255×4) R1 伪指令将MOV R0,0x20ADD R1,PC,#0x3c0x64 R0,伪指令 registerexprexpr:地址表达式(pc或寄存器)-256K~256K地址非字对齐时:-64K~64K register,=[expr| 取.word数据的地址R1=&(0x R0,[R1].word .wordNOP伪指令在汇编时将会被代替成ARM中的空操作,比如可能是“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字定义.word或.int或.long.wordexpr{,expr expr{,expr exprexpr… .word字符串定义.ascii和.asciz或.string exprexpr exprexpr .stringexpr{,expr}… .asciz固定填充字节内存单元定义.space或.skip.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);.globalyy.word C add(inta,intb,intc,int{return} movr0,#1 movr1, movr2, movr3,#4 r0, r0,=a r1,清除bss段start.s文件BSS.code.global.extern

stmfdsp!,ldrr0,= ldrr1,= movr2,#0strr2,[r0],#4cmpr0,r1bccclear_bssblldmfdsp!, makeclean管理模式SVC: PC=0x4软中断异常:执行SWI指令,SVC管理 PC=0x8 PC=0xC PC=0x10PC=0x18 PC=0x1CSPSR_mode=CPSRCPSRT的异常模式,改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

提交评论