Android ARM汇编语言

发布者:备战最新更新时间:2016-07-01 来源: eefocus关键字:Android  ARM  汇编语言 手机看文章 扫描二维码
随时随地手机看文章
简介

ARM是Advanced RISC Machine的首字母缩写,它可以称之为一家嵌入式处理器的提供商,也可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集。

原生程序与ARM汇编语言

对于使用ARM处理器的Android手机来说,它最终会生成相应的ARM elf可执行文件,分析软件的核心功能只能从这个elf文件入手。

一个ARM原生程序如下:

 

EXPORT main  //main函数
main
var_C= -0xc     //识别出的栈变量
var_8 = -8
STMFD SP!,{R11,LR}   //指令  压入堆栈
ADD R11,SP,#4
SUB SP,SP,#8
STR R0,[R11,#var_8]
STR R1,[R11,#var_C]
LDR R3,=(aHelloArm - 0x8300)
ADD R3,PC,R3
MOV R0,R3
BL puts
MOV R3,#0
MOV R0,R3
SUB SP,R11,#4
LDMFD SP!,{R11,PC}  //堆栈寻址指令

 

对应的代码:

 

int main(int argc, char* argv[]){
	printf("Hello ARM!\n");
	return 0;
}

 

原生程序的生成过程

 

1、预处理

2、编译

3、汇编

4、链接

 

必须了解的ARM知识

1、ARM汇编语言是一门低级语言,它能够与系统的底层打交道,直接访问底层硬件资源。

2、ARM汇编语言与C语言共用同一套原生程序开发的API接口。

3、寄存器是处理器特有的高速存贮部件,它们可用来暂存指令、数据和地址。ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,

6个为状态寄存器。ARM处理器支持七种运行模式,它们分别为:用户模式、快速中断模式、外部中断模式、管理模式、数据访问终止模式、

系统模式、未定义指令中止模式。

 

指令格式

ARM指令的基本格式如下:

 

{}{S}{.W|.N},{,}
opcode为指令助记符,cond为执行条件。


 

跳转指令

1、B跳转指令

 

B{cond} label   简单的分支指令

 

2、BL带链接的跳转指令

 

BL{cond} label 

 

3、BX带状态切换的跳转指令

 

BX{cond} Rm

 

 

4、BLX带链接和状态切换的跳转指令

 

BLX{cond} Rm

 

 

存储器访问指令

LDR 用于从存储器中加载数据到寄存器中。它的格式如下:

 

LDR{type}{cond} Rd,label
LDRD{cond} Rd,Rd2,label

 

 

STR用于存储数据到指定地址的存储单元中。它的格式如下:

 

STR{type}{cond} Rd,label
STRD{cond} Rd,Rd2,label

 

LDM 从指定的存储单元加载多个数据到一个寄存器列表。它的格式如下:

 

LDM{addr_mode}{cond} Rn{!} reglist

 

 

STM 将一个寄存器列表的数据存储到指定的存储单元。它的格式如下:

 

STM{addr_mode}{cond} Rn{!} reglist

 

PUSH 将寄存器推入满递减堆栈。它的格式如下:

 

PUSH {cond} reglist

 

 

POP 从满递减堆栈中弹出数据到寄存器。它的格式如下:

 

POP {cond} reglist

 

SWP 用于寄存器与存储器之间的数据交换。它的格式如下:

 

SWP{B}{cond} Rd,Rm,[Rn]

 

数据处理指令

MOV 将8位的立即数或寄存器的内容传送到目标寄存器中。它的格式如下:

 

MOV {cond}{S}Rd,operand2

 

 

MVN 数据非传送指令。它的格式如下:

 

MVN {cond}{S}Rd,operand2

 

 

ADD 加法指令。它的格式如下:

 

ADD{cond}{S}Rd,Rn,operand2

 

 

ADC 带进位加法指令。它的格式如下:

 

ADC{cond}{S}Rd,Rn,operand2

 

 

SUB 减法指令。它的格式如下:

 

SUB{cond}{S}Rd,Rn,operand2

 

 

 

RSB 逆向减法指令。它的格式如下:

 

RSB{cond}{S}Rd,Rn,operand2

 

 

 

SBC 带进位减法指令。它的格式如下:

 

SBC{cond}{S}Rd,Rn,operand2

 


RSC 带进位逆向减法指令。它的格式如下:

 

RSC {cond}{S}Rd,Rn,operand2

 


 

MUL 32位乘法指令。它的格式如下:

 

MUL {cond}{S}Rd,Rm,Rn

 

 

MLS 将Rm寄存器和Rn寄存器中的值相乘,然后再从Ra寄存器的值中减去乘积,最后将所得结果的低32位存入Rd寄存器中。它的格式如下:

 

MLS {cond}{S} Rd,Rm,Rn,Ra

 

 

MLA  将Rm寄存器和Rn寄存器中的值相乘,然后再将乘积与Ra寄存器中的值想家,最后将所得结果的低32位存入Rd寄存器中。它的格式如下:

 

MLA {cond}{S} Rd,Rm,Rn,Ra

 

 

UMULL 64 位无符号乘法指令。指令将Rm 和Rs 中的值作无符号数相乘,结果的低32 位保存到RsLo 中,而高32 位保存到RdHi 中。指令格式如下:

 

UMULL{cond}{S} RdLo,RdHi,Rm,Rs

UMULL 指令举例如下:
UMULL R0,R1,R5,R8 ;(R1、R0)=R5×R8

UMLAL  64 位无符号乘加指令。指令将Rm 和Rs 中的值作无符号数相乘,64 位乘积与RdHi、RdLo 相加,结果的低32 位保存到RdLo 中,而高32 位保存到RdHi 中。

 

指令格式如下:

UMLAL{cond}{S} RdLo,RdHi,Rm,Rs

UMLAL 指令举例如下:
UMLAL R0,R1,R5,R8 ;(R1,R0)=R5×R8+(R1,R0)

SMULL  64 位有符号乘法指令。指令将Rm 和Rs 中的值作有符号数相乘,结果的低32 位保存到RdLo 中,而高32 位保存到RdHi 中。指令格式如下:

 

 SMULL{cond}{S} RdLo,RdHi,Rm,Rs

SMULL 指令举例如下:
SMULL R2,R3,R7,R6 ;(R3,R2)=R7×R6

SMLAL 64 位有符号乘加指令。指令将Rm 和Rs 中的值作有符号数相乘,64 位乘积与RdHi、RdLo,相加,结果的低32 位保存到RdLo 中,而高32 位保存到RdHi 中。

 

指令格式如下:

 

SMLAL{cond}{S} RdLo,RdHi,Rm,Rs
SMLAL 指令举例如下:
SMLAL R2,R3,R7,R6 ;(R3,R2)=R7×R6+(R3,R2)

SMLAD 将Rm寄存器的低半字和Rn寄存器的低半字相乘,然后将Rm寄存器的高半字和Rn的高半字相乘,最后将两个乘积与Ra寄存器的值相加并存入Rd寄存器。它的格式如下:

 

 

SMLAD{cond}{S}Rd,Rm,Rn,Ra

 

 

SDIV 有符号数除法指令。它的格式如下:

 

SDIV{cond} Rd,Rm,Rn

 

UDIV 无符号数除法指令。它的格式如下:

 

UDIV{cond} Rd,Rm,Rn

 

ASR 算术右移指令。它的格式如下:

 

ASR{cond} Rd,Rm,operader2

 

AND 逻辑与指令。它的格式如下:

 

AND{cond} Rd,Rm,operader2

 

 

 

ORR 逻辑或指令。它的格式如下:

 

ORR{cond} Rd,Rm,operader2

 

EOR 异或指令。它的格式如下:

 

EOR {cond} Rd,Rm,operader2

 

BIC 位清除指令。它的格式如下:

 

BIC {cond} Rd,Rm,operader2


LSL 逻辑左移指令。它的格式如下:

 

LSL {cond} Rd,Rm,operader2
……

 

小结
了解了ARM处理器完整的指令集,为进一步破(po)解(jie)Android又打下了一个基础。
关键字:Android  ARM  汇编语言 引用地址:Android ARM汇编语言

上一篇:基于Android的ARM汇编语言系列之五:ARM指令集与Thumb指令集
下一篇:基于ARM的C语言与汇编语言混合编程

推荐阅读最新更新时间:2024-03-16 14:59

HTC U11 Life获得Android 10更新
据报道,HTC U11 Life系统将更新升级到Android10。据了解,HTC U11 Life是HTC首款升级到Android9 Pie的手机设备。   HTC近几年的手机业务可谓是碌碌无为,新发布的手机也是难以相继,特别是,在全面转向研发VR后,在手机研发上更加放缓了脚步。此前HTC官方还在微博上发布消息,将于3月19日上午9点半,在VR中举行一场大型活动——零界 · 未来 HTC VIVE虚拟生态大会。并邀请大家一同参与,通过PC、VR、VR一体机、电脑桌面免费参加。   虽然说全面转向VR,但HTC也继续坚持其手机的系统更新,此次更新升级的HTC U11 Life,是2017年上市的一款手机,屏幕尺寸为5
[手机便携]
HTC U11 Life获得<font color='red'>Android</font> 10更新
LG G7 ThinQ Android 10的内核源代码公布
IT之家4月14日消息 近日,LG宣布即将推出的智能手机将被命名为“LG Velvet”,打破了该公司为设备取字母数字名的传统。   据XDA报道,LG的G系列预计将很快退役,但该公司并未计划在软件支持方面放弃传统型号。2018年的LG G7 ThinQ计划于2020年第三季度获得Android 10更新。 目前,我们尚不清楚OTA推出的具体时间,但LG已经为几个运营商品牌共享了Android 10内核源代码。   今年2月,LG就针对韩国LG G7(型号为LMG710N)启动了Android 10的公开Beta测试,并在开源代码分发存储库中发布了该手机的Android 10内核源代码, 但一段时间后又出于某种
[手机便携]
Android手机WiFi连接故障处理指南
  使用者需要使用安卓手机连接 Wi-Fi 时,通常情况的做法就是打开设置,选择想要使用的网络。但在个别情况下,可能会遇到无法兼容Wi-Fi情况的出现;这时间,本文给出的方法,就可以用于此类问题的解决。下面给出的解决方法是按照从简单到复杂的顺序排列的。   关闭并重启手机   首先应该尝试的就是关闭手机,取出电池,放置30秒的时间,再将电池装回去,并重新打开手机。   关闭并重启Wi-Fi连接   在此之前,我的手机中已经保留了一个由其它Wi-Fi连接分配的网络IP地址了,它会被应用到当前的Wi-Fi中。如果地址模式是相同的,并且没有出现地址冲突的话,就没有什么要担心的;但现实情况通常都不是这样的。因此,现在要
[网络通信]
电动车“最后一英里” 特斯拉结盟ABB开发无线充电标准
特斯拉创办人马斯克(Elon Musk),2014年9月初与内华达州政府共同宣布,将斥资50亿美元,在当地成立超越目前全球现有锂电池总产能的超大电池工厂,朝2020年年产量50万辆的十倍速成长目标迈进,此举让豪华车龙头奔驰等所有车厂高度警觉,这股破坏式创新的巨大力量。尽管2014年,特斯拉仅能售出近4万辆电动车,就销量而言,尚不及上看160万辆奔驰的3%。 ABB联手开发无线充电标准 在有“欧洲绿色首都之称”的丹麦哥本哈根,在一只集装箱改造成的空间内,奔驰首度对全球媒体公开它反制对手的秘密武器——可安装于家用车库内,1米2大的无线充电面板。 用这个设备,未来电动车开回家中,夜间无需插电,就能通过位在引擎盖下方这片面板充
[嵌入式]
Android会是未来人机界面系统的选择吗?
       人总是很难预料的,谁也说不准他们将如何与产品将交互。也许跟你预料的一样,人们会采用与测试时候相同的方法操作应用程序,也有可能把关闭窗口的按钮错认为是拷贝的按钮,最终沮丧地不停敲着键盘。     为了把系统的人机界面(Human Machine Interface,HMI)做的尽可能直观并节省用户的时间,很多设计师基于知名的操作系统如微软的Windows设计人机界面。Windows伴随着很多人长大,他们了解如何操作鼠标操、、最小化窗口和启动程序。     当采用Windows作为应用的外观的时候,这个应用的学习曲线会显著下降,用户操作不顺利或错误的情况也很可能会减少。而直到最近,用户和开发者都熟悉的操作系统都还
[手机便携]
前景黯淡 谷歌表示可以放弃Android
    谷歌与甲骨文的专利诉讼案件即将开庭,谷歌首席执行官拉里·佩奇(Larry Page)竟放出如下厥词“Android智能手机操作系统是谷歌非常重要的资产,但并非生死攸关的资产。”这似乎在暗示,假如这场官司输掉,谷歌可以将Android彻底放弃。     不过谷歌官方一直表示,谷歌并未侵犯甲骨文的专利,甲骨文也不能获得Java某些部分的版权。 介于文艺与正常之间的CEO佩奇     不过在此之前,拉里·佩奇(Larry Page)曾接受甲骨文律师的质询,在那时,佩奇称Android非常重要,但不是至关重要。不过仅几分钟后佩奇接着表示,如果谷歌董事会告诉他Android对公司至关重要,他也不会感到惊讶。     关于这位反
[手机便携]
ARM和单片机AVR的区别
ARM和单片机AVR的区别 AVR 单片机是ATMEL公司研制开发的一种新型单片机,它与51单片机、PIC单片机相比运行效率高很多、芯片内部的Flsah、EEPROM、SRAM容量较大、全部支持在线编程烧写(ISP、每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强、内部资源丰富,一般都集成AD、DA模数转换器;PWM;SPI、USART、TWI、I2C通信口;丰富的中断源等。主要现在使用的型号是ATMEGA8/16。 ARM 不是单片机,准确来讲ARM是一种处理器的IP核。英国ARM公司开发出处理器结构后向其他芯片厂商授权制造,芯片厂商可以根据自己的需要进行结构与功能的调整,因此实际中使用的ARM处理器有很
[单片机]
<font color='red'>ARM</font>和单片机AVR的区别
ARM内核的中断技术
    摘要: 以ARM7TDMI处理器为例,详细介绍ARM内核的三种中断:常规中断、快中断和软件中断;结合应用,给出优化的中断处理程序的ARM指令代码,对电子设计人员有效大的参考价值。     关键词: ARM 中断 快速 精简指令系统 1 ARM7TDMI简介 ARM7TDMI是一款经典的通用32位微处理器,采用精简指令系统(RISC)和流水线结构。典型应用如GPS、PDA、双向寻呼机、移动电话、板卡间高速通信等。 ARM7TDMI定义有7种工作模式,本文涉及到的有:用户模式,程序正常运行时的模式;快中断模式,处理器响应快中断而进入的模式;中断模式,处理响应常规中断而进入的模式;监督模式,操作系统
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved