主要的汇编指令有哪些?

如题所述

LDR 和STR——用于字和无符号字节
指令格式:
LDR/STR{cond}{T} Rd,<地址>
LDR/STR{cond}B{T} Rd,<地址>

LDR{cond}{T} Rd,<地址> 加载指定地址的字数据到Rd中;
STR{cond}{T} Rd,<地址> 存储Rd中的字数据到指定的地址单元中;
LDR{cond}B{T} Rd,<地址> 指令加载指定地址的字节数据到Rd的的最低字节中(Rd的高24位清零);
STR{cond}B{T} Rd, <地址> 指令存储Rd中的最低字节数据到指定的地址单元中。
T为可选后缀,若有T,那么即使处理器是在特权模式下,存储系统也将访问看成处理器是在用户模式下,T 在用户模式下无效,不能与前索引偏移一起使用T。

地址部分可用的形式有4种:

零偏移(zero offset) [Rn] ,Rn的值作为传送数据的地址。如:
LDR R0,[R1];
前索引偏移(pre-indexed offset) [Rn,Flexoffset]{!} 在数据传送之前,将偏移量Flexoffset加到Rn 中。其结果作为传送数据的存储器地址。若使用后缀“!”,则结果写回到Rn 中,且Rn 不允许是R15,如:
LDRB R0,[R1,#8]
LDR R0,[R1,#8]!
程序相对偏移(program relative) label(label 必须是在当前指令的土4KB 范围内) 。
程序相对偏移是前索引形式的另一种版本。从PC 计算偏移量,并将PC 作为Rn 生成前索引指令,不能使用后缀“!”,如:
LDR R0,place ;
place地址装入R0
后索引偏移(post-indexed offset) [Rn],Flexoffset。在数据传送后,将偏移量Flexoffset 加到Rn 中,结果写回到Rn,Rn 不允许是R15,如:
LDR R0,[R1],R2,LSL#2 ;
将存储器地址为R1 的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
偏移量Flexoffset可以是下两种形式之:
1) 取值范围是-4095 到+4095 的整数的表达式,经常是数字常量,如:
STR R5,[R7],#--8
2) 一个寄存器再加上移位(移位由立即数指定),如:
{-}Rm{,shift}
其中:
- :可选负号。若带符号“一”,则从Rn 中减去偏移量。否则,将偏移量加到Rn 中。
Rm :内含偏移量的寄存器。Rm 不允许是R15。
Shift:Rm 的可选移位方法。可以是下列形式的任何一种:
ASR n :算术右移n 位(1<=n<=32)
LSL n :逻辑左移n 位(1<=n<=31)
LSR n :逻辑右移n 位(1<=n<=32)
ROR n :循环右移n 位(1<=n<=31)
RRX :循环右移1 位,带扩展。
AND―――――逻辑”与”操作指令
指令格式:

AND{cond}{S} Rd,Rn,operand2
AND指令将操作数operand2 与Rn 的值按位逻辑”与”,结果存放到目的寄存器Rd 中。若设置S,则根据运算结果影响N、Z位,在计算第二操作数时,更新C位,不影响V位(指令ORR、EOR、BIC 对标志位的影响同AND 指令)。
指令示例:
ANDS R1,R1,R2 ;R1=R1&R2,并根据运算的结果更新标志位
AND R0,R0,#0x0F ;R0=R0&0x0F,取出R0最低4位数据。

ORR―――――逻辑”或”操作指令
指令格式:ORR{cond}{S} Rd,Rn,operand2 ORR指令将操作数operand2 与Rn 的值按位逻辑”或”,结果存放到目的寄存器Rd 中。指令示例:
ORRS R1,R1,R2 ;R1=R1|R2,并根据运算的结果更新标志位
ORR R0,R0,#0x0F ;R0=R0|0x0F,将R0最低4位置1,其余位不变。

BIC―――――位清除指令
指令格式:
BIC{cond}{S} Rd,Rn,operand2
BIC指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd 中。指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。

CMP―――――比较指令
指令格式:
CMP{cond} Rn,operand2
CMP指令用Rn的值减去操作数operand2 ,并将结果的状态(Rn 与operand2比较是大、小、相等)反映在CPSR中,以便后面的指令根据条件标志决定程序的走向。CMP指令与SUBS指令完成的操作一样,只是CMP指令只减,不存结果。
指令示例:
cmp R0,R1 ;比较R0,R1
beq stop ;R0=R1跳到stop
blt less ;R0<R1跳到Less

.
.
.

Less:
.
.
.
Stop:
.
.
.
SUB―――――减法运算指令
指令格式:
SUB{cond}{S} Rd,Rn,operand2 SUB指令用Rn 的值减去操作数operand2 ,并将结果存放到目的寄存器Rd 中。 指令示例:
SUBS R1,R1,R2 ;R1=R1-R2,并并根据运算的结果更新标志位
SUBGT R3,3,#1 ;大于则 R3=R3-1
SUB R0,R2,R3,LSL#2; R0=R2-(R3<<2)

ARM分支指令
助记符

说明

操作

B{cond} lable
分支指令

PC← lable

BL{cond} lable
带链接的分支指令

LR← PC-4 ,PC←lable

BX{cond} Rm
带状态切换的分支指令

PC← Rm,切换处理器状态

