ARM课程-(NO.6.寄存器)

ARM

ARM体系结构的数据存储方式

  • 处理器用于存储数据的方式有:大端小端法
  • ARM9处理器微处理器支持字节(8字节),半字(16字节),字(32位)
  • CPU与内存通过数据连接

指令长度与数据类型

异常

  • 只要程序的正常的程序流被暂时中止,处理器将进入异常模式。
  • 如果发生两个或更多异常,那么将按照固定的异常优先级来处理。
ARM课程-(NO.6.寄存器)_第1张图片
Paste_Image.png

复位异常

  • 强制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微处理器的指令的格式

ARM课程-(NO.6.寄存器)_第2张图片
Paste_Image.png

C语言执行过程

  • 预处理->编译(把C语言程序转换为汇编.s)->汇编(将汇编转换为二进制指令.o)->链接(链接库文件与.o文件生成可执行文件)

ARM指令的分类与格式

Paste_Image.png
  • <>位必须有,{}为可选的


    ARM课程-(NO.6.寄存器)_第3张图片
    Paste_Image.png

ARM指令的寻址方式

ARM课程-(NO.6.寄存器)_第4张图片
Paste_Image.png

寻址方式

  • 立即数寻址:操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
    • 查看是否符合规范
      • 将其转为二进制格式,高低位去掉偶数个的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打开

Paste_Image.png
  • 打开电脑cmd,ifconfig/all
ARM课程-(NO.6.寄存器)_第5张图片
Paste_Image.png
  • 复制相应的本地物理地址到rvds.dat,ctrl+h替换所有HOSTID。

  • 进入RVDS_4.0_PRO运行setup.exe。

  • 到%99会出现该框框,先不管他

ARM课程-(NO.6.寄存器)_第6张图片
Paste_Image.png
ARM课程-(NO.6.寄存器)_第7张图片
Paste_Image.png
ARM课程-(NO.6.寄存器)_第8张图片
Paste_Image.png
  • 之后将rvds4.crack里面的内容,全部复制到安装目录RVDS里。
  • 运行crack.bat等其自动结束。
  • 到该目录下。复制该文件
ARM课程-(NO.6.寄存器)_第9张图片
Paste_Image.png
  • 复制目录
ARM课程-(NO.6.寄存器)_第10张图片
Paste_Image.png

警告

  • 无论是安装目录亦或是主机的用户名,皆不可以有中文名。该软件有中文就炸

你可能感兴趣的:(ARM课程-(NO.6.寄存器))