- 1、本文档共170页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工程科技]第3章2 ARM指令格式及其寻址方式
3.2.1 ARM指令格式 3.2.1 ARM指令格式 ARM指令集——第2个操作数——立即数 没有直接对32位立即数直接进行操作的指令 如果直接利用12位立即数,只能表示0~4095 ARM只利用12位oprand2中的8位表示立即数#immed_8r,其值为0~255 #immed_8r可循环右移若干偶数位(ROR 0,2,4,…,30,用4比特表示),从而可得到比12位立即数更大的数 3.3.1 ARM数据处理指令 最大的ARM指令家族,所有指令遵守同一指令格式 包含: 寄存器间数据传送指令 算术、逻辑运算指令 比较指令 ARM是Load/Store结构 所有指令只对寄存器操作 所有指令都将对1到2个寄存器操作 第一操作数总是寄存器:Rn 第二操作数总是通过桶形移位器送到ALU 例题1 例题1 3.3.3 Load/Store指令 基本存储/加载指令是字/字节存储/加载指令: LDR / STR / LDRB / STRB ARMV4后添加对半字及有符号数的支持 存储/加载半字: LDRH / STRH 加载有符号半字/字节: LDRSH / LDRSB 所有存储/加载均可条件执行,条件码在LDR / STR之后 格式: LDR|STR{cond}{size} Rd, address ARM存储器访问指令——单寄存器存储 加载/存储半字和有符号字节指令也可使用前索引或后索引模式 但其偏移量的格式更加受限 立即数只能为8位而非12位,偏移量只能为0~255 寄存器无法移位 例题 例题 变量 含义 {PC}或. 当前指令的地址 {VAR}或@ 存储区位置计数器的当前值 {TRUE} 逻辑常量真 {FALSE} 逻辑常量假 {OPT} 当前设置列表选项值,OPT用来保存当前列表选项,改变选项值,恢复它的原始值 {CONFIG} 如果汇编器汇编ARM代码,则值为32;如果汇编器汇编Thumb代码,则值为16 {ENDIAN} 如果汇编器在大端模式下,则值为big;如果汇编器在小端模式下,则值为little ARM汇编程序设计 表4-1 内置变量 {CODESIZE} 如果汇编器汇编ARM代码,则值为32;如果汇编器汇编Thumb代码,则值为16,与{CONFIG}同义 {CPU} 选定的CPU名,缺省时为ARM7TDMI {FPU} 选定的FPU名,缺省时为SoftVFP {ARCHITECTURE} 选定的ARM体系结构的值;3,3M,4,4T和4TxM {PCSTOREOFFSET} STR pc,[…]或STM Rb,[…PC]指令的地址和PC存储值之间的偏移量 {ARMASM_VERSION} 或| ads $ version | ARM汇编器的版本号,为整数 ARM汇编程序设计 表4-1 内置变量(续) 常量 十进制,如:123,1,0 十六进制,如:0x123,0xab,0x7b n_XXX,n表示n进制,从2~9:XXX是具体的数 字符串:由一对双引号及双引号之间字符串组成,并包含C中的转义字符。 逻辑常量为{TRUE}和{FALSE}。 ARM汇编程序设计 宏定义及使用 与C语言中的#define相似,仅在源程序中做字符替换 以MACRO指示符开始,以MEND结束,例: ARM汇编程序设计 Macro $label TestAndBranch $dest, $reg, $cc $label CMP $reg, #0 B$cc $dest MEND Test TestAndBranch NonZero, R0, NE … NonZero Test CMP R0, #0 BNE NonZero … NonZero 内嵌汇编 在C和C++语言中嵌入汇编语言可以实现一些高级语言中没有的功能。 语法 __asm __ (“instruction ... instruction”); //Linux gcc中支持 __asm{ instruction … instruction }; //ADS中支持 asm(“instruction [; instruction]”); //ARM C++中使用 ARM汇编程序设计 C语言中内嵌汇编示例 (ADS可编译通过) ARM汇编程序设计 #include stdio.h void my_strcpy(char* src, const char* dst){ int ch; __asm{
您可能关注的文档
最近下载
- T∕CACM 1021.135-2018 中药材商品规格等级 桑椹.docx VIP
- 合肥南站枢纽方案.pdf
- 内蒙古自治区包头市昆都仑区2023-2024学年七年级下学期期中语文试题【含答案解析】.docx VIP
- 公司年度颁奖晚会主持词与公司年终工作总结2合集.doc VIP
- GB/T 27726-2011_热塑性塑料阀门压力试验方法及要求.pdf
- 医学生全国水平测试题库.pdf
- 2025年东莞实业投资控股集团有限公司招聘笔试模拟试题及答案解析.docx
- 《第十章-中国文化的基本精神》-课件.ppt VIP
- 基于模糊控制的智能浇灌系统设计.pptx VIP
- 乳腺癌诊治指南与规范(2025年版精要本).PDF VIP
文档评论(0)