集成电路 运算器 逻辑门 微架构 CPU 处理器
主页 正文

汇编语言指令详解及汇总攻略

【汇编语言】指令汇总

汇编语言指令总结如下: 1. 算术和逻辑运算指令:movadd、sub 与(或非)xor、shr、shl、cmp、test、neg、inc、dec。
2、数据处理指令:mov。
, movsb, movsw,cld,std,inc,dec,add,sub,and,or,not,xor.3.注册和使用内存的指令:push,pop,pushf,popf,ret,retf,call,fcall , mul,div,db,dw,dd,dups,offset.4. 控制传输指令:jmp,jnz,jz,jle,jge,ja,jb,jae,jbe,jcxz,jl,jg,je,jne,jno,jns,j nz,jz,ret,int,out.5. 条件传送指令:daa、das、adc、sbb、cmp、movsb、movsw。
这些指令构成了汇编语言的基础,对于编写直接控制计算机硬件的高效程序是必需的。

这很重要。
它们涵盖了读写数据、数学运算、逻辑运算、程序控制和传输以及中断处理等各种需求。
在编写程序时,选择合适的指令可以有效提高代码执行效率。
理解并熟练使用这些指令是成为一名优秀的汇编程序员的关键。

汇编语言的几个简单指令,并附上中文解释

常用汇编指令: MOV指令是双操作指令,两个操作寄存器之一必须是。
MOVDST执行SRC//字节/字操作:dst=src1。
文件单元和寄存器段(但不允许使用CS文件段)。
数据不能直接发送到段寄存器3。
数据不能在两个存储单元之间直接传输。
ATTEMPT指令和POP指令的两个寄存器之间不能直接传输信息:堆栈操作是基于“后进先出”的方法来执行数据操作。
PUSHSRC // 操作数不能压入堆栈,除了立即数之外,还可以有通用表、段表(所有)和内存。

POPDST//弹出字不允许与立即数和CS段进行操作,除非除了寄存器之外,通用寄存器、寄存器段和内存寄存器中堆栈区的位置必须改变。
POPSP指令执行后,栈顶位置应变为=Tmp1。
表中必须有一项操作 2. 不能与表段交换数据 3. 内存与内存之间不能交换数据。
/字节执行操作: AL= 执行指令(BX+AL)时,仅使用BX中存储的寄存器的首地址。
执行后,必须将AL代码的转换为LEAREG,SRC // 操作SRC的指令源有效地址发送到预定义表。
执行操作:REG=EAsrc 注:SRC 只能是不同地址模式的操作存储器,REG 只能是 16 位寄存器 MOVBX,OFFSETOPER_ONE 有效 LEABX,OPER_ONEMOVSP,[BX. ] //将两个连续文件的从BX间接发送到SP LEASP,[BX] //将BX的作为内存指令的有效地址发送到SP LDSREG,SRC //重复指定IF 。
操作执行:REG=(SRC),DS=(SRC+2)//将SRC指向的前两个存储单元的发送到指令指定的寄存器,将后两个单元发送到DS段寄存器。

汇编语言指令大全,要详细的  !!

汇编语言指令集包含许多功能丰富的指令,用于数据传输、算术运算、逻辑运算、程序流控制和字符串处理。
我们一一分析:

数据传输:MOV指令用于寄存器和存储单元之间传输数据; PUSH和POP用于堆栈操作 XCHG交换两个操作数的数据; 算术:ADD和ADC进行加法,SUB和SBB进行减法; INC 和DEC 实现数值加法和减法。
MUL和IMUL负责乘法,而DIV和IDIV执行除法运算。
逻辑:AND、OR、XOR、NOT 和 TEST 执行位逻辑运算、SHR、SAL 等。
执行移动操作。
程序流程:JMP控制跳转,JMP、JZ、JS等。
根据条件进行条件跳转,而LOOP系列指令用于循环控制。
字符串处理:MOVSB、MOVSW、MOVSD 等指令用于字符串的传输、比较和查找。
LODSB 和 STOSB 处理字符串加载和存储。
其他:CALL和RET用于子程序调用和返回,INT和IRET用于中断处理和返回。
这些指令在编程中起着关键作用,开发者会根据具体需要选择合适的指令进行操作。
如果您需要了解更多具体说明的格式和使用方法,我们建议您咨询专业人士以获取最新信息。

