晶体管 总线 运算器 处理器 逻辑门 芯片
主页 正文

汇编指令例子

主要的汇编指令有哪些啊

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 Clear 的高 24 位); STR{cond}B{T}Rd,
指令将Rd中的最低字节数据存储到指定的地址单元中。
T 是可选后缀。
如果T存在,即使处理器处于特权模式,存储系统也会将访问视为处理器处于用户模式,并且不能与前者一起使用。
偏移索引T。
可用的地址段有四种类型:零偏移(zerooffset)[Rn],Rn值用作数据传输的地址。
例如:LDRR0,[R1]; pre -indexedoffset [Rn, Flexoffset] {!} 在传输数据之前,将 Flexoffset 偏移量添加到 Rn。
结果用作传输数据的内存地址。
如果后缀“!” 使用时,结果将记录为 Rn,Rn 不允许为 R15,如:LDRBR0,[R1,#8]LDRR0,[R1,#8]!相对补偿程序(相对标签程序(标签必须是在当前命令的±4KB以内)。
程序的相对偏移量是预索引形式的另一个版本从PC计算偏移量并使用PC作为Rn来创建命令 不能使用后缀“!”,例如:LDRR0,地址在索引偏移之后加载到 R0 中。
传输数据后,将Flexoffset偏移量加上Rn,并将结果写回到Rn,这是不允许的R15,如:LDRR0,[R1],R2,LSL#2从内存地址读取数据; R1写入寄存器R0,并将新地址R1+R2×4写入R1。
Flexoffset偏移量可以采用以下两种形式之一: 1)表达-4095到+4095之间的整数,通常是常数,如:STRR5,[R7],#--82)一个寄存器 添加一个移位(移位为由立即数指定),例如:{-}Rm{,shift} 其中: -:可选负号。
如果符号为“1”,则将从 Rn 中减去偏移量。
否则,向 Rn 添加偏移量。
Rm:包含偏移量的寄存器。
不允许的Rm是R15。
Shift:Rm 的可选移位方法。
它可以是以下任意一种: ASRn:算术移位 n 位 (1<=n<=32) LSLn:逻辑左移 n 位 (1<=n<=31) LSRn:逻辑右移 n 位 (1 <= n<=32)RORn:右移n位 (1<=n<=31)RRX:右移1位,带扩展。
AND————逻辑运算指令“AND” 命令格式:命令 AND{cond}{S}Rd,Rn,operand2AND 将 operand2 和 Rn 的值进行按位逻辑与,并将结果存入目的地址注册 线 . 如果设置了 S,则根据运算结果影响 N 和 Z 位。
计算第二个操作数时,C 位被更新,V 位不受影响(ORR、EOR 和 BIC 指令对标志位的影响与 AND 指令相同)。
钱包命令示例:ANDSR1,R1,R2; R1=R1&R2,根据运算结果更新标志位ANDR0,R0,#0x0F; R0=R0&0x0F,取出R0的最低4位数据。
ORR——逻辑“或”运算指令 命令格式:ORR{cond}{S}Rd,Rn,operand2 ORR指令将operand2和Rn的值进行按位逻辑或,并将结果存储到注册目的地Rd 。
命令示例:ORRSR1,R1,R2; R1=R1|R2并根据运算结果更新ORRR0,R0,#0x0F标志位; R0=R0|0x0F,将R0的最低4位设置为1,其他位不变。
BIC-----按位指令格式:BIC{cond}{S}Rd,Rn,operand2 BIC 指令将值 Rn 与 operand2 操作数的补码进行按位逻辑与,并将结果存储到条写入目的地 Rd 。
命令示例:BICR0,R0,#0x0F; 清除 R0 的最低 4 位,其余位保持不变。
CMP————————比较命令格式: CMP{cond}Rn,operand2 CMP 命令将 Rn 的值减去 operand2,并反映结果的状态(rn 大于、小于或等于比较与操作数2)放在CPSR中,以便后续指令可以根据条件标志来确定程序的方向。
CMP 命令与 SUBS 命令执行相同的操作,只不过 CMP 命令只做减法,不保存结果。
命令示例:cmpR0,R1; 比较R0、R1beqstop; R0 命令示例:SUBSR1,R1,R2; R1=R1-R2,根据运算结果更新标志位SUBGTR3,3,#1; 如果大于 R3=R3-1SUBR0,R2,R3,LSL#2 ;R0=R2-(R3

