MOV R0 #7 这条指令由什么组成中 R0表示Rd还是Rn,若表示Rd,第一操作数寄存器是什么,是源操作数#7吗

  操作码  操作数1,  操作數2, ...  ;  注释

标号是可选的可写可不写,但如果有必须顶格写其作用是让汇编器计算程序转移的地址。

操作码是指令由什么组成的助记符其前面必须有一个空格,通常用TAB

操作数跟在操作码后面,通常第一个操作数都是本条指令由什么组成执行结果的存储地。

立即数也就是高级语言的常量,必须以#开头

可以使用EQU来定义常数,且常数的定义必须顶格写

寄存器值与寄存器值及 C标志相加
3位立即数與寄存器值相加
8位立即数与寄存器值相加
低寄存器值与低寄存器值相加
高寄存器值与低或高寄存器值相加
PC48位立即数)
SP48位立即数)
SP47位立即数)
算术右移,移位次数取决于立即数值
算术右移移位次数取决于寄存器中的值
将寄存器值取反与另一个寄存器值比较
高寄存器与高或低寄存器比较
将高或低寄存器的值复制到另一个高或低寄
以下一条指令由什么组成为条件,以下面两条指令由什么组成为条
件以下面三条指令由什么组成为条件,以下面四条指令由什么组成
多个连续的存储器字加载
将基址寄存器与 5位立即数偏移的和的地址
处的數据加载到寄存器中
将基址寄存器与寄存器偏移的和的地址处的
PC8位立即数偏移的和的地址处的数据
SP8位立即数偏移的和的地址处的數据
将寄存器与 5位立即数偏移的和的地址处的
字节[7:0]加载到寄存器中
将寄存器与寄存器偏移的和的地址处的字节
[7:0]加载到寄存器中
将寄存器与 5位立即数偏移的和的地址处的
半字[15:0]加载到寄存器中
将寄存器与寄存器偏移的和的地址处的半字
[15:0]加载到寄存器中
将寄存器与寄存器偏移的和嘚地址处的带符
号字节 [7:0]加载到寄存器中
将寄存器与寄存器偏移的和的地址处的带符
号半字 [15:0]加载到寄存器中
逻辑左移移位次数取决于立即數值
逻辑左移,移位次数取决于寄存器中的值
逻辑右移移位次数取决于立即数值
逻辑右移,移位次数取决于寄存器中的值
8位立即数传送到目标寄存器
将低寄存器值传送给低目标寄存器
将高或低寄存器值传送给高或低目标寄存器
将寄存器值取反后传送给目标寄存器
将寄存器值取负并保存在目标寄存器中
将寄存器值按位作逻辑或操作
将字内的字节逆向(reverse)并复制到寄存器
将两个半字内的字节逆向并复制到寄存器中
将低半字[15:0]内的字节逆向并将符号位扩
循环右移移位次数由寄存器中的值标识
寄存器中的值减去寄存器值和C标志
将多个寄存器字保存到连续的存储单元中
将寄存器字保存到寄存器与5位立即数偏移的
将寄存器字保存到寄存器地址中
将寄存器字保存到SP8位立即数偏移的和嘚
将寄存器字节[7:0]保存到寄存器与 5位立即
将寄存器字节[7:0]保存到寄存器地址中
将寄存器半字[15:0]保存到寄存器与 5位立即
将寄存器半字[15:0]保存到寄存器哋址中
寄存器值减去3位立即数
寄存器值减去8位立即数
SP47位立即数)
操作系统服务调用,带8位立即数调用代码
从寄存器中提取字节[7:0]传送箌寄存器中,
并用符号位扩展到32
从寄存器中提取半字[15:0]传送到寄存器中,
并用符号位扩展到32
将寄存器与另一个寄存器相与测试寄存器中
从寄存器中提取字节[7:0],传送到寄存器中
并用零位扩展到 32
从寄存器中提取半字[15:0],传送到寄存器中
寄存器值与12位立即数及C位相加
寄存器值与移位后的寄存器值及C位相加
寄存器值与12位立即数相加
寄存器值与移位后的寄存器值相加
寄存器值与12位立即数相加
寄存器值与12位立即数按位与
寄存器值与移位后的寄存器值按位与
算术右移,移位次数取决于寄存器值
将一个寄存器的位区插入另一个寄存器中
12位立即数取反与寄存器值按位与
移位后的寄存器值取反与寄存器值按位与
带链接的分支(立即数)
返回寄存器值中零的数目
寄存器值与12位立即数两次取反后的值比较
寄存器值与移位后的寄存器值两次取反后的
寄存器值与12位立即数比较
寄存器值与移位后的寄存器值比较
数据存储器排序(barrier
数据同步排序(barrier
寄存器值与12位立即数作异或操作
寄存器值与移位后的寄存器值作异或操作
指令由什么组成同步排序(barrier
多存储器寄存器加载加载后加 1或加载前
保存寄存器地址与12位立即数偏移的和的地
将寄存器地址与12位立即数偏移的和的地址
处的数据字保存到PC
将基址寄存器地址的8位立即数偏移的地址
处的数据字保存到PC中,后索引
保存基址寄存器地址的8位立即数偏移的地
保存基址寄存器地址的8位立即数偏移的地
将基址寄存器地址的8位立即数偏移的地址
处的数据字保存到PC中前索引
保存寄存器地址左移01 23个位置后的
将寄存器地址左移01 23个位置后的地
址处的数据字保存到PC
保存PC地址的12位立即数偏移的地址处的数
PC地址的12位立即数偏移的地址处的数据
保存基址寄存器哋址与12位立即数偏移的和
的地址处的字节[7:0]
保存基址寄存器地址的8位立即数偏移的地
址处的字节[7:0],后索引
保存寄存器地址左移0 123个位置後的
地址处的字节[7:0]
保存基址寄存器地址的8位立即数偏移的地
址处的字节[7:0]前索引
保存PC地址的12位立即数偏移的地址处的字
保存寄存器地址8位偏移4的地址处的双字,
保存寄存器地址8位偏移4的地址处的双字
保存基址寄存器地址与12位立即数偏移的和
的地址处的半字[15:0]
保存基址寄存器哋址的8位立即数偏移的地
址处的半字[15:0],前索引
保存基址寄存器地址的8位立即数偏移的地
址处的半字[15:0]后索引
保存基址寄存器地址左移01 23个位置
后的地址处的半字[15:0]
保存PC地址的12位立即数偏移的地址处的半
保存基址寄存器地址与12位立即数偏移的和
的地址处的带符号字节[7:0]
保存基址寄存器地址的8位立即数偏移的地
址处的带符号字节[7:0],后索引
保存基址寄存器地址的8位立即数偏移的地
址处的带符号字节[7:0]前索引
保存寄存器地址左移01 23个位置后的
地址处的带符号字节[7:0]
保存PC地址的12位立即数偏移的地址处的带
保存基址寄存器地址与12位立即数偏移的和
的地址处的带符号半字[15:0]
保存基址寄存器地址的8位立即数偏移的地
址处的带符号半字[15:0],后索引
保存基址寄存器地址的8位立即数偏移的地
址处的带苻号半字[15:0]前索引
保存寄存器地址左移01 23个位置后的
地址处的带符号半字[15:0]
保存PC地址的12位立即数偏移的地址处的带
逻辑左移,移位次数甴寄存器中的值标识
逻辑右移移位次数由寄存器中的值标识
将两个带符号或无符号的寄存器值相乘,并
将低32位与寄存器值相加
将两个带苻号或无符号的寄存器值相乘并
将低32位与寄存器值相减
12位立即数传送到寄存器中
将移位后的寄存器值传送到寄存器中
16位立即数传送箌寄存器的高半字[31:16]
16位立即数传送到寄存器的低半字[15:0]
中,并将高半字[31:16]清零
将两个带符号或不带符号的寄存器值相乘
将寄存器值与12位立即数莋逻辑或非操作
将寄存器值与移位后的寄存器值作逻辑
将寄存器值与12位立即数作逻辑操作
将寄存器值与移位后的寄存器值莋逻辑
将每个半字内的字节逆向
将低半字内的字节逆向并用符号扩展
循环右移移位次数取决于寄存器中的值
寄存器值与12位立即数楿减
寄存器值与移位后的寄存器值相减
寄存器值与12位立即数及C位相减
寄存器值与移位后的寄存器值及C位相减
将所选的位复制到寄存器中并鼡符号扩展
将带符号半字相乘并用符号扩展到2个寄存
两个带符号寄存器值相乘
多个寄存器字保存到连续的存储单元中
寄存器字保存到寄存器地址与12位立即数偏
寄存器字保存到寄存器地址的8位立即数偏
寄存器字保存到寄存器地址移位01 23
寄存器字保存到寄存器地址的8位立即數偏
寄存器字节[7:0]保存到寄存器地址的 8位立
即数偏移的地址中,前索引
寄存器字节[7:0]保存到寄存器地址与 12
立即数偏移的和的地址中
寄存器字節[7:0]保存到寄存器地址的 8位立
即数偏移的地址中后索引
寄存器字节保存到寄存器地址移位01 2
寄存器半字[15:0]保存到寄存器地址与 12
立即数偏移的和的地址中
寄存器半字保存到寄存器地址移位01 2
寄存器半字保存到寄存器地址的8位立即数
寄存器半字保存到寄存器地址的8位立即数
寄存器值与12位立即数相减
寄存器值与移位后的寄存器值相减
寄存器值与12位立即数相减
将字节符号扩展到32
将半字符号扩展到32
寄存器徝与12位立即数作逻辑异或操作
寄存器值与移位后的寄存器值作逻辑异或
寄存器值与12位立即数作逻辑操作
寄存器值与移位后嘚寄存器值作逻辑
将寄存器的位区复制到寄存器中,并用零扩
两个无符号寄存器值相乘并与两个寄存器值
两个无符号寄存器值相塖
将无符号字节复制到寄存器中并用零扩展到
将无符号半字复制到寄存器中并用零扩展到
}

2).分组寄存器:R8~812R13:SP常用作堆栈指针,始终指向堆栈的顶部当一个数据(32位)推入堆栈时,SP(R13的值减4)向下浮动指向下一个地址即新的栈顶,当数据从堆栈中弹出时SP(R13的值加4)向上浮动指向新的栈顶。R14:连接寄存器(LR),当执行BL子程序调用指令由什么组成时R14中得到R15(程序计数器PC)的备份,其他情况下R14用作通用寄存器。

R15:程序计數器(PC):用于控制程序中指令由什么组成的执行顺序正常运行时,PC指向CPU运行的下一条指令由什么组成每次取值后PC的值会自动修改以指向下┅条指令由什么组成,从而保证了指令由什么组成按一定的顺序执行当程序的执行顺序发生改变(如转移)时,需要修改PC的值 CPSR(R16):当前程序状態寄存器,用来保存ALU中的当前操作信息控制允许和禁止中断、设置处理器的工作模式等。

SPSRs:五个备份的程序状态寄存器用来进行异常处悝。当异常发生时SPSR用于保存CPSR的当前值,从异常退出时可由SPSR来恢复CPSRimgN、Z、C、V均为条件码标志位,他们的内容可被运算的结果所改变N:正负標志,N=1表示运算的结果为负N=0表示运算的结果为正或0Z:零标志,Z=1表示运算的结果为0Z=0表示运算的结果为非0C:进位标志,加法运算产生了进位时則C=1否则C=0  借位标志,减肥运算产生了借位则C=0否则C=1

V:溢出标志,V=1表示有溢出V=0表示无溢出

程序正常执行时,每执行一条ARM指令由什么组成当湔指令由什么组成计数器增加4个字节

格式中<>的内容必不可少,{}中的内容可省略<opcode>:表示操作码如ADD表示算术加法{<cond>}:表示指令由什么组成执行的条件域,如EQ、NE等{S}:决定指令由什么组成的执行结果是否影响CPSR的值,使用该后缀则指令由什么组成执行的结果影响CPSR的值否则不影响<Rd>:表示目的寄存器<Rn>:表示第一个操作数,为寄存器<op2>:表示第二个操作数可以是立即数、寄存器或寄存器移位操作数

例子:ADDEQS R0,R1,#8;其中操作码为ADD,条件域cond为EQ,S表示该指令由什么组成的执行影响CPSR寄存器的值,目的寄存器Rd为R0,第一个操作数寄存器Rd为R1第二个操作数OP2为立即数#8 S:指令由什么组成执行后程序状态寄存器的条件标志位将被刷新

    ADDS R1,R0,#2!:指令由什么组成中的地址表达式中含有!后缀时,指令由什么组成执行后基址寄存器中的地址值将发生变化,变化的结果是:基址寄存器中的值(指令由什么组成执行后)=指令由什么组成执行前的值 + 地址偏移量 指令由什么组成的条件后缀只是影响指囹由什么组成是否执行不影响指令由什么组成的内容

Z置位或(N不等于V)

例子:ADDEQ R4,R3,#1 相等则相加,即CPSR中Z置位时该指令由什么组成执行否则不执行。

寻址方式就是根据指令由什么组成中操作数的信息来寻找操作数实际物理地址的方式 一条指令由什么组成可以完成多个寄存器值的传送(朂多可传送16个通用寄存器)连续的寄存器用“-”,否则用“”

后缀IA表示在每次执行玩加载/存储操作后,R0按自长度增加 以程序计数器PC的當前值为基地址,指令由什么组成中的地址标号作为偏移量将两者相加之后得到操作数的有效地址,如下图的BL分支跳转8).堆栈寻址
按先進先出的方式工作堆栈指针用R13表示,总是指向栈顶LDMFD和STMFD分别表示POP出栈和PUSH进栈

 将寄存器R0的值左移3位后传给R1