指令的条件码
条件码 助记符后缀 标志 含义
0000 EQ Z置位(Z=1) 相等
0001 NE Z清零(Z=0) 不相等
0010 CS C置位 无符号数大于等于
0011 CC C清零 无符号数小于
0100 MI N置位 负数
0101 PL N清零 整数或0
0110 VS V置位 溢出
0111 VC V清零 未溢出
1000 HI C置位且Z清零 无符号数大于
1001 LS Z置位且C清零 无符号数小于等于
1010 GE N等于V(N=V=1或N=V=0) 带符号数大于或等于
1011 LT N不等于V 带符号数小于
1100 GT Z清零且N等于V 带符号数大于
1101 LE Z置位或N不等于V 带符号数小于或等于
1110 AL 忽略 无条件执行

;GPIO寄存器宏定义
GPFCON EQU 0x56000050
GPFDAT EQU 0x56000054
GPFUP EQU 0x56000058

EXPORT LEDTEST
AREA LEDTESTASM,CODE,READONLY ;该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读

LEDTEST
;设置GPF4-GPF7为output
ldr r0,=GPFCON
ldr r1,[r0]
bic r1,r1,#0xff00
orr r1,r1,#0x5500
str r1,[r0]

;禁止GPF4-GPF7端口的上拉电阻
ldr r0,=GPFUP
ldr r1,[r0]
orr r1,r1,#0xf0
str r1,[r0]

looptest
;将数据端口F的数据寄存器的地址附给寄存器r2
ldr r2,=GPFDAT

ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xb0
str r3,[r2] ;GPF6 output 0
ldr r0,=0x2fffff
bl delay ;调用延迟子程序

ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0x70
str r3,[r2] ;GPF7 output 0
ldr r0,=0x2fffff ;初始计数值
bl delay ;调用延迟子程序

ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xd0
str r3,[r2] ;GPF5 output 0
ldr r0,=0x2fffff
bl delay ;调用延迟子程序

ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xe0
str r3,[r2] ;GPF4 output 0
ldr r0,=0x2fffff
bl delay ;调用延迟子程序

b looptest
delay
sub r0,r0,#1 ;r0=r0-1
cmp r0,#0x0 ;将r0的值与0相比较
bne delay ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
mov pc,lr ;返回

END ;程序结束符
温馨提示:内容为网友见解,仅供参考
无其他回答

汇编的语言指令都包括哪些
汇编的语言指令都包括:汇编的语言指令、可直接寻址位、位变量修改指令、位变量逻辑指令等。汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机...

主要的汇编指令有哪些?
LDR 和STR——用于字和无符号字节\\x0d\\x0a指令格式:\\x0d\\x0aLDR\/STR{cond}{T} Rd,\\x0d\\x0aLDR\/STR{cond}B{T} Rd, \\x0d\\x0a\\x0d\\x0aLDR{cond}{T} Rd, 加载指定地址的字数据到Rd中;\\x0d\\x0aSTR{cond}{T} Rd, 存储Rd中的字数据到指定的地址单元中;\\x...

汇编语言指令大全,要详细的!!!
1. MOV:移动指令,用于数据传送。例如:MOV AX,5 即将数值5传送到AX寄存器。2. PUSH 和 POP:推入和弹出指令,用于数据压入堆栈或弹出堆栈。例如:PUSH BX 将BX寄存器的内容推入堆栈。POP CX 从堆栈弹出数据到CX寄存器。算术运算类指令 ADD:加法指令。例如:ADD AX,BX 将AX和BX的值相加,结果...

主要的汇编指令有哪些啊
BIC指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd 中。指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。CMP―――比较指令 指令格式:CMP{cond} Rn,operand2 CMP指令用Rn的值减去操作数operand2 ,并将结果的状态(Rn 与operand2比较是大、小、相等...

汇编语言指令大全,要详细的!!!
汇编语言指令集涵盖了丰富的功能,针对IBM PC机,主要有数据传送、算术运算、位操作、程序流程控制以及字符串操作等。以下是对这些指令的简要概述:数据传送指令: MOV(如MOV r1, r2)用于在寄存器间或与内存单元间传递数据;PUSH和POP实现堆栈操作,XCHG则交换两个操作数。算术指令: ADD和ADC执行加法,SUB...

汇编语言指令有哪些?
汇编指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。通用数据传送指令:1、MOV 传送字或字节;2、MOVSX 先符号扩展,再传送;3、MOVZX 先零扩展,再...

汇编指令集…要具体详细!
1.1 BT(Bit Test),位测试指令,指令格式: BT OPRD1,OPRD2,规则:操作作OPRD1可以是16位或32位的通用寄存器或者存储单元。操作数OPRD2必须是8位立即数或者是与OPRD1操作数长度相等的通用寄存器。如果用OPRD2除以OPRD1,假设商存放在Divd中,余数存放在Mod中,那么对OPRD1操作数要进行测试的位号就是Mod,它的主要...

汇编语言指令系统
- TEST: 类似AND,但主要影响标志位,实验表明可以执行。9. 移位指令 移位操作在汇编语言中也占有重要地位:- SHL\/SHR\/SAL\/SAR: 分别代表逻辑左移、逻辑右移、算数左移和算数右移,操作后CL保持不变。- ROL\/ROR\/RCL\/RCR: 循环移位,强调移位过程中计数器CL的循环性。这些指令是汇编语言中不可或...

汇编语言指令大全,要详细的 !!
汇编语言指令集包含众多功能丰富的指令,用于数据传输、算术运算、逻辑操作、程序流程控制和字符串处理。让我们一一解析:数据传送: MOV指令用于在寄存器和存储单元间传输数据;PUSH和POP用于堆栈操作;XCHG则交换两个操作数的数据。算术: ADD和ADC执行加法,SUB和SBB进行减法;INC和DEC实现数值加减;MUL和IMUL...

求汇编语言的所有指令?
功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r\/m IMUL r\/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r\/m IDIV r\/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整...

相似回答