ARM汇编寄存器简介

ARM汇编编程基础(一) -- ARM CPU寄存器 本系列文章节选自本人所著《深入浅出嵌入式底层软件开发》。 本系列文章,所需代码请从以下地址下载: http://download.youkuaiyun.com/download/scyangzhu/4602585 ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM寄存器分为2类,普通寄存器和 阅读详情

通常我们在看启动代码的时候会需要用到汇编,或者在出现问题反汇编可以查看问题的原因。这时候就需要对汇编指令和寄存器的用途有比较清楚的认识。下面就是对寄存器的简单描述:

ARM 32位寄存器
ARM汇编器对ARM的寄存器进行了预定义,所有的寄存器和协处理器名都是大小写敏感的.预定义的寄存器如下:

Ro-R15和r0-r15
a1-a4(参数,结果或者临时寄存器,与r0-r3同意)
v1-v8(变量寄存器,与r4-r11同意)
sb和SB(静态基址寄存器,与r9同意)
sl和SL(堆栈限制寄存器,与r10同意)
fp和FP(帧指针,与r11同意)
ip和IP(过程调用中间临时寄存器,与r12同意)
sp和SP(堆栈指针,与r13同意)
lr和LR(连接寄存器,与r14同意)
pc和PC(程序计数器,与r15同意)
cpsr和CPSR(程序状态寄存器)
spsr和SPSR(程序状态寄存器)
f0-f7和F0-F7(FPA寄存器)
s0-s31和S0-S31(VFP单精度寄存器)
d0-d15和D0-D15(VFP双精度寄存器)
p0-p15(协处理器0-15)
c0-c15(协处理器寄存器0-15)
使用说明:
1、当参数少于4个时,子程序间通过寄存器R0R3来传递参数;当参数个数多于4个时,将多余的参数通过数据栈进行传递,入栈顺序与参数顺序正好相反,子程序返回前无需恢复R0R3的值;
2、在子程序中,使用R4~R11保存局部变量,若使用需要入栈保存,子程序返回前需要恢复这些寄存器;R12是临时寄存器,使用不需要保存。
3、R13用作数据帧指针,记作SP;R14用作链接寄存器,记作LR,用于保存子程序返回时的地址;R15是程序计数器,记作PC。
4、ATPCS规定堆栈是满递减堆栈FD;
5、子程序返回32位的整数,使用R0返回;返回64位整数时,使用R0返回低位,R1返回高位。

在这里插入图片描述

参考文章链接:
https://www.cnblogs.com/SoaringLee/p/10532401.html
https://blog.youkuaiyun.com/qq_29350001/article/details/80586534

ARM汇编——PC和LR寄存器理解 寄存器,Arm汇编,PC,LR 阅读详情

相关推荐

ARM汇编:初识寄存器

文章目录CPU内存寄存器(arm) 汇编语言与机器语言一一对应,每一条机器指令都有与之对应的汇编指令。 CPU 地址总线:它的宽度决定CPU寻址能力,最大为2的总线宽度次方。8086宽度20,所以最大寻址为2的20次方为1M。 数据总线:它的宽度决定单次数据传输量,也就是数据传输速度。8086的数据总线宽度是16,单次最大传递2个字节的数据。32位、64位Cpu指的就是数据吞吐量,64位为8字节。 控制总线:它的宽度决定了CPU对其他器件的控制能力,能有多少种控制。 CPU除了有控制器(控件其它器件)、运算

Rain and Tears 2392

ARM 关键几个寄存器

arm 寄存器和对应的汇编描述符 图中缩写如下:R:Register;寄存器 PC:Program Counter;程序计数器 CPSR:Current Program Status Register;当前程序状态寄存器 SPSR:Saved Program Status Register;保存的程序状态寄存器 SP:Stack Pointer;数据栈指针 LR:Link Register;连接

jscese 1万+

ARM汇编编程基础: ARM CPU寄存器与ARM开发

本文提供了一些示例代码来演示ARM寄存器的使用,希望能帮助你更好地理解和使用ARM汇编编程。在这些示例中,我们使用了MOV指令将常量值存储到寄存器中,使用ADD指令将两个寄存器中的值相加并将结果存储到另一个寄存器中。我们还使用了LDR指令从内存中加载数据到寄存器,并使用STR指令将寄存器中的值存储到内存中。在ARM汇编编程中,理解和有效地使用ARM CPU寄存器是至关重要的。需要注意的是,上述示例中的指仅供参考,具体指令和语法可能因不同的ARM汇编器而有所差异。ARM寄存器的使用示例。