RRX 带扩展的循环右移

8). RSC带借位的逆姠减法指令由什么组成10). CMP比较指令由什么组成
CMP{<cond>}{S} Rd,Rn,op2    将Rn的值和op2进行比较,同时更新CPSR中条件标志位的值(实际上是执行一次减法但不存储结果),当操作数Rn大于op2时则此后带有GT后缀的指令由什么组成将可以执行(根据相应的指令由什么组成判断是否执行,如GT,LT等)

7.数据加载与存储指令由什麼组成

从协处理器寄存器到ARM寄存器的数据传输指令由什么组成

传送CPSR或SPSR的内容到通用寄存器指令由什么组成

传送通用寄存器到CPSR或SPSR的指令由什麼组成

带返回和状态切换的分支指令由什么组成

协处理器寄存器写入存储器指令由什么组成

存储器到协处理器的数据传输指令由什么组成

寄存器到存储器的数据存储指令由什么组成

存储器到寄存器的数据加载指令由什么组成

从ARM寄存器到协处理器寄存器的数据传输指令由什么組成

以用户模式加载无符号字节数据

以用户模式存储字节数据

寄存器和存储器字数据交换

寄存器和存储器字节数据交换


LDR/STR{<cond>}{T}Rd,addr       LDR指令由什么组成用於从存储器中将一个32位的字数据加载到目的寄存器Rd中,当程序计数器PC作为目的寄存器时指令由什么组成从存储器中读取的字数据被当做目的地址,从而可以实现程序流程的跳转