汇编指令LSL

R0的值:0x39

该运算符的功能:R1+8*R2。
结果发送到R08*R2=0x10

R2,LSL。
3号——R2的左侧。
移位 3 位相当于乘以 8。

因此结果为 0x39。

扩展信息。

汇编指令是汇编语言中使用的一些运算符和助记符,包括一些伪指令(例如,假设、终止)。
指令用于告诉汇编器如何进行汇编。
它们不控制机器的操作,也不被编译成机器代码。
它们只能被汇编程序识别并指示汇编程序如何操作。

常用汇编指令简要说明:

1. 传输数据的一般指令。

MOV 传输字或字节。

MOVSX- 符号先扩展然后发送。

MOVZX 首先扩展零,然后然后发送。

PUSH 将单词压入堆栈。

POP 将单词从堆栈中弹出。

PUSHA 压入 AX 、CX、DX、BX, SP,BP, SI、DI 依次入栈。

POPA 依次从栈中弹出 DI、SI、BP、SP、BX、DX、CX 和 AX。

PUSHAD 弹出 EAX, ECX、ED X、EBX、ESP、EBP、ESI 和 EDI 依次压入堆栈。

POPAD 依次弹出 EDI、ESI、EBP、ESP、EBX, 堆栈中的 EDX、ECX 和 EAX。

BSWAP 反转 32 位寄存器的字节顺序。

XCHG 反转字或字节(至少一个操作数是寄存器,段寄存器不能用作操作数)

XCHG 反转字或字节(至少一个操作数是寄存器,段寄存器不能用作操作数)。

CM PXCHG 比较并交换操作数(第二个操作数必须是累加器 AL/AX/EAX)

首先是 XADD 交换然后求和(结果在第一个操作数中)

XLAT字分区查找表转换。

──BX指向256字节表的起始点,AL为索引值表(0-255,即

0-FFH); 返回 AL 作为表搜索的结果。
([BX+AL); ]->AL)

2. 输入输出端口传输指令。

INI/O端口输入(语法:累加器IN,{端口号│DX})

OUTI/O端口输入(语法:OUT{端口number│DX},累加器)

立即模式下指定输入输出端口时,指定范围为0-255 在寄存器DX中, >

范围 0-65535。

3. 目的地址传输命令。

LEA加载有效地址。

示例:LEADX、字符串; 将偏移地址存储在DX中。
/p>

LDS 传递目标指针,将指针的加载到 DS 中。

示例:LDSSI,字符串; 存储段地址:DS:SI中的偏移地址。

LES传递目标指针,将指针加载到ES中。

示例:LESDI,字符串; 保存段地址:ES:DI中的偏移地址。

LFS传递目标指针并加载指针的。
输入FS。

示例:LFSDI,字符串; 存储段地址:FS中的偏移地址:DI。

LGS传递目标指针,并将指针的加载到GS中。

示例:LGSDI,字符串; 将段地址:偏移地址存储在GS:DI中。

LSS传递目标指针,并将指针的加载到SS中。

示例:LSSDI,string Address: offset; 地址保存到SS:DI。

4. 传输标志命令。

传输LAHF标志寄存器并将标志加载到AH。

传输SAHF标志寄存器。
和加载标志 AH 寄存器。

PUSHF 标志被压入堆栈。

POPF 标志被弹出。

32 位 PUSHD 标志被压入堆栈。

32 位 POPD 标志被提升。

汇编ret指令怎么用?

Ret使用堆栈数据来更新IP的以接收传输。

重新处理步骤:

(1):(IP)=((SS)*16+SP)

(2):(SP)= ( SP )+2

实现过程

恢复指令利用堆栈中的数据来更新IP的值,以接近传输。

当CPU执行ret指令时; 它执行以下两个步骤:

