




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在讲指令之前,先简单地介绍一下 Cortex-M3 中支持的算术与逻辑标志。本书 在后面还会展开论述。它们是:APSR 中的 5 个标志位nN:负数标志(Negative)nZ:零结果标志(Zero)nC:进位/借位标志(Carry)nnV: S:溢出标志(oVerflow)饱和标志(Saturation),它不做条件转移的依据4.2.1 分类指令表表4.2 16位数据操作指令名字功能ADC带进位加法ADD加法AND按位与(原文为逻辑与,有误译注)。这里的按位与和C的”&”功能相同ASR算术右移BIC按位清0(把一个数跟另一个无符号数的反码按位与)CMN负向比较(把一个数跟另一个数据的二进制补码相比较)CMP比较(比较两个数并且更新标志)CPY把一个寄存器的值拷贝到另一个寄存器中EOR近位异或LSL逻辑左移(如无其它说明,所有移位操作都可以一次移动最多31格译注)LSR逻辑右移MOV寄存器加载数据,既能用于寄存器间的传输,也能用于加载立即数MUL乘法MVN加载一个数的NOT 值(取到逻辑反的值)NEG取二进制补码ORR按位或(原文为逻辑或,有误译注)ROR圆圈右移SBC带借位的减法SUB减法TST测试(执行按位与操作,并且根据结果更新Z)REV在一个32 位寄存器中反转字节序REVH把一个32 位寄存器分成两个16 位数,在每个16 位数中反转字节序REVSH把一个32 位寄存器的低16 位半字进行字节反转,然后带符号扩展到32 位SXTB带符号扩展一个字节到32 位SXTH带符号扩展一个半字到32 位UXTB无符号扩展一个字节到32 位UXTH无符号扩展一个半字到32 位表4.3 16位转移指令名字功能B无条件转移B条件转移BL转移并连接。用于呼叫一个子程序,返回地址被存储在LR 中BLX #im使用立即数的BLX不要在CM3 中使用CBZ比较,如果结果为0 就转移(只能跳到后面的指令译注)CBNZ比较,如果结果非0 就转移(只能跳到后面的指令译注)IT If-Then表4.4 16位存储器数据传送指令名字功能LDR从存储器中加载字到一个寄存器中LDRH从存储器中加载半字到一个寄存器中LDRB从存储器中加载字节到一个寄存器中LDRSH从存储器中加载半字,再经过带符号扩展后存储一个寄存器中LDRSB从存储器中加载字节,再经过带符号扩展后存储一个寄存器中STR把一个寄存器按字存储到存储器中STRH把一个寄存器存器的低半字存储到存储器中STRB把一个寄存器的低字节存储到存储器中LDMIA加载多个字,并且在加载后自增基址寄存器STMIA存储多个字,并且在存储后自增基址寄存器PUSH压入多个寄存器到栈中POP从栈中弹出多个值到寄存器中16 数据传送指令没有任何新内容,因为它们是Thumb 指令,在v4T 时就已经定格了译注表4.5 其它16位指令名字功能SVC系统服务调用BKPT断点指令。如果使能了调试,则进入调试状态(停机)。否则的话产生调试监视器异常。在调试监视器异常被使能时,调用其服务例程;如果连调试监视器异常也被除能, 则无奈下只好诉诸于一个fault 异常NOP无操作CPSIE使能PRIMASK(CPSIE i)/ FAULTMASK(CPSIE f)清0 相应的位CPSID除能PRIMASK(CPSID i)/ FAULTMASK(CPSID f)置位相应的位表4.6 32位数据操作指令名字功能ADC带进位加法ADD加法ADDW宽加法(可以加12 位立即数)AND按位与(原文是逻辑与,有误。对应C 言的“|”运算符译注)ASR算术右移BIC位清零(把一个数按位取反后,与另一个数逻辑与)BFC位段清零BFI位段插入CMN负向比较(把一个数和另一个数的二进制补码比较,并更新标志位)CMP比较两个数并更新标志位CLZ计算前导零的数目EOR按位异或LSL逻辑左移LSR逻辑右移MLA乘加MLS乘减MOVW把16 位立即数放到寄存器的低16 位,高16 位清0MOV加载16 位立即数到寄存器(其实汇编器会产生MOVW译注)MOVT把16 位立即数放到寄存器的高16 位,低16 位不影响MVN移动一个数的补码MUL乘法ORR按位或(原文为逻辑或,有误译注)ORN把源操作数按位取反后,再执行按位或(原文为逻辑或,有误译注)RBIT位反转(把一个32 位整数用2 进制表达后,再旋转180 度译注)REV对一个32 位整数按字节反转REVH/REV16对一个32 位整数的高低半字都执行字节反转REVSH对一个32 位整数的低半字执行字节反转,再带符号扩展成32 位数ROR圆圈右移RRX带进位位的逻辑右移一格(最高位用C 填充,执行后不影响C 的值译注)SFBX从一个32 位整数中提取任意长度和位置的位段,并且带符号扩展成32 位整数SDIV带符号除法SMLAL带符号长乘加(两个带符号的 32 位整数相乘得到 64 位的带符号积,再把积加到另一个带符号64 位整数中)SMULL带符号长乘法(两个带符号的32 位整数相乘得到64 位的带符号积)SSAT带符号的饱和运算SBC带借位的减法SUB减法SUBW宽减法,可以减12 位立即数SXTB字节带符号扩展到32 位数TEQ测试是否相等(对两个数执行异或,更新标志但不存储结果)TST测试(对两个数执行按位与,更新Z 标志但不存储结果)UBFX无符号位段提取UDIV无符号除法UMLAL无符号长乘加(两个无符号的 32 位整数相乘得到 64 位的无符号积,再把积加到另一个无符号64 位整数中)UMULL无符号长乘法(两个无符号的32 位整数相乘得到64 位的无符号积)USAT无符号饱和操作(但是源操作数是带符号的译注)UXTB字节被无符号扩展到32 位(高24 位清0译注)UXTH 半字被无符号扩展到32 位(高16 位清0译注)表4.7 32位存储器数据传送指令名字功能LDR加载字到寄存器LDRB加载字节到寄存器LDRH加载半字到寄存器LDRSH加载半字到寄存器,再带符号扩展到32 位LDM从一片连续的地址空间中加载若干个字,并选中相同数目的寄存器放进去LDRD从连续的地址空间加载双字(64 位整数)到2 个寄存器STR存储寄存器中的字STRB存储寄存器中的低字节STRH存储寄存器中的低半字STM存储若干寄存器中的字到一片连续的地址空间中,占用相同数目的字STRD存储2 个寄存器组成的双字到连续的地址空间中PUSH把若干寄存器的值压入堆栈中POP从堆栈中弹出若干的寄存器的值表4.8 32位转移指令名字功能B无条件转移BL转移并连接(呼叫子程序)TBB以字节为单位的查表转移。从一个字节数组中选一个8 位前向跳转地址并转移TBH以半字为单位的查表转移。从一个半字数组中选一个16 位前向跳转的地址并转移表4.9 其它32位指令LDREX加载字到寄存器,并且在内核中标明一段地址进入了互斥访问状态LDREXH加载半字到寄存器,并且在内核中标明一段地址进入了互斥访问状态LDREXB加载字节到寄存器,并且在内核中标明一段地址进入了互斥访问状态STREX检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的字STREXH检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的半字STREXB检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的字节CLREX在本地处理器上清除互斥访问状态的标记(先前由LDREX/LDREXH/LDREXB 做的标记)MRS加载特殊功能寄存器的值到通用寄存器MSR存储通用寄存器的值到特殊功能寄存器NOP无操作SEV发送事件WFE休眠并且在发生事件时被唤醒WFI休眠并且在发生中断时被唤醒ISB指令同步隔离(与流水线和MPU 等有关译注)DSB数据同步隔离(与流水线、MPU 和cache 等有关译注)DMB数据存储隔离(与流水线、MPU 和cache 等有关译注)4.2.2 未支持的指令有若干条 Thumb 指令没有得到 Cortex-M3 的支持,下表列出了未被支持的指令,以及不支持的 原因。表 4.10 因为不再是传统的架构,导致有些指令已失去意义未支持的指令以前的功能BLX #im 在使用立即数做操作数时,BLX 总是要切入 ARM 状态。因为Cortex-M3 只在Thumb 态下运 行,故以此指令为代表的,凡是试图切入ARM 态的操作,都将引发一个用法fault。SETEND由 ARMv6 引入的,在运行时改变处理器端设置的指令(大端或小端)。因为 Cortex-M3 不 支持动态端的功能,所以此指令也将引发faultCM3 也不支持有少量在 ARMv7-M 中列出的指令。比如,ARMv7M 支持 Thumb2 的协处理器指令,但是 CM3 却不能挂协处理器。表 4.11 列出了这些与协处理器相关的指令。如果试图执行它们, 则将引发用法 fault(NVIC 中的 NOCP(No CoProcessor)标志置位)。表 4.11 不支持的协处理器相关指令未支持的指令以前的功能MCR 把通用寄存器的值传送到协处理器的寄存器中MCR2把通用寄存器的值传送到协处理器的寄存器中MCRR 把通用寄存器的值传送到协处理器的寄存器中,一次操作两个MRC把协处理器寄存器的值传送到通用寄存器中MRC2 把协处理器寄存器的值传送到通用寄存器中MRRC把协处理器寄存器的值传送到通用寄存器中,一次操作两个LDC 把某个连续地址空间中的一串数值传送至协处理器中STC从协处理器中传送一串数值到地址连续的一段地址空间中还有一个是改变处理器状态指令(CPS),它的一些用法也不再支持。这是因为PSRs 的定义已经变了,以前在 ARMv6 中定义的某些位在 CM3 中并不存在。表 4.12 不支持的 CPS 指令用法未支持的指令 以前的功能CPS.W A CM3 没有“A”位CPS.W #modeCM3 的PSR 中没有“mode”位有些提示(hint)指令的功能不支持,它们在 CM3 中按“NOP”指令对待表 4.13 不支持的 hint 指令未
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高三生物省考试卷及答案
- 自考(网络教育)安全监测监控技术考试试题及答案
- 肿瘤微环境调控-第16篇-洞察与解读
- 护理管理学自考试题及答案
- 交通限制效果评估-洞察与解读
- 2025年事业单位招聘考试综合类面试真题模拟试卷真题模拟精讲
- 2025年事业单位招聘考试综合类无领导小组讨论面试真题模拟试卷:时事热点挑战篇
- 2025年事业单位教师招聘化学学科专业知识试卷:试题解析与答案
- 2025年事业单位招聘考试综合类职业能力倾向测验真题模拟试卷(心理学)
- 2025年上海市浦东新区事业单位招聘考试综合类结构化面试真题模拟试卷(含解析)
- 温州市龙湾区卫生健康系统事业单位招聘卫生专业技术人员笔试真题2024
- 2025年抗肿瘤药物授权培训考核试题(含答案)
- 车辆年检服务合同5篇
- 2025年贵州省警(协警)招聘考试题库及答案
- (新教材)2025年秋期部编人教版二年级上册小学语文全册教案(教学设计)(新课标核心素养教案)
- TCCTAS 162-2024 公路中央分隔带组合型波形梁护栏技术规程
- (2024版)小学六年级数学考试命题趋势分析
- 《中药商品学》考试复习题库(含答案)
- 钢结构冷库施工方案
- 教育评价学全套ppt课件完整版教学教程
- 产品模型制作教案
评论
0/150
提交评论