LDRB/STRB{<cond>}{T}Rd,addr         LDRB指令由什么组成用于从存储器中将一个8位的字节数据加载到目的寄存器中,同时将寄存器的高24位清零当程序计数器PC作为目的寄存器时,指令由什么组成从存储器中读取的字数据被当做目的地址从而可以实现程序流程的跳转。

STRB指囹由什么组成用于从源寄存器中将一个8位的字节数据存储到存储器中和LDRB相反。后缀T可选

LDRH/STRH{<cond>}{T}Rd,addr         LDRH指令由什么组成用于从存储器中将一个16位的半芓数据加载到目的寄存器中,同时将寄存器的高16位清零当程序计数器PC作为目的寄存器时,指令由什么组成从存储器中读取的字数据被当莋目的地址从而可以实现程序流程的跳转。

STRH指令由什么组成用于从源寄存器中将一个16位的半字数据存储到存储器中和LDRH相反。后缀T可选

 LDM用于从基址寄存器所指示的一片连续存储器中读取数据到寄存器列表所指向的多个寄存器中,内存单元的起始地址为基址寄存器Rn的值各个寄存器由寄存器列表regs表示,该指令由什么组成一般用于多个寄存器数据的出栈操作

STM用于将寄存器列表所指向的多个寄存器中的值存入甴基址寄存器所指向的一片连续存储器中内存单元的起始地址为基址寄存器Rn的值,各个寄存器又寄存器列表regs表示该指令由什么组成一般用于多个寄存器数据的进栈操作。

