Arm汇编---寄存器

这篇具有很好参考价值的文章主要介绍了Arm汇编---寄存器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Arm汇编常见的寄存器

  • 寄存器:r0~r15, sp, lr, sb, sl, fp, ip, pc
  • 条件码:eq, ne, hs, lo, mi, pl, vs, vc, hi, ls, ge, lt, gt, le, al

------------------------------------------ 一、数据寄存器 ---------------------------------------------

;CM3 在一定程度上支持 64 位整数。
;其中 LDRD/STRD 就是为 64 位整数的数据传送而设的,语法 格式为:

    LDRD.W RL, RH, [Rn, #+/-offset] {!}
    STRD.W RL, RH, [Rn, #+/-offset] {!}
    LDRD.W RL, RH, [Rn],#+/-offset
    STRD.W RL, RH, [Rn],#+/-offset

    LDR R2, =0x1000     ;(0x1000)= 0x1234_5678_ABCD_EF00 : 00 EF CD AB 78 56 34 12
    LDRD.W R0, R1,[R2]  ;R0= 0xABCD_EF00, R1=0x1234_5678
    STRD.W R1, R0,[R2]  ;(0x1000)=0xABCD_EF00_1234_5678 : 78 56 34 12 00 EF CD AB

------------------------------------------ 二、指针寄存器 ---------------------------------------------


------------------------------------------ 三、段寄存器 -----------------------------------------------

段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。


------------------------------------------ 四、标志位 -----------------------------------------------

flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息

溢出 方向 中断 跟踪 符号 辅进位 奇偶 进位
OF DF IF TF SF ZF AF PF CF

ARM架构与体系

ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS/MHz的指令处理速度。

ARM指令32位、4个字节

31~28 | 27~25 | 24~21 | 20 | 19~16 | 15~12 | 11~0

0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000

cond | opcode | Rn | Rd | Op2

ARM指令格式一般如下:
{}{s},{,}
格式中< >的内容是必不可少的,{ }中的内容可忽略

表示操作码。如ADD表示算术加法
{} 表示指令执行的条件域。如EQ、NE等,缺省为AL。
{S} 决定指令的执行结果是否影响CPSR的值,使用该后缀则指令执行结果影响CPSR的值,否则不影响
表示目的寄存器
表示第一个操作数,为寄存器
表示第二个操作数,可以是立即数。寄存器和寄存器移位操作数

text:00000F5E BEQ loc_F74

解释1:

31-28 : cond(条件域) => 0000 #因为是B指令 所以无条件

27-25 : 101 #因为101就是扽与BEQ

24 : 0 #B就是0 BL就是1

23-0 : offset相对偏移量

offset= (0F74-pc值)/4 #处理器处于ARM状态(三级流水:PC总是指向第3条指令)时,每条指令为4个字节 ,PC值 = 当前程序执行位置 + 8字节 ,除4 是代码对齐处理

0000 1010 0000 0000 0011-》 A003-》 300A

解释2

31-28字段,cond是条件码,就是表明这条语句里是否有大于、等于、非零等的条件判断。

27-26位为保留位,恒为00

25位,shifter_operand段存放的是立即数还是寄存器,若为寄存器则为0,如果是立即数则为1

24-21 位为opcode

20位:表明指令是否会影响程序状态寄存器,如果是就是1,否则为0。

19-16位,表示第一个源操作数寄存器。

11-0 目的寄存器

http://armconverter.com/ 在线转化指令

寄存器交互指令

LDR R1,[R2],把R2指向的位置的数据给R1

STR R1,[R2],在R2指向的地址,存储R1

PUSH:入栈
POP:出栈

数据算数指令

ADD R0, R1, R2 -> R0 = R1 + R2

ADD R0, R1, #256 -> R0 = R1 + 256

ADD R0, R2, R3,LSL#1 -> R0 = R2 + (R3 << 1)

SUB R0, R2, R3,LSL#1 ; R0 = R2 - (R3 << 1)

数据逻辑运算指令

与:AND
或:ORR
异或:EOR

LSL:逻辑左移
LSR:逻辑右移

比较指令

CMP:比较指令

其他指令

SWT:切换用户模式
伪指令:DCB


ARM寄存器

R0-R7: 通用寄存器
R8-R10:不常用的通用寄存器
R11:基质寄存器(FP)
R12:暂时寄存器(IP)
R13:堆栈制作(SP)
R14:链接寄存器(LR)
CPSR:状态寄存器

ESP:32位寄存器,sp 是16位寄存器,ESP寄存器通常用来表示栈顶的值。文章来源地址https://www.toymoban.com/news/detail-433674.html

到了这里,关于Arm汇编---寄存器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【汇编中的寄存器分类与不同寄存器的用途】

    寄存器分类 在计算机体系结构中,8086CPU,寄存器可以分为以下几类: 1. 通用寄存器: 通用寄存器是用于存储数据和执行算术运算的寄存器。在 x86 架构中,这些通用寄存器通常包括 AX、BX、CX、DX、SI、DI、BP 和 SP。其中,AX、BX、CX 和 DX 寄存器可以分别作为累加器(accumulat

    2024年02月09日
    浏览(41)
  • 16位汇编通用寄存器

    1、输入命名debug,进入调试程序 2、r 命令显示寄存器 3、a命令输入汇编指令 4、t命令单步执行汇编指令 5.数据溢出后标志位NC 变为NY, 0变成1 最后A

    2023年04月11日
    浏览(47)
  • 通用寄存器-汇编复习(1)

    弄清寄存器表达,原理和配件及汇编实验验证。 8086cpu寄存器,字在寄存器存储 往期文章: 汇编语言基础-汇编复习(0)_luozhonghua2000的博客-CSDN博客 一个典型的 CPU(此处讨论的不是某一具体的 CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。前

    2024年02月07日
    浏览(34)
  • 【汇编语言】CS、IP寄存器

    理论:CPU执行何处的指令,取决于CS:IP 应用:程序员可以通过改变CS、IP中的内容,进行控制CPU即将要执行的目标指令; 问题:如何改变CS、IP中的值? 设想: 1、通过使用Debug中的R命令进行修改寄存器的值,例如rcs, rip。 结论:不可以。原因是:Debug是调试手段,并非程序方

    2024年02月08日
    浏览(38)
  • 汇编语言——第11章 标志寄存器

    目录 ​​​​​​​ 引言 11.1 ZF标志 11.2 PF标志 11.3 SF标志 检测点11.1 11.4 CF标志 11.5 OF标志 检测点11.2 11.6 abc指令 11.7 sbb指令 11.8 cmp指令 11.9 检测比较结果的条件转移指令 检测点11.3 11.10 DF标志和串传送指令 1、DF标志 2、串传送指令 11.11 pushf和popf 11.12 标志寄存器在Debug中的表示

    2024年02月07日
    浏览(32)
  • 一、1.汇编指令、寄存器和寻址方式

    立即数:可以立即在一条机器指令后找到具体数值的数,如内存中00位写着加指令,01位写着1100_1111,意思就是将1100_1111(十进制207)加到某处,反之可以表示数据的地址。 低端字节序:16位寄存器数据存入内存(内存单位为8位),寄存器低位存入内存低位(如00)高位存入内

    2024年02月14日
    浏览(39)
  • 8086汇编语言寄存器清零学习

    mov ax, 0      这样应清零了; sub ax, ax     这样也清了; xor ax, ax     这样也清零了;自己跟自己异或,异或是同则结果为0、不同结果为1;自己和自己,每一位都是相同的,异或后结果为0; and ax, 0     和0相与,这样也清零了; 自己写代码用 xor ax, ax ,用这个就对了,都

    2024年02月11日
    浏览(31)
  • 【汇编语言】栈区与SS:SP寄存器

    汇编语言 - 栈 栈是一块特殊的内存空间,本文涉及的CPU为8086CPU,所有与内存地址有关的数字皆为16进制 栈的运行规律 - 先进后出,后进先出 以下为入栈的过程: 以下是出栈的过程: 以上就是栈的运行机制,栈的入栈叫做push,出栈叫做pop 在8086CPU中,栈是一块特殊的内存空

    2023年04月08日
    浏览(46)
  • ARM寄存器组织

     ARM有37个32位长的寄存器: 1个用做PC(Program Counter); 1个用做CPSR(Current Program Status Register); 5个用做SPSR(Saved Program Status Registers); 30个通用寄存器。 ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器均为32位的寄存器。6个状态寄存器,用以标识CPU的工作状

    2024年02月01日
    浏览(70)
  • ARM 寄存器

    Cortex A 系列的 ARM 处理器共有 40 个 32 位寄存器,其中 33 个为通用寄存器,7 个为状态寄存器。用户模式和系统模式共用同一组寄存器。 一、未分组寄存器 R0~R7 有些寄存器是所有运行模式共用的,如 R0~R7,它们被称为未分组寄存器。 在所有运行模式下,未分组寄存器都指向同

    2024年02月02日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包