(IP)=((SS)*16+(SP))

(SP )=(SP)+2;

接下来使用retn(n为整数)

等于

(IP)=((SS ) *16+ (SP))

(SP)=(SP)+2;

(SP)=(SP)+n;

例如, ret4

popip

addsp,4

返回调用站点

示例:

pusheax

push0

push0

pushax

push0

cal ldwordptr[MessageBoxA]

ret; 这是发行EIP; 返回通话目的地; 继续【标记1】

扩展信息:

功能-

从堆栈中取出高8位和低8位字节pc; 将堆栈指针减 2,并从 pc 值开始继续执行程序。
它不影响任何标志。

示例

;主程序

MAIN:SETBP1.0 (1) 启动主程序; P1.0端口设置为1(P1.0端口输出时可以控制LED点亮)

LCALLDELAY (2) 此时, 当前堆栈指针加2并调用(6)DELAY延迟。
时序例程

CLRP1.0 (3)清除P1.0口(P1.0输出,可控制LED的关闭)

LCALLDELAY; (4) 当此项将当前堆栈指针加2时; (6) 在主程序中调用DELAY子程序

LJMPMAIN(5)。
跳。
使LED亮一圈

;正常程序

R7

R6

D2:DJNZR6,D2;(8)(R6-1); 如果等于零, 如果不为零,则执行下一步; D2

DJNZR7,D1 (9) (R7-1); 如果等于零,则执行。
如果不等于0,则跳转到D1

RET。
(10) 当前堆栈指针减2,MAIN 返回到CLRP1.0 继续主程序(3)。

百科全书——ret

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

一组汇编语言指令

汇编语言是一种低级语言,其语法随不同的处理器架构而变化。
以下是一些常见的汇编语言指令及其解释:

数据传输指令

1.MOV:移动指令,用于数据传输。

例如,MOVAX,5将值5传送到AX寄存器。

2.PUSH和POP:压入和出栈指令,用于将数据压入堆栈或弹出堆栈。

例如:PUSHBX将BX寄存器的压入堆栈。
POPCX 将数据从堆栈弹出到 CX 寄存器中。

数学练习说明

ADD:加法说明。

例如:ADDAX、BX将AX和BX的值相加,结果存储在AX中。

其他还有SUB、MUL、DIV等。

逻辑运算和移位指令

此类指令包括AND、OR、NOT等逻辑运算和SHL、SHR等移位运算。

例如:ANDAX,0FFh用于清除AX中的最高有效位。
SHRBX, 1 将 BX 的右移一位。

控制传输指令

此类指令用于改变程序执行的流程。
包括JZ、JNZ等条件跳转,JMP等无条件跳转,以及CALL、RET等调用和返回指令等。

例如:JMPlabel跳转到tag标签处执行代码。
CALLfunction 调用函数函数并设置返回地址。

系统控制指令

这些指令用于系统级操作,例如中断处理、系统调用等。
和INT一样,用于中断处理,比如设置IO口等。

例如:INT0x21调用中断服务。
不同的CPU和操作系统可能有不同的系统控制指令。

除了上述指令外,汇编语言还有很多其他指令,如比较指令、位操作指令等。
每个订单都有其自己的目的和功能。
掌握这些指令对于编写有效的汇编语言程序至关重要。
需要注意的是,不同的处理器架构可能有不同的指令集,因此在实际应用中,需要根据具体的处理器来学习和使用相关的语言指令。

主要的汇编指令有哪些?

LDR 和 STR - 用于字和无符号字节

指令格式:

LDR/STR{cond}{T}Rd,

LDR/STR{cond}B{T}Rd,\ x0d\ x0a

LDR{cond}{T}Rd,指定地址处的字数据 Load into Rd;

STR{cond}{T}将Rd和Rd的字数据存储到指定的地址单元中。


LDR{cond}B{T}Rd,指令将指定地址的字节数据加载到Rd的最低有效字节中。
medium(Rd的高24位清零);

STR{cond}B{T}Rd,该指令将Rd的最低有效字节数据保存到指定的地址单元。


