电子科大-微机原理课件-第8章.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:56 大小:1.9MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

电子科大-微机原理课件-第8章.pdf

电子科大-微机原理课件-第8章.pdf

预览

免费试读已结束,剩余 46 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

ARM汇编指令书写格式ARM采用三地址指令格式:<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}其中<>号内的项是必须的,{}号内的项可选。opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器;Rn:第1个操作数的寄存器;operand2:第2个操作数(#immed_8r、Rm、Rm,shift);指令语法目标寄存器(Rd)源寄存器1(Rn)源寄存器2(Rm)ADDr3,r1,r2r3r1r22012-1-211/95ARM指令中的第2操作数常数#immed_8r由一个8位常数通过循环右移偶数位得到:000000000000000000000000000100100x000x000x000x128位常数循环右移10位000001001000000000000000000000000x040x800x000x00Rm,shift由Rm移位得到。移位不消耗额外时间,且Rm值不变。LSL0RnRm未0预LSR预桶形移位器处处理ASR理结果NRORALUC2012-1-21RdRRX桶形移位器的操作助记符功能表达式操作Y值LSL逻辑左移xLSLyX<<y#0~31orRsLSR逻辑右移xLSRy(unsigned)x>>y#1~32orRsASR算术右移xASRy(signed)x>>Y#1~32orRs循环逻辑((unsigned)x>>RORxRORy#1~31orRs右移y|(x<<32-y))扩展循环(cflag<<31)RRXxRRXynone右移|((unsigned)x>>1)ADDR1,R1,R1,LSL#3;R1=R1+R1<<3SUBR1,R1,R2,LSRR3;R1=R1-R2>>R32012-1-213/95ARM机器指令编码格式ARM指令条件码cond操作码条件助记符标志含义0000EQZ=1相等1.所有的ARM0001NEZ=0不相等0010CS/HSC=1无符号数大于或等于指令都可以条0011CC/LOC=0无符号数小于件执行,而0100MIN=1负数Thumb指令只0101PLN=0正数或零有B(跳转)0110VSV=1溢出指令具有条件0111VCV=0没有溢出1000HIC=1,Z=0无符号数大于执行功能。1001LSC=0,Z=1无符号数小于或等于1010GEN=V有符号数大于或等于2.如果指令不1011LTN!=V有符号数小于标明条件代码,1100GTZ=0,N=V有符号数大于将默认为无条1101LEZ=1,N!=V有符号数小于或等于件(AL)执行1110AL任何无条件执行(指令默认条件)1111NV任何从不执行(不要使用)5/95ARM处理器寻址方式寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有几种基本寻址方式:1.寄存器寻址2.立即寻址3.寄存器间接寻址移位寻址、间接寻址、基址变址寻址、多寄存器寻址(块寻址)4.堆栈寻址5.相对寻址6/95寄存器寻址1.操作数存放在寄存器中;2.指令地址码字段给出寄存器编号(名);3.指令执行时直接取出寄存器值来操作;R20xAAMOVR1,R2R100xxA5A5;R1<=R2SUBR0,R1,R2;R0<=R1-R22012-1-217/95立即寻址1.操作数包含在指令当中;2.指令地址码部分就是数据本身;3.取指时就取出了可立即使用的操作数;寄存器寻址MOVR0,#0xFF00;R0<=#0xFF00MOVR0,#0xFF00从代码中获得数据R000xFxF5500SUBSR0,R0,#1;R0<=R0-1影响标志位10进制数:#21,#0d572进制数:#0b01100进制数:2012-1-2116#0x3a0018/95寄存器移位寻址1.操作数存放在寄存器中;2.指令地址码字段给出寄存器编号(名)及移位表达式;3.指令执行时取出寄存器值并移位,再将结果作为源操作数;寄存器寻址MOVR0,R2,LSL#3;R0<=R2×8逻辑左移3位LSL、LSRR20x010x08ASRR00x5058ROR、RRXANDSR1,R1,R2,LSLR3影响标志位;R1<=R1and(R2<<R3)寄存器间接寻址1.操作数存放在内存单元中;2.指令地址码字段给出[寄存器编号(名)];3.指令执行时根据寄存器值(指针)找到相应的存储单元;LDRR1,[R2];R1<=[R2