ARM
ARM体系结构的数据存储方式
- 处理器用于存储数据的方式有:大端小端法
- ARM9处理器微处理器支持字节(8字节),半字(16字节),字(32位)
- CPU与内存通过数据连接
指令长度与数据类型
异常
- 只要程序的正常的程序流被暂时中止,处理器将进入异常模式。
- 如果发生两个或更多异常,那么将按照固定的异常优先级来处理。
复位异常
- 强制CPSR中M[4:0]变为b0011(管理模式)
- 置位CPSR的I和F位
- 清零CPSR中的T位
- 强制PC从0x00开始对下一条指令进行取指
- 返回到ARM状态并恢复执行
未定义指令异常
MOVS pc,R14_und
软件中断异常
MOVS pc,R14_svc
预取指中止异常
SUBS PC,R14_abt,#4
数据中止异常
SUBS PC,R14_abt,#8
IRQ
SUBS PC,R14_irq,#4
FIQ
SUBS PC,R14_fiq,#4
进入异常的过程
- 程序在系统模式下运行用户程序,允许IRQ终端
- 将CPSR寄存器内容进行备份存入SPSR中
- 置位I位(禁止IRQ中断)
- 清零T位(进入ARM状态)
- 设置MOD位,换处理器模式至IRQ模式
- 将下一条指令的地址存取IRQ的LR
- 将跳转地址存入PC
从异常返回
- 将SPSR寄存器的值复制回CPSR
- 将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断用户程序。
ARM微处理器的指令的格式
C语言执行过程
- 预处理->编译(把C语言程序转换为汇编.s)->汇编(将汇编转换为二进制指令.o)->链接(链接库文件与.o文件生成可执行文件)
ARM指令的分类与格式
-
<>位必须有,{}为可选的
ARM指令的寻址方式
寻址方式
- 立即数寻址:操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
- 查看是否符合规范
- 将其转为二进制格式,高低位去掉偶数个的0,看最终的数是否在0~255之间,即可查看是否合法。
- 查看是否符合规范
- 寄存器间接寻址
- 指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定
- 寄存器偏移寻址
- LSL:逻辑左移
- LSR:逻辑右移
- ASL:数学左移
- ASR:数学右移
- ROR:循环右移
- RRX:带扩展的循环移
- 桶形移位器
- 逻辑左移和数学左移是一样的
- 数学右移:低位扔掉,高位补符号位。
- 逻辑右移:低位扔掉,高位补0。
- 循环右移:将扔掉的低位补到高位。
- 基址变址寻址:将基址寄存器的内容与指令中给出的偏移量(<4k)相加/减,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问。寄存器间接寻址是偏移量为0的基址加偏移地址。
LDR R2,[R3,#0X0C]读取R3+0X0C地址上的存储单元的内容,放入R2
STR R!,[R0,#4]!;R0=R0-
LDR
- 多寄存器寻址:多寄存器寻址一次可以传送几个寄存器,允许一条传送16个的任何子集或者所有寄存器。
LDMIA R1!,{R2-R4,R12}//将R1指向的单元中的数据读到R2~R4中,R12中(R1自动加4)
STMIA R0!,{R2-R4,R12}//将寄存器R2~R4,R12中的值保存到R0指向的存储,单元中(R0自动加4)
- 基址寄存器的增长方式
- IA:每次传送后地址增加4
- IB:每次传送前地址增加4
- DA:每次传送后地址减少4
- DB:每次传送前地址减少4
- !:为可选后缀,若使用,在数据传送完毕后,将最后的地址写入基址寄存器,否则基址寄存器的内容不变。(用于基址寄存器之后)
- 堆栈寻址
- 堆栈寻址是一个按特定顺序进行存储的存储区,顺序为后进先出。堆栈的寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。
- 向上生长:向高地址方向生长,称为递增堆栈
- 向下生长:向低地址方向生长,称为递减堆栈
- 堆栈指向最后压入的堆栈有效数据项称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。
- 四种类型的堆栈方式
- 满递增(FA):堆栈向上增长,堆栈指针指向内含有有效数据的最高地址
- 空递增(EA):堆栈向上增长,堆栈指针指向堆栈上的第一个空位置址
- 满递减(FD):堆栈向下增长,堆栈指针指向内含有有效数据的最低地址
- 空递减(ED):堆栈向下增长,堆栈指针指向堆栈上的第一个空位置址
- 堆栈寻址是一个按特定顺序进行存储的存储区,顺序为后进先出。堆栈的寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。
- 相对寻址:相对寻址是基址寻址的一种变通,由程序计数器PC提供标准,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。标号是由一个由汇编器计算的偏移量(即相对地址)
BL SUBR1 ;//调用到SUBR1子程序
BEQ LOOP ;//条件跳转到LOOP标号处
- register int i:将i存放在空闲的寄存器中,不在内存中。
安装7500$
复制文件:RVDS4.0
进入解压rvds4.crack.7z与RVDS_4.0_PRO.tgz
进入rvds4.crack找到rvds.dat,用txt打开
- 打开电脑cmd,ifconfig/all
复制相应的本地物理地址到rvds.dat,ctrl+h替换所有HOSTID。
进入RVDS_4.0_PRO运行setup.exe。
到%99会出现该框框,先不管他
- 之后将rvds4.crack里面的内容,全部复制到安装目录RVDS里。
- 运行crack.bat等其自动结束。
- 到该目录下。复制该文件
- 复制目录
警告
- 无论是安装目录亦或是主机的用户名,皆不可以有中文名。该软件有中文就炸。