付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(第一篇ARM处理器的寻址方式【详细过程】嵌入式平台的 CPU般是基于 RISC架构的。常见的有 ARM、MIPS、Power PC、SH等。其中尤其以ARM架构的CPU使用比例最大。本系列主要介绍在Windows CE/ARM平台使用汇编语言开发的基础知识为使用ARM汇编做底层开发以及逆向分析打下基础,对于所有的汇编语言第一个介绍的知识点都是处理器的寻址方式,本系列也不 例外。不过ARM处理器是RISC架构的处理器,她的一个重要特点就是寻址方式 比CISC架构的处理器 如X86简单。ARM处理器只有8种寻址方式。下面就逐个 介绍每种寻址方式。实例代码使 用Xarm v1.0构建而成。推荐用户
2、使用 Edit Plus并进行配置,可以使用快捷键构建并传送程序到C:PPC目录下。01、立即数寻址数据保存在指令中可以立即使用。所以称为立即数。例如:mov r0 , # 50 ;将立即数50传送到r0寄存器中。使用规则:01、*立即数前面必须使用"#"做标记,这是和MASN32不同之处,初学ARM 汇编很容易忘记。02、如果没有明确标识默认的进制为 10进制。03、16进制数使用"0x"做标记如:0x64。不能使用MASM32中的在末尾加H的写法。64H是错误的。04、2进制数据使用"2_"做标记如:2_0101。05、立即数寻址
3、可以使用4则运算例如:mov r0 , # 50 + 5006、立即数寻址可以使用逻辑运算例如:mov r0 , # 1 | 007、*特别注意:由于立即数保存在指令中所以并不是任意立即数都可以使用。立即数必须满足这样的条件:常数必须由一个8位的常数循环移位偶数位得到 的。比如:0,256之间的数都可以,1024, 2048等常数都正确。 如果出错则在编译的 时候就会出现提示,Xarm构建时控制台会出现白底红字的显示效果。02、寄存器寻址操作数的值保存在寄存器中,指令执行时直接取寄存器中数据操作。例如:mov r1 , r0 ;将r0中的数据传递到r1寄存器中。add r0 , r0 , r1
4、 ;将r0和r1中数据累加后保存到r0中。03、寄存器偏移寻址这种寻址方式是ARM处理器特有的。当第二个操作数是寄存器寻址时,可以 首先进行移位操作再和第一个操作数结合。例如:mov r0 , r1 , Isl #1 ;将r1中的数据逻辑左移一位再传送到r0中。相当于r0 = r1这是ARM指令的一个特点:可以将移位操作放在其他操作中在一条指令中完 成。这样就提咼了指令效率。移位指令有5种这里简单介绍一下在后面的文章中详细说明Isl:逻辑左移。Isr:逻辑右移。asr算术右移。ror:循环右移。rrx:带扩展的循环右移。04、寄存器间接寻址寄存器中保存所需要的操作数位于在寄存器保存的地址数据指
5、向的内存中。的实际上是一个指针。例如:Idr r0 , r1;将r1中保存的内存地址中的数据传送到r0中。显然这类寻址方式很重要,因为通过它们可以实现内存和寄存器之间的数据交 换。05、基址变址寻址基址变址寻址是将基址寄存器中的内容和指令中给出的偏移量相加,形成操作数的有效地址。这种寻址方式适合访问基址附近的存储单元,常用于查表和数组操 作。举个实战中的 例子在编写PE程序加密软件时需要读取大量的 PE文件头中的信息。一个简单的方法就是 用一个基址寄存器保存文件头在内存中的偏移量,然后加上待取数据的偏移量就可以很方便、整齐的读取到所有需要的数据信息。Idr r0, r1, #4 ;r0J r1
6、+4Idr r0, r1, #4! ;r0、ril 坤 r1+4Idr r0, r1 , #4 ;r0、斤rl r1+4Idr rO, r1, r2 ;r0r1+r2在第一条指令中,将寄存器r1的内容加上4形成操作数的有效地址,从而取得操 作数存入寄存器rO中。在第二条指令中,将寄存器r1的内容加上4形成操作数的有效地址,从而取得操 作数存入 寄存器rO中,然后,r1的内容自增4个字节。在第三条指令中,以寄存器r1的内容作为操作数的有效地址,从而取得操作数存 入寄存器rO中,然后,r1的内容自增4个字节。在第四条指令中,将寄存器r1的内容加上寄存器R2的内容形成操作数的有效 地址,从而取得操作
7、数存入寄存器rO中。06、多寄存器寻址采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方 式可以用一条指令完成传送最多16个通用寄存器的值。以下指令:;r1Idmia rO, r1, R2, R3, R4rO;r2J rO+4;r3J rO+8;r4J rO+12该指令的后缀ia表示在每次执行完加载/存储操作后,rO按字长度增加,因此,指 令可将连续存储单元的值传送到r1r4。O7、堆栈寻址堆栈是一种数据结构,按先进后出(First In Last Out, FILO的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。 当堆栈 指针指向最 后
8、压入堆栈的数据时,称为满堆栈(Full Stack,而当堆栈指针指向下一个将要放入数据的 空位置时,称为空堆栈(Empty Stack。同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack和递减堆栈(Decending Stack当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈工作方 式,即:满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。 例 如:ldmfa 和 stmfa 等。满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。 例
9、如:ldmfd 和 stmfd 等。空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。例如:ldmea和stmea等。空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址 生成。例如:Idmed和stmed等。PC。堆栈寻址经常用在函数的首尾,在函数首部用于保存连接寄存器(函数返回地 址、r4以上寄存器等,在函数尾部恢复寄存器数据并将返回地址写入08、相对寻址与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址 标号作为偏移量,将两者相加之后得到操作数的有效地址。以b开头的跳转指令(包括函数 调用指令bl都是使用这类寻址方
10、式。mov r0 , # 100cmp r0 , # 100beq LabelTest ;相等时跳转到标号 LabelTest位置处继续执行。ShowHexLabelTestShowDec注意ARM汇编的标号的特点。无论是标号还是函数名都必须在一行的顶 格位置书写,末尾没有冒号。我们使用C的标识符定义不会编译错误。 ARM的标号可以使用两条 T在两 边限定比如:|LabelText|是正确的。当我们写子函数或者分支程序时经常用到相对寻址 ,频繁的使用甚至使我们忽略了对他的认识。但是这个寻址方式在编写加密程序时非常重要!正因为有了这 种寻址方式,我们在编写加密程序时很多重定位工作变得非常轻松。在后面的高级 专题再介绍。8种寻址方式都很重要,不过多寄存器寻址和堆栈寻址可能刚开始难理解
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年学习防灾科普知识 平安抵御暴雨台风山洪塌方灾害
- 2026 年暴雨出行安全防范科普教育课件
- 人工智能银行客户服务创新
- 人工智能与市场微观结构
- 2026年宝鸡太白山技师学院单招综合素质考试模拟试卷(考点提分)附答案详解
- 2024年河南艺术职业学院高职单招职业技能考试题库附完整答案详解(名师系列)
- 2025年地图鱼增色粮配方升级研究
- 2026年办公用设备行业市场前景报告
- 2025年桥安职业学院单招职业技能考试模拟试卷附完整答案详解(名师系列)
- 2025年山东航空技师学院高职单招职业技能考试模拟试卷及参考答案详解【B卷】
- 红外线治疗技术课件
- 化妆行业的法规和标准规范
- 手术室护理清点不良事件
- 人保财险车险合同范本
- 第六届“四川工匠杯”职业技能大赛(互联网营销赛项)理论参考试题库(含答案)
- 星级复评规范评分表星级饭店访查规范
- 《 大学生军事理论教程》全套教学课件
- 私人房屋装修安全免责协议书
- 自动控制原理 第3版 课件全套 陶洪峰 第1-8章 概论、控制系统数学模型-线性离散系统分析
- 微生物工程课件
- 新生儿患者抗菌药物的应用课件
评论
0/150
提交评论