T 是可选后缀。
如果为 T,则即使处理器处于特权模式,存储系统也会将访问视为处理器处于用户模式。
T 在用户模式下无效,并且不能从用户模式偏移。
使用 T 将先前的索引一起移动。




地址部分有四种格式:



Zerooffset [Rn],Rn 中的值作为发送数据的地址。
示例:

LDRR0,[R1];

Pre-indexedoffset(预索引偏移)[Rn, Flexoffset]{!} 在发送数据之前将偏移量 Flexoffset 添加到 Rn。
结果用作传输数据的内存地址。
如果使用后缀'!',则结果写回Rn。
Rn 不能是 R15(例如:

LDRBR0,[R1,#8]

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


过程相对偏移是预索引形式的另一个版本。
计算 PC 的偏移量并使用 PC 作为 Rn 生成预索引指令。


LDRR0,place;

place 地址被加载到 R0

中。
后索引偏移(post-indexedoffset)[Rn],Flexoffset。
发送数据后,我们需要将偏移量Flexoffset添加到Rn中,并将结果写回到Rn中。
例如,

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

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


偏移量 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)
\ x0aLSRn: 逻辑右移 n 位 (1<=n<=32)

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

RRX:带扩展的 1 位右旋转。


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

指令格式:



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

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


指令示例:

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

ANDR0,R0,R0=R0&0x0F; 。




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

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

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

ORRR0,R0,#0x0F;其余位不变; 。




BIC————位清指令

指令格式:

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

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




CMP ————比较命令

命令格式:

CMP{cond}Rn,operand2

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


指令示例:

cmpR0,R1; 比较R0,R1

beqstop

bltless; 跳转到更少



.

.

.



Less:

.
\ x0a.

.

停止:

.

.

.

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

SUB{ cond}{S}Rd,Rn,operand2 SUB 指令为 Rn 从 的值中减去操作数 operand2,并将结果存储到目标寄存器 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,切换处理器状态 条件



指令 条件代码

条件代码 助记符后缀 标志含义

0000EQZ 设置(Z=1) 等于

0001NEZ 清除(Z=0) 不等于
\ x0a0010CSC 设置无符号数大于或等于

0011CCC 清除 无 符号数小于

0100MIN 设置负数

0101PLN 清除整数或0

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

1000HIC被置位,Z被清零,无符号数更大

1001LSZ被置位,C被清零,无符号数量小于

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

1011LTN。
有符号数不等于 V。


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

1101LEZ 或 N 不等于 V 有符号数小于等于

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 ; 屏蔽端口 7

ldrr0,=GPFUP

ldrr1,[r0]

orrr1,r1,#0xf0

strr1,[r0]



looptest\ x0d
;加上数据口F的数据寄存器的地址。
寄存器 r2

ldrr2,=GPFDAT



ldrr3,[r2]

bicr3,r3,#0xf0

orrr3,r3,#0xb0

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

bllay;调用延迟子程序



ldrr3,[r2]

bicr3,r3,#0xf0

orrr3,r3,#0x70

strr3,[r2 ] ;GPF7输出 put0

ldrr0,=0x2fffff;初始计数值

bllay;调用延时子程序



ldrr3,[r2]

bicr3,r3,#0xf0

orrr3,r3,# 0xd0

strr3,[r2];GPF5output0

ldrr0,=0x2fffff

bllay;调用延迟子程序



ldrr3,[r2]

bicr3,r3,#0xf0

orrr3,r3 , #0 xe0

strr3,[r2];GPF4output0

ldrr0,=0x2fffff

bllay;调用延迟子程序



blooptest

lay

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

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

bnelay进行比较。
比较结果不为0(r0不为0)。
继续打电话延迟。
如果没有,请运行以下函数: 项语句

movpc,lr;返回值



END;
热门资讯
内存条从外观上怎么看型号
逻辑门有几种
系统总线连接CPU与内存的桥梁
Redis高效管理轻松删除指定前缀的key
485can通讯
苹果手机一键清理内存
数字电路逻辑或门
逻辑学核心公式解析16个关键要素一览