主要的汇编指令有哪些?

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种形式:



零偏移[Rn],Rn的值作为数据传输的地址。
例如:

LDRR0,[R1];

Pre-indexedoffset(预索引偏移)[Rn, Flexoffset]{!} 在传输数据之前,给Rn加上一个Flexoffset偏移量。
结果用作传输数据的内存地址。
如果使用后缀“!”,则结果写回Rn,且Rn不能为R15,例如:

LDRBR0,[R1,#8]

LDRR0,[R1,#8 ]!\ x0d\ x0a 标签相对程序偏移量(相对于程序)(标签必须在当前指令的 ±4 KB 范围内)。


过程相对偏移量是预索引形式的另一个版本。
计算相对于 PC 的偏移量,并使用 PC 作为 Rn 在索引之前创建一条指令。
不能使用后缀“!”,例如:

LDRR0,place;

地址被加载到R0

中。
索引后偏移量(post-indexedoffset)[Rn],Flexoffset。
传输完数据后,将Flexoffset 添加到Rn 中,并将结果写回Rn。
Rn不能是R15,例如:

LDRR0,[R1],R2,LSL#2;

内存。
地址R1处的数据字被读入寄存器R0,并且新地址R1+R2×4被写入R1。


A Flexoffset 可以采用以下两种形式之一:

1) 值范围为 -4095 到 +4095 之间的整数的表达式,通常是数值常量,例如:

STRR5, [R7] ,# --8

2) 寄存器加移位(移位由直接数指定), 例如:

{-}Rm{,shift}

其中:\ x0d
-:可选负号。
如果标记为“1”,则从 Rn 中减去偏移量。
否则,向 Rn 添加偏移量。


Rm:包含偏移量的寄存器。
Rm 不能是 R15。


Shift:Rm 的附加移位方法。
可以是以下任何形式:

ASRn:算术右移,n 位 (1<=n<=32)

LSLn:逻辑左移,n 位 (1<=n<=31)\ x0d
LSRn:逻辑右移 n 位 (1<=n<=32)

RORn:移位 右移 n 位 (1<=n<=31)

RRX:右移 1 位并扩展。


AND————逻辑运算“AND”指令

指令格式:



AND{cond}{S}Rd,Rn,operand2

AND 该指令将与操作数2与值Rn按位与,结果存储在目标寄存器Rd中。
如果设置了 S,则根据运算结果影响 N 和 Z 位。
当计算第二个操作数时,C 位被更新,V 位不受影响(ORR、EOR 和 BIC 指令对操作数的影响)。
标志位与 AND 指令相同)。


指令示例:

ANDSR1,R1,R2; R1=R1&R2,并根据运算结果更新标志位

ANDR0,R0,#0x0F; R0=R0&0x0F,去掉低4位数据R0。




ORR————逻辑运算指令“OR”

指令格式:ORR{cond}{S}Rd,Rn,operand2 ORR指令将操作数operand2和Rn的值进行转换按位逻辑“OR”» 结果存储在目标寄存器 Rd 中。
指令示例:

ORRRR1,R1,R2; R1=R1|R2并根据运算结果更新标志位

ORRR0,R0,#0x0F; R0=R0|0x0F,设置R0到1中最小值为4位,其余位不变。




BIC————位清零指令

指令格式:

BIC{cond}{S}Rd,Rn,operand2

BIC 该指令将Rn的值与操作数进行比较操作数2的补码按位逻辑与,结果存储到目的寄存器Rd中。
指令示例:BICR0,R0,#0x0F; 清除R0的低4位,其余位保持不变。




CMP ————比较命令

命令格式:

CMP{cond}Rn,operand2