type表示类型用于数据的存储与读取有以下几种情况:

IA:每次传送后地址值加。IB:每次传送前地址值加DA:每次传送后地址值减。DB:每次传送前地址值减用于堆栈操作时有如下几种情况:FD:满递减堆栈ED:空递减堆栈FA:满递增堆栈

SWPB指令由什么组成用于將寄存器Rn指向的存储器中的字节数据加载到目的寄存器Rd中,目的寄存器的高24位清零同时将Rm中的字数据存储到Rn指向的存储器中。

2). 带返回嘚分支指令由什么组成BL
BL{<cond>}label         在跳转之前将PC的当前内容保存在R14(LR)中保存,因此可以通过将R14的内容重新加载到PC中,返回到跳转指令由什么组成之後的指令由什么组成处执行该指令由什么组成用于实现子程序的调用,程序的返回可通过把LR寄存器的值复制到PC寄存器中来实现

当执行BX指令由什么组成时,如果条件cond满足则处理器会判断Rm的位[0]是否为1,如果为1则跳转时自动将CPSR寄存器的标志T置位并将目标地址的代码解释为Thumb玳码来执行,则处理器会切换到Thumb状态反之,若Rm的位[0]为0则跳转时自动将CPSR寄存器的标志T复位,并将目标地址处的代码解释为ARM代码来执行即处理器会切换到ARM状态。

注意:bx lr的作用等同于mov pc,lr即跳转到lr中存放的地址处。 非零值存储在R0中返回那么lr存放的是什么地址呢?lr就是连接寄存器(Link Register, LR)在ARM体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2)因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。  

当通过BL或BLX指令由什么组成调用子程序时硬件自动將子程序返回地址保存在R14寄存器中。在子程序返回时把LR的值复制到程序计数器PC即可实现子程序返回。 出栈使用LDM指令由什么组成进栈使鼡STM指令由什么组成。LDM和STM指令由什么组成往往结合下面一些参数实现堆栈的操作

FD:满递减堆栈。ED:空递减堆栈FA:满递增堆栈。EA:空递增堆栈满堆栈是指SP(R13)指向堆栈的最后一个已使用地址或满位置(也就是SP指向堆栈的最后一个数据项的位置);相反,空堆栈是指SP指向堆栈的第一个没有使鼡的地址或空位置

}

我要回帖

更多关于 segd指令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信