ZzVerilog的博客 202

ARM寄存器

一、ARM寄存器: 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(

chunlovenan的专栏 6639

【arm】ARM寄存器以及使用说明

Date: 2018.7.30 1、参考 http://blog.chinaunix.net/uid-20321537-id-1966791.html https://www.cnblogs.com/summer-xwq/p/4153624.html https://blog.youkuaiyun.com/smalosnail/article/details/53048784 2、ARM 3...

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 8425

五分钟搞懂游戏开发中的抗锯齿算法

常见抗锯齿算法总结锯齿由来抗锯齿算法SSAAMSAACSAA 锯齿由来 场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有一个非常重要的阶段,就是光栅化,光栅化主要的作用是将顶点数据的不连续性通过插值计算,将两个顶点之间不存在的点进行弥补,然后实现到屏幕像素点上的一一映射。如图,现在要在屏幕上绘制一...

绿洲守望者 1万+

ARM 37 个通用寄存器详解

一、简介 1、ARM 总共有 37 个寄存器,但是每种模式下最多只能看到 18 个寄存器,其他寄存器虽然名字相同,但是在当前模式不可见。 2、例如,对 r13 这个名字来说,在 ARM 中共有 6 个名叫 r13(又叫 sp)的寄存器,但是在每种特定处理器模式下,只有一个 r13 是当前可见的,其他的 r13 必须切换到它们的对应模式下才能看到。这种设计叫影子寄存器(banked register)。 3、这 37 个寄存器的地址都是不一样的,虽然它们可以有相同的名字。同时,有些寄存器甚至还有别名,比如在汇

weixin_42109053的博客 1万+

XY2-100协议解析

1.XY2-100包括四路信号 : SENDCK(时钟信号)、SYNC(同步信号)、CHANNELX(X通道)、CHANNELY(Y通道)

qq_38360574的博客 9533

ARM 内核寄存器 和 基本汇编语言讲解

对于嵌入式开发者来说,了解汇编语言和内核寄存器是对内核深入理解的基础,本文对 ARM内核寄存器 和 基本汇编语言进行了简单的介绍

不浮夸,不将就,认真对待学知识的我们 4639

内核工作FAST‘25 Artifact Evaluation流程记录

在我们的paper中,复现需要用到傲腾持久化内存,因此,需要AE Reviewer访问到内网服务器中。我们的思路是购买云服务器,将其作为跳板机,内网服务器通过SSH反向代理与公网服务器建立隧道,AE Reviewer通过隧道访问内网服务器。我们在AE过程中使用。然后,把一切复现需要的代码环境,在chroot里面配置完成。

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 1215

步进电机

步进电机

happygrilclh的博客 2140

Arm汇编---寄存器

----------------------------------------- 三、段寄存器 ----------------------------------------------------------------------------------------- 四、标志位 -----------------------------------------------段寄存器是根据内存分段的管理模式而设置的。flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。

csdn546229768的博客 2057

演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

演化算法1.概念2.解决的问题 1.概念 传统算法(如梯度下降法、爬山法)根据导数的性质决定迭代的方向;而演化计算是一组解在一起协同作用产生一个最优解。 2.解决的问题 预测优化:演化计算(蚁群算法、粒子群算法、遗传算法等) 解的聚散、多样性:通过多次聚散,尽快得出最优解(某个解不合要求,要能够发散出去) ...

dear_jing的博客 4162

Linux-ARM汇编及ARM片内寄存器

作为Linux学习中ARM裸机开发第二篇博文,本篇简要介绍了补充汇编语言的一些基础知识以及ARM-A系列片内CPU寄存器。如文章有任何问题欢迎大家指出呀!再后面就要开始进行点灯操作了。

嵌入式入坑,专注点灯。 1729

华为CNA VRM搭建(使用vmware worfstartion搭建)

华为CNA和VRM在 vmware workstation安装使用

weixin_70595351的博客 1810

Anomalib实战之一:自定义数据集

Anomalib支持多种图像扩展名,如".jpg"、“.jpeg”、“.png”、“.ppm”、“.bmp”、“.pgm”、“.tif”、“.tiff"和”.webp"。可以从具有任何这些扩展名的图像中收集数据集。

mingo_敏 6233

ARM内部寄存器与常用汇编指令(ARM汇编)

本文对ARM芯片内部寄存器进行了介绍,同时介绍了ARM汇编常用指令与语法。

C语言、数据结构、单片机、嵌入式实时操作系统、C++ 学习路径记录 1730

XCP实战系列介绍01-测量与标定底层逻辑介绍

XCP-测量与标定底层代码实现介绍,通过对相关API调用关系介绍加深开发人员对其功能的了解。

initiallizer的博客 1万+

ARM汇编之加载寄存器

ARM汇编将常数加载到寄存器用 MOV 和 MVN 直接加载用 MOV32 加载用 LDR Rd, =const 加载加载浮点常数将地址加载到寄存器中ADR 和 ADRL 直接加载用 ADR 加载跳转表地址用 LDR Rd, =label 加载地址加载和存储多个寄存器指令LDR 补充:LDR指令的格式:LDR R,label 和 LDR R,=label的区别 寄存器是CPU的组成部分,是有限存贮容量的高速存贮部件,它们可用来暂存 数据、地址、指令。 更多介绍可查看: ARM寄存器。 将常数加载到寄存器

李玺 3153

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ARM64 寄存器、常用汇编指令收集

ARM64 有34个寄存器,包括31个通用寄存器、SP、PC、CPSR。x0-x7: 用于子程序调用时的参数传递,X0还用于返回值传递x0 - x30是31个通用整形寄存器。每个寄存器可以存取一个64位大小的数。当使用x0 - x30访问时,它就是一个64位的数。当使用w0 - w30访问时,访问的是这些寄存器的低32位,如图:CPSR(状态寄存器)作者:thinkq链接:https://www.jianshu.com/p/2f4a5f74ac7a来源:简书著作权归作者所有。

hknaruto的专栏 5171

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ARM汇编寄存器和常用指令详解

ARM内核有 18 个寄存器,包括 R0~R12,2个R13,R14,R15和 XPSR 寄存器。 其中 R13 寄存器又叫 SP 寄存器, R14 寄存器又叫 LR 寄存器, R15 寄存器也叫 PC 寄存器。

m0_56208280的博客 4478

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上位机知识篇——ARM 汇编语言与寄存器

‌ARM 汇编语言‌是针对 ARM 架构处理器的一种低级编程语言,它直接对应于 ARM 指令集。汇编语言允许程序员对硬件进行精细控制,适用于需要高性能和实时响应的应用场景,如嵌入式系统、操作系统内核、设备驱动程序等。‌特点‌直接硬件访问‌:汇编语言可以直接操作硬件寄存器,实现高效的数据处理。‌性能优化‌:通过精细控制指令执行顺序和资源利用,可以优化程序性能。‌平台依赖性‌:汇编语言与特定的处理器架构紧密相关,不同架构的汇编语言可能不同。

Made In SQL 959

ARM汇编中寄存器分析

理解寄存器 对于我们 动态调试SO 捕获关键值 是非常重要的 R0非常重要 R0 R1 R2 R0 作为函数的第一个参数传递 R1 作为函数的第二个参数传递 R1 作为函数的第三个参数传递 同时R0也是作为 函数的返回值 意思是一个函数调用完后 有返回值的话 就保存在 R0里面 例如: v7 = (v4->functions->GetStringUTFChars)(v4); 我们...

qq_34108752的博客 826

【FreeRTOS】ARM寄存器&汇编语句

目录1.ARM寄存器2. ARM汇编指令3. 实验。

tou_tu_le的博客 489

iOS arm64汇编中寄存器和基本指令

iOS汇编(汇编语言依赖于机器) 真机,arm64汇编, GNU汇编 模拟器:x86汇编(Mac电脑) , AT&amp;T汇编 真机:arm64汇编 寄存器: 通用寄存器 64bit的:x0~x28,29个寄存器每个寄存器都是64位的,64位就是8 个字节,一个寄存器最多能放8个字节的数据 32bit的:w0~w28(属于x0~x28的低32bit) 4个字节 x0~x7...

More reading and learning to become excellent 5432

ARM汇编编程基础之一 —— 寄存器

ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM寄存器分为2类,普通寄存器和状态寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断

myxmu的专栏 1032
上一篇: PCIe学习笔记(一)——硬件设备识别扫盲篇(史无前例的好文章)
下一篇: 谈论bringup我们到底在谈论什么?
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值