ARM 常用汇编指令
ARM 汇编程序的框架结构
.section .data
<初始化的数据>
.section.bss
<未初始化的数据>
.section .text
.global _start
_start:
<汇编代码>
注意: 一般是将上面结构进行简化
.text
.global _start
_start:
<汇编代码>
寄存器操作指令:
算术和逻辑指令:
MOV :用于将一个寄存器或被移位寄存器或一个立即数移动到目的寄存器
MOV r1 ,#8 (注意:#+数,表示一个十进制数,#+0b数,表示一个二进制数,#+0x数,表示一个十六进制数)
MVN :对源操作数取反再赋值给目的寄存器
MOV R1,#8
SUB : 将一个数减去另外一个数再存放如寄存器
SUB R1,#8,#6(8-6)
ADD:将一个数加上另外一个数后将其存放如寄存器中
ADD R1,R2,R3
AND :逻辑与
AND R1,R2,#0
BIC:位清除
BIC R1,R2,#0B1101
将R2中所与#b1101中1所对应的位清零后的结果保存在R1中
比较指令:
CMP:顾名思义,用于比较两个数的大小,比较的结果不过会放在哪个通用寄存器中而是改在程序状态寄存器中的一个标志状态位
CMP R1,#0B111010
TST:测试位,将两个数按位与
TST R1,R2
分枝指令:
B:条件跳转指令
B [条件] 标号 (注意 :中括号在编写程序时不需要写出)
BL :带连接的返回(类似于C语言中的子函数调用,调用子函数后返回主函数)
移位指令:
LSL:算术左移位
MOV R1,R1,LSL#2(将R1中的数据左移两位存入R1)
ROR:循环右移
MOV R1,R1,#ROR 2(将R1中的数据循环右移后存入R1中)
程序状态字访问指令:
上面所学指令都不能对计算机中的程序状态字中的指令进行访问和读写,所以需要专用计算机指令来将程序状态字中的数据读写到通用寄存器中,在进行修改后写入
MRS :将程序状态字中的数据搬出来
MRS R0,CPRS
MSR:将数据搬回程序状态字中
MSR CPRS, R0
存储器操作指令:
LDR :将内存中的值导出到通用寄存器中
LDR R0 ,#0XFF ‘
STR:将同用寄存器中的数据写回到内存中
STR R0 ,#0XFF
伪指令:
定义类伪指令:(1:编译时起作用2:起作用但是转化为其他机器指令)
.global 表明一个全局的符号 (注意GNU伪指令的特点在前面加上一个“.”)
.data 定义一个数据段
.ascii 定义字符串的数据
.byte 定义一个字节的数据
.word 定义一个字的数据
.data
.equ (类似于C语言中定义宏)
.align 用于字节对齐
操作类伪指令:
nop:空操作指令 \
具体实现:mov r0 ,r0
ldr:用于将一个大于八位的数据装入寄存器
注意:ldr r0 ,=0x1ff
这里后面是用的等号这里和其他地方有些不一样
协处理指令:(最重要是就是CP15)
作用:系统控制
mcr:
mrc:
mrc p15,0, r0 ,c0,c0,0
注意:蓝色部分是由芯片手册的cp15寄存器访问列表给出的以访问不同寄存器 。红色部分是内核内部通用寄存器
ARM 常用汇编指令的更多相关文章
- ARM常用汇编指令介绍
b 跳转指令(跳转范围为32Mb) bl 带返回地址的跳转,指令自动将下一条指令的地址复制到R14寄存器,然后跳转到指定地址去执行,执行完后返回到下一条指令处执行 pc 寄存器R1 ...
- 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码
浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...
- ARM 内核 汇编指令 的 8种 寻址方式
str: store register ->指令将寄存器内容存到内存空间中, ldr: load register 将内存内容加载到通用寄存器, ldr/str 组合来实现ARM CPU 和内 ...
- 【安卓逆向】ARM常见汇编指令总结
跳转指令 B 无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 BLX 带链接和状态的无条件跳转 存储器与寄存器交互数据指令(核心) 存储器:主存和内存 寄存器中放的数据:可以是字符 ...
- ARM常用汇编指令列表 --- 转自百度文库
- 从零开始的程序逆向之路 第一章——认识OD(Ollydbg)以及常用汇编扫盲
作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43041-1-1.html 0×00 序言: 1.自从上次笔者调戏完盗取文件密码大黑客后, ...
- 常用ARM汇编指令
常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区 作者:xuyuanfan77 [字体:大 中 小] 在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...
- ARM汇编指令调试方法
学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...
- ARM 汇编指令
ARM汇编程序特点: l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通 ...
随机推荐
- POJ 1128 Frame Stacking (拓扑排序)
题目链接 Description Consider the following 5 picture frames placed on an 9 x 8 array. ........ ........ ...
- Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据
路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P&l ...
- Python练习-sys.argv的无聊用法
代码如下: # 编辑者:闫龙 #将三次登陆锁定的作业改为: # python login.py -u alex -p 123456 输入的形式 # (-u,-p是固定的,分别代表用户名和密码) imp ...
- php中路径斜杠的应用,兼容win与linux
更多内容推荐微信公众号,欢迎关注: PHP中斜杠的运用 兼容win和linux 使用常量:DIRECTORY_SEPARATOR如:"www".DIRECTORY_SEPARATO ...
- jQuery选择器——(三)
1.基本元素选择器 id选择器:$(“#id名称”); 元素选择器:$(“元素名称”); 类选择器:$(“.类名”); 通配符:* 多个选择器共用(并集) 2.层级选择器 ancestor desce ...
- linux 进程内存解析【转】
转自:http://blog.csdn.net/lile269/article/details/6460807 之前我所了解的linux下进程的地址空间的布局的知识,是从APUE第2版的P430得来的 ...
- Team Foundation Server 2010服务器安装
本安装指南使用Windows Server 2008企业版为基础,安装Windows Server 2008 SP2(必须),在此操作系统环境上进行TFS2010的安装与配置. 三.系统用户设置 1. ...
- Codeforces Round #504 E. Down or Right
Codeforces Round #504 E. Down or Right 题目描述:交互题. 有一个\(n \times n\)的方阵,有一些格子是障碍,从\((1, 1)\)出发,只能向右向下走 ...
- bzoj 1607 Patting Heads 轻拍牛头
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1607 题解: 题目似乎出错,应为“同时拍打所有所持纸条上的数字能被此牛所持纸条上的数字整除 ...
- Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.
在设置请求头的时候报这个Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPE ...