[ARM裸机程序][7]ARM 指令分类学习

发布者:等风来88888最新更新时间:2022-04-09 来源: eefocus关键字:ARM  裸机程序  指令分类 手机看文章 扫描二维码
随时随地手机看文章

算术移位寄存器和逻辑指令

MOV传送

MOV{条件}{S}  ,

dest = op_1


MOV从另一个寄存器、被移位的寄存器或者一个立即数装载一个值到目的寄存器。还可以指定相同的寄存器来实现 NOP 指令。如:MOV R0,R0。移位后传送指令:MOV R0, R0, LSL#3。


如果 R15 是目的寄存器,将修改程序计数器或标志。这用于返回到调用代码,方法是把连接寄存器的内容传送到 R15:

退出到调用者:MOV PC, R14。

退出到调用者并恢复标志位:MOVS PC, R14。

指令中后缀有S说明该指令会改变CPSR。


MVN传送取反

mvn{条件}{S} ,

dest = !op_1


MVN在传送的之前位被反转了,把被取反的值传送到一个寄存器中。这是逻辑非操作而不是算术操作,这个取反的值加1才是它的取负的值:


MVN R0, #4 ; R0 = -5

MVN R0, #0 ; R0 = -1


SUB减法

SUB{条件}{S} , ,

dest = op_1 - op_2


SUB用操作数1减去操作数2,把结果放置到目的寄存器中。操作数1是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即值:


SUB R0, R1, R2 ; R0 = R1 - R2

SUB R0, R1, #256 ; R0 = R1 - 256

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


减法可以在有符号和无符号数上进行,减数不可为立即数。


ADD加法

ADD{条件}{S} , ,

dest = op_1 + op_2


ADD将把两个操作数加起来,把结果放置到目的寄存器中。操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器或一个立即值:


ADD R0, R1, R2 ; R0 = R1 + R2

ADD R0, R1, #256 ; R0 = R1 + 256

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


AND逻辑与

AND{条件}{S} , ,

dest = op_1 AND op_2


AND将在两个操作数上进行逻辑与,把结果放置到目的寄存器中;对屏蔽你要在上面工作的位很有用。 操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器或一个立即值:


AND R0, R0, #3 ; R0 = 保持 R0 的位 0 和 1,丢弃其余的位。


AND 的真值表:


    Op_1 Op_2 结果

    0    0    0

    0    1    0

    1    0    0

    1    1    1


BIC位清除

BIC{条件}{S} , ,

dest = op_1 AND (!op_2)


BIC是在一个字中清除位的一种方法,与 OR 位设置是相反的操作。操作数2是一个32位位掩码(mask)。如果如果在掩码中设置了某一位,则清除这一位。未设置的掩码位指示此位保持不变。


    BIC R0, R0, #0b1011 ; 清除 R0 中的位 0、1和 3


BIC 真值表:


    Op_1 Op_2 结果

    0     0    0

    0     1    0

    1     0    1

    1     1    0


比较指令

CMP : 比较

CMP{条件}{P}  ,

status = op_1 - op_2


CMP允许把一个寄存器的内容如另一个寄存器的内容或立即值进行比较,更改状态标志来允许进行条件执行。它进行一次减法,但不存储结果,而是正确的更改标志。标志表示的是操作数1比操作数2如何(大小等)。如果操作数1大于操作操作数2,则此后的有 GT 后缀的指令将可以执行。明显的,你不需要显式的指定 S 后缀来更改状态标志… 如果你指定了它则被忽略。

会影响程序状态字:

寄存器 15 (26-bit 模式):

R15 构造如下:


  Bit  31  30  29  28  27  26  25------------2  1  0

       N   Z   C   V   I   F    程 序 计 数 器   S1 S0


标志的意义:


N  Negative        如果结果是负数则置位

Z  Zero            如果结果是零则置位

C  Carry           如果发生进位则置位

O  Overflow        如果发生溢出则置位

I  IRQ             中断禁用

F  FIQ             快速中断禁用


S1 和 S0 是处理器模式标志:


S1   S0   模式

0    0    USR - 用户模式

0    1    FIQ - 快速中断模式

1    0    IRQ - 中断模式

1    1    SVC - 超级用户模式


在 R15 作为一个指令的第一个操作数的时候,只有程序计数器部分是可以获得的。所以,下列指令把 PC 复制到一个寄存器中并向这个目标寄存器加上 256:ADD R0, R15, #256


TST : 测试位指令

 TST{条件}{P}  ,

 Status = op_1 AND op_2


TST 类似于 CMP,不产生放置到目的寄存器中的结果。而是在给出的两个操作数上进行操作并把结果反映到状态标志上。使用 TST 来检查是否设置了特定的位。操作数 1 是要测试的数据字而操作数 2 是一个位掩码。经过测试后,如果匹配则设置 Zero 标志,否则清除它。象 CMP 那样,你不需要指定 S 后缀。


TST     R0, #0b1 ; 测试在R0中是否设置了位0


关键字:ARM  裸机程序  指令分类 引用地址:[ARM裸机程序][7]ARM 指令分类学习

上一篇:[ARM裸机程序][6]ARM GNU汇编程序示例
下一篇:s3c2440的系统时钟

推荐阅读最新更新时间:2024-11-10 11:53

ARM-Linux移植之(一)——内核启动流程分析
内核版本:2.6.22 为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少。 内核启动分为三个阶段,第一是运行head.S文件和head-common.S,第三个阶段是允许第二是运行main.c文件 对于ARM的处理器,内核第一个启动的文件是arc/arm/kernel下面的head.S文件。当然arc/arm/boot/compress下面也有这个文件,这个文件和上面的文件略有不同,当要生成压缩的内核时zImage时,启动的是后者,后者与前者不同的时,它前面的代码是做自解压的,后面的代码都相同。我们这里这分析arc/arm
[单片机]
ARM S3C44B0X 之 看门狗定时器
当受到故障,如噪声或系统错误的干扰时,s3c44b0x看门狗定时器能够产生复位信号,使CPU复位,它也可以用作一个普通的16位定时器使用,计算完产生中断信号。如果用作复位信号,可以产生一个长达128MCLK时钟周期的复位信号。 S3C44B0X 内部的watchdog结构如下图所示: 500)this.width=500; border=0 在S3C44B0X内部由3个16位的特殊功能寄存器控制看门狗定时器: WTCON Reg: 功能控制器 WTDATA Reg:数据存储器 WTCNT Reg: 计数存储器 16位的WTCON寄存器在S3C44B0X复位时的地址为:0x01D
[单片机]
ARM之异常
异常的介绍 概念 异常会导致处理器暂停程序执行以处理事件,例如外部生成的中断或试图执行未定义的指令。异常可以由内部和外部源生成,通常,当出现异常时,处理器状态会在处理异常之前立即保存。这意味着,当事件被处理后,可以从发生异常的地方恢复原始状态并恢复程序执行。 可能会同时生成多个异常,并且在处理器处理异常时可能会生成一个新的异常(异常也可以嵌套) 下图为ARM所用工作模式的介绍 他的中断又分为以下这些 我们4412的板子的异常向量表在0XFFFF 0000这个位置,所以我们首先要开启MMU,才可以去访问这个异常向量表,这时候我们就需要用到汇编来定义 .align 2 .text .global _start _s
[单片机]
<font color='red'>ARM</font>之异常
基于ARM9TDMI的简易直流电子负载设计
0 引言 现实生活中负载的形式较为复杂,多为一些动态负载,如:负载消耗的功率是时间的函数;或者负载工作在恒定电流、恒定电阻;负载为瞬时短路负载;以及在仪表测试时,如果想对其输出特性进行可靠、全面且比较简单、快捷的测试等。传统负载不能模拟这些复杂的负载形式,关键在于不能完成自动测试,因此,要实现这些功能离不开电子负载。 目前的电子直流负载由于电路设计和电器元件选择的不完善,导致其不能在较大电流和较高电压下稳定、快速、精确的完成测量任务。本系统采用32位的ARM9TDMI为主控芯片,同时借助外部16位A/D转换芯片ADSlll5的辅助电路,能够保存更多的采样数据,从而减小了采样信号的失真度,实现了稳定快速的实时测量。对硬件电路的设计,
[单片机]
基于<font color='red'>ARM</font>9TDMI的简易直流电子负载设计
第1天-ARM汇编指令B/BL
第1天-ARM汇编指令 B : 分支 (Branch) B{条件} 地址 B 是最简单的分支。一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的地址,从那里继续执行。注意存储在分支指令中的实际的值是相对当前的 R15 的值的一个偏移量;而不是一个绝对地址。它的值由汇编器来计算,它是 24 位有符号数,左移两位后有符号扩展为 32 位,表示的有效偏移为 26 位(+/- 32 M)。 在其他处理器上,你可能经常见到这样的指令: OPT 1 LDA &70 CMP #0 BEQ Zero STA &72 .Zero RTS (取自 Acorn Electron User Guide issue 1 page 213)
[单片机]
A57继任者明年商用 ARM A72新架构展望
    明年商用 ARM A72新架构展望   最早在高端机行列首先应用 的big.LITTLE处理器架构在近几年连续普及化并且衍生出了众多版本,其中又以四小核+四小核这样的廉价八核组合方式最为流行,来自联发科以及骁龙 600系列等的产品都采用了这样的处理器架构;在A53/A57得到大范围普及之后,ARM又在2月首次公布了下一代旗舰架构Cortex- A72,3.5倍于当年A15性能的水平也让我们对它充满期待。  A57继任者/明年普及 ARM A72新架构展望   64位设计 性能3.5倍于A15   与目前流行的A53/A57相同,全新的Cortex-A72架构同样基于64位的ARMv8设计,并且我们从这个数字
[手机便携]
ARM GCC 内嵌汇编手册
关于这篇文档 对于基于ARM的RISC处理器,GNU C编译器提供了在C代码中内嵌汇编的功能。这种非常酷的特性提供了C代码没有的功能,比如手动优化软件关键部分的代码、使用相关的处理器指令。 这里设想了读者是熟练编写ARM汇编程序读者,因为该片文档不是ARM汇编手册。同样也不是C语言手册。 这篇文档假设使用的是GCC 4 的版本,但是对于早期的版本也有效。 GCC asm 声明 让我们以一个简单的例子开始。就像C中的声明一样,下面的声明代码可能出现在你的代码中。 /* NOP 例子 */ asm( mov r0,r0 ); 该语句的作用是将r0移动到r0中。换句话讲他并不干任何事。典型的就是NOP指令,作用就是短时的延时。 请接着阅
[单片机]
<font color='red'>ARM</font> GCC 内嵌汇编手册
ARM Cortex-A12架构解读:支持与A7混搭 性能提升40%
6月3日下午消息,ARM计划推出全新Cortex-A12架构,Cortex-A12相比此前的A9性能提升40%,其终端产品定价于200美元档位。 目前Cortex-A9和Cortex-A15之间并没有过度产品,于是也有部分厂商在独自寻找某种平衡,如高通推出的Krait架构,介于A9与A15之间,按照高通官方的说法,其Krait架构接近于A15。 ARM各价位段最优解决方案 此次ARM推出A12架构,性能相比A9提升40%,并且支持ARM的big.LITTLE,可以与功耗更小的A7架构搭配,如此可在正常工作下采用A7架构处理器保证续航,而在处理复杂运算启用A12架构保证流畅性。目前市售的所谓八核版三星Galaxy S
[单片机]

推荐帖子

请大家帮忙看看
请问大家一个问题,我现在刚把单片机弄熟了,但我还想学学其他的知识,我是读电子信息工程专业的,为了以后工作需要,想往单片机和嵌入式发展,请问接下来该学习哪些芯片?我现在学习一下stm32,作为从单片机到嵌入式的过渡,觉得怎么样?谢谢!请大家帮忙看看原帖由欧侃于2011-9-1116:28发表请问大家一个问题,我现在刚把单片机弄熟了,但我还想学学其他的知识,我是读电子信息工程专业的,为了以后工作需要,想往单片机和嵌入式发展,请问接下来该学习哪些芯片?我现在
欧侃 ARM技术
单片机控制真彩色液晶显示方案PVA050-256
名称:单片机显示终端型号:PVA050-256平望显示控制产品核心电路采用ALTERA公司的大规模可编程集成电路(FPGA)EPM3128编程实现,性能稳定可靠。适配于cpu:51、96、X86、8088、Z80、DSP等,采用ALTERA公司大规模可编程集成电路(FPGA)EPM3128编程实现,性能稳定,不局限于单色的字体问题,高宽温,高亮度,大视角。
maker 单片机
驱动这种OLED屏 ,对主控芯片有何要求?
哪个坛友知道的麻烦讲一下。之前的芯片是51内核的,屏幕是段码屏,现在想换成OLED屏幕,我感觉芯片会驱动不了OLED,整个方案得改。驱动这种OLED屏,对主控芯片有何要求?驱动这种OLED屏,对主控芯片有何要求?这种显示屏预留了驱动引脚,驱动显示屏有4线SPI总线、3线SPI总线、IIC总线,这三种总线方式可以通过单片机的引脚来模拟,可以写出模拟驱动时序,像51单片机、32单片机、MSP430等主控芯片均可驱动,兼容性很好 用51核的单片机能直接驱动不TFT和OLE
QWE4562009 分立器件
帮忙给我指点一下啊...急啊
我发过两篇了..但是一直都没人解答我自己这样写了一段你们给看看对吗DSP有4个字节一个一个的往SPI上发送.然后与SPI上已计算出的一个字节进行比较unsignedRev_data(unsignedflag_msb)//这是一个接收返回函数,有关硬件的{}voidMCU_checksum(void)unsignedcharretdata_group;unsignedcharvalid_data;unsignedchartemp_1
fanfanworm 嵌入式系统
如何在wince系统下(精简版的.net framework)用c#编程实现抓屏并保存到文件
由于精简版的.netframework下很多功能不支持,即使使用平台调用我也搞不定,希望有高手能给出抓屏的源代码本人不胜感谢,再次强调一下是精简版的.netframework,我在网上看过一些代码,但都只能在pc上运行的,如这样的代码:privatestaticexternboolBitBlt(IntPtrhdcDest,//目标DC的句柄intnXDest,intnYDest,intn
stephen100 WindowsCE
用51做的简易计算器 带源程序和proteus仿真电路图
做的简易计算器带源程序和proteus仿真电路图用51做的简易计算器带源程序和proteus仿真电路图51做的简易计算器.......下下来看看……我竟然没芯币了!很早就想做了,下来看看先下来看看先很好,谢谢楼主分享。我现在正在学习PROTEUS软件下来学习了。做的很不错,用C语言写的,呵呵下来看看嘻嘻,谢谢;啊~~晕,还要芯币啊。。。。。怎么弄啊。。。这里的好东西好多啊!!我要下下下!1gfdgsrdgfdsghg我没钱啊啊啊啊啊同
axhui 51单片机
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved