ARM初识

来源:互联网 发布:如何读取股票数据 编辑:程序博客网 时间:2024/06/07 01:02

ARM初识

ARM 指令集为精简指令集(指令长度为2或4)
X86 指令集为复杂指令集(指令长度可变)

Thumb: 16位指令,长度为2字节
ARM: 32位指令,长度为4字节


数据类型

数据类型 长度(bits) Byte 8Bits HalfWord 16Bits Word 32Bits DWord 64Bits

ARM工作模式(7种)

用户模式(1种), 系统模式(5种), 未定义模式(1种)

寄存器介绍(R3模式)

共37个可访问寄存器(31个通用寄存器,6个状态寄存器)

R0~R12 为通用寄存器

寄存器名 寄存器功能 R11 通用寄存器(FP),一般做栈底,方便栈变量和参数的寻址 R13 堆栈指针(SP),即栈顶 R14 链接寄存器(LR), 用处为保存函数调用的返回地址 R15 程序计数器(PC),即当前执行指令的下一条指令的下一条指令的地址 CPSR 状态寄存器

状态寄存器:

位 作用 0~4位 标识当前处于什么模式 5位 T位(为1则为Thumb模式,指令为2字节, 为0则为ARM模式,指令4字节) 6,7位 I/F位, 用于屏蔽中断 ,当I位为1时,IRQ中断被禁止;当F位为1时,FIQ中断被禁止 8~27位 保留字段 28位 V位, 溢出标志位 , 当该位为1时:使用加法/减法运算时,表示有符号溢出;否则V=0 29位 C位, 进位标志位,当该位为1时:若为加法运算(含CMN)表示产生进位,否则C=0 30位 Z位, 零标志位 当该位为1时:表示两数相等。为0时:表示两数不相等 31位 N位, 符号位, 当该位为1时:表示负数。为0时:表示正数

bl: 相当于X86的CALL, 调用导入函数使用(PLT) 标明函数重定位
功能为:流程转移到指定地址,然后返回地址入R14(LR)寄存器, 可直接调用库函数

ARM的函数调用:前四个参数 分别传入R0~R3, 其余参数入栈

当子函数中再次发生函数调用时, 则给R14(LR)寄存器的值入栈

注意: ARMmov指令不支持操作内存


GNUAS功能

用于编译.s文件为ARM指令程序

手工编译ARM程序

as -e SrcNmae.c -o SrcNmae.i        //预编译处理文件 .Ias -s SrcNmae.i -o SrcNmae.s       //ASM文件  .sas -c SrcNmae.s -o SrcNmae.o      //编译中间文件 .o(OBJ)gcc LIB SrcNmae.o -o SrcNmae              //链接库文件

ARM的ASM伪指令

伪指令 功能

Tips:

JAVA没有运算符重载语法, 单独给String类提供一个重载语法特例
data/system/packet.xml 此文件保存系统中所有的APP的权限
Android.os.Debug.waitForDebugger() 等待调试器加载,一般写在SOOnLoad

0 0