Linux 汇编指令集
来源:互联网 发布:淘宝店主白娘娘怀孕 编辑:程序博客网 时间:2024/06/07 06:19
注意:汇编语言下操作所有的数据必须取出数据放到通用寄存器中处理,完毕之后从通用寄存器中读取出放到指定的寄存器中。
1.汇编程序书写格式
MAIN
2.arm指令集
3.arm常用指令
4.arm指令中常用到的条件码
5.b,bl指令区别:
6.arm汇编指令的一点总结
比如 STR R0, [R1] ,意思是R0-> [R1],它把源寄存器写在前面,跟MOV、LDR都相反。
LDR应该是非常常见了。LDR就是把数据从存储器传输到寄存器上。而且有个伪指令也是LDR,因此我有个百思不得其解的问题。看这段代码:
对于当中的ldr 那句,我就不明白了,如果你把=去掉,是不能通过编译的。查了一些资料,个人感觉为:这个=应该表示LDR不是ARM指令,而是伪指令。作为伪指令的时候,LDR的格式如下:
它的作用是把一个32位的地址或者常量调入寄存器。嗬嗬,那大家可能会问,
“MOV r2,#0x55aa”也可以啊。应该是这样的。不过,LDR是伪指令啊,也就是说编译时编译器会处理它的。怎么处理的呢?——规则如下:如果该数字常量在MOV指令范围内,汇编器会把这个指令作为MOV。如果不在MOV范围中,汇编器把该常量放在程序后面,用LDR来读取,PC和该常量的偏移量不能超过 4KB。
然后说一下跳转指令。ARM有两种跳转方式。
(1) mov pc <跳转地址〉
这种向程序计数器PC直接写跳转地址,能在4GB连续空间内任意跳转。
(2)通过 B BL BLX BX 可以完成在当前指令向前或者向后32MB的地址空间的跳转(为什么是32MB呢?寄存器是32位的,此时的值是24位有符号数,所以32MB)。
B是最简单的跳转指令。要注意的是,跳转指令的实际值不是绝对地址,而是相对地址——是相对当前PC值的一个偏移量,它的值由汇编器计算得出。
BL非常常用。它在跳转之前会在寄存器LR(R14)中保存PC的当前内容。BL的经典用法如下:
最后提一下Thumb指令。ARM体系结构还支持16位的Thumb指令集。Thumb指令集是ARM指令集的子集,它保留了32位代码优势的同时还大大节省了存储空间。由于Thumb指令集的长度只有16位,所以它的指令比较多。它和ARM各有自己的应用场合。对于系统性能有较高要求,应使用32位存储系统和ARM指令集;对于系统成本和功耗有较高要求,应使用16位存储系统和ARM指令集。
- Linux 汇编指令集
- linux汇编指令
- 汇编指令集
- 汇编指令集
- 汇编指令集
- 汇编指令集
- 汇编指令集
- 8088汇编指令集
- 汇编指令集
- 基本汇编指令集
- INTEL 汇编指令集
- 汇编指令集
- INTEL 汇编指令集
- 基本汇编指令集
- 汇编指令集
- ARM汇编指令集
- INTEL 汇编指令集
- 汇编指令集
- 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)
- Android处理大图片
- JAVA第一章 概述一:JAVA发展史---------------(Make A little EvProgresseryday )
- php 学习笔记 数据的存储与检索(二)
- RGB颜色表——在线
- Linux 汇编指令集
- Make menuconfig详解(转)
- vb(4) 将grid数据导入Excel
- VC中用内存映射文件处理大文件
- 使用SpringAop 验证方法参数是否合法
- 【Android进阶】天天动听 悬浮歌词(迷你歌词)效果解读
- ubuntu 14.4 安装 eclipse c++开发环境
- Leetcode 148 Sort List
- Make menuconfig/.config/Kconfig解析(转)