CMP 该命令将 Rn 的值减去操作数 operand2,结果状态相加(Rn 大于、小于或等于操作数 2)在 CPSR 中反映为 后续指令根据条件标志确定程序的方向。
CMP 指令执行与 SUBS 指令相同的操作,只不过 CMP 指令只做减法而不存储结果。


指令示例:

cmpR0,R1; 比较 R0,R1

beqstop; R0=R1 去停止

bltless; R0


.

.

.



Less:

.
\ x0a.

.

停止:

.

.

.

SUB————减法指令
\x 0a指令格式:

SUB{ cond}{S}Rd,Rn,operand2 SUB 指令减去操作数 操作数 2 取 Rn 的值并将结果存储到目标寄存器 Rd 中。
指令示例:

SUBSR1,R1,R2; R1=R1-R2并根据运算结果更新标志位

SUBGTR3,3,#1大于R3=R3-1

SUBR0,R2,R3,LSL#2; R0=R2-(R3<<2)


\x0; 分支指令aARM

助记符



描述



操作



B{cond}lable

跳转指令



PC ←lable


\x0 aBL{cond}lable

带引用的转换运算符



LR ←PC-4, PC ←lable



BX{cond}Rm

带状态切换跳转指令



PC ←Rm,切换处理器状态 State



指令条件码

状态码标志的助记符后缀,值

0000EQZ设置(Z=1)等于\ x0d
0001NEZ 已清除 (Z=0) 不等于

0010CSC 设置为无符号数,大于或等于

0011CCC 已清除 否 字符数小于

0100MIN。
将数字设置为负

0101PLN。
清除整数或 0

0110VSV。
设置溢出\x0。
d
0111VCV 被清零且不溢出

1000HIC 被置位,Z 被清零且大于

1001LSZ 的无符号数被置位,C 被清零且无符号小于或等于

1010GEN 的数为 V ( N=V= 1 或 N=V=0) 有符号数大于或等于

1011LTN 不等于 V 小于

1100GTZ 的有符号数被清除且 N 等于 V 大于

1101LEZ 的有符号数被置位或 N 不等于 V 小于或等于 \的有符号数x0d
1110AL 忽略无条件执行



;定义 寄存器宏 GPIO

GPFCONEQU0x56000050

GPFDATEQU0x56000054

GPFUPEQU0x56000058

\x 0d
EXPORTLEDTEST

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



LEDTEST

; 输出 ut

ldrr0,=GPFCON

ldrr1,[r0]

bicr1,r1,#0xff00

orrr1,r1,#0x5500

strr1,[r0]


\ x0a ;块 GPF4-GPF 端口上拉电阻7

ldrr0,=GPFUP

ldrr1,[r0]

orrr1,r1,#0xf0

strr1,[r0]



looptest
\ x0a ;添加数据寄存器地址数据端口 F 给定寄存器 r2

ldrr2,=GPFDAT



ldrr3,[r2]

bicr3,r3,#0xf0

orrr3,r3,#0xb0

strr3,[r2];GPF6output0
\x0 aldrr0,=0x2fffff

bldelay;调用延迟例程



ldrr3,[r2]

bicr3,r3,#0xf0

orrr3,r3,#0x70

strr3,[r2 ] ;GPF7输出 put0

ldrr0,=0x2fffff;计数器初始值

bldelay;调用延迟例程



ldrr3,[r2]

bicr3,r3,#0xf0

orrr3,r3,# 0xd0

strr3,[r2], #0 xe0

strr3,[r2];GPF4output0

ldrr0,=0x2fffff

bldelay;调用延迟例程



blooptest

delay

subr0 ,r0, #1;r0=r0-1

cmpr0,#0x0;将r0的值与0

bnedelay比较;比较结果不为0(r0不为0),继续造成延迟,否则执行下一条语句\ x0d
movpc, lr; 返回程序结束符



END;

热门资讯
OPPO手机缓存清除方法详解
八种常用逻辑门
衡量CPU性能的核心指标——时钟主频
与门真值表口诀
如何快速识别内存条型号
轻松一招,教你恢复OVI手机出厂设置
优化你的缓存策略探索Redis二级缓存应用
麒麟版本号全面中标新版本亮点抢先看