处理器 微架构 内存 芯片 寄存器 指令集
主页 正文

汇编指令详解与汇总

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

常用汇编指令: MOV指令是双操作数指令,两个操作数之一必须是MOVDST寄存器,SRC//Byte/Word执行操作:dst=src1。
存储单元和段寄存器(但不允许CS段寄存器) 2. 数据不能直接发送到段寄存器 3. 两个存储单元之间不允许直接传输数据 4. 不允许直接传输信息。
两个段寄存器之间的PUSH命令和POP命令:堆栈操作都是按照“后进先出”的方法来进行数据操作的。
PUSHSRC//不允许压入栈的字操作数除了立即数外,还可以是通用寄存器、段寄存器(全部)和存储器压入栈时,先压入高位字节,然后再压入栈低位字节稍后被压入堆栈。
Popdst // Popup操作数除了作为寄存器外不允许使用立即数和CS段,可以是通用寄存器、段寄存器和内存。
存储区中堆栈区的位置需要改变 执行POPSP指令后,需要改变栈顶的位置 XCHG(eXCHanG)交换指令:改变两个操作数值=Tmp1。
一个操作数必须在寄存器 2 中。
不能与段寄存器 3 交换数据。
存储器和存储器之间不能交换数据 XLAT 转义指令(TRANSLATE):将一种代码转换为另一种代码。
/字节执行操作: 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 LDS指针(LoadDSwithpointer)发送到寄存器而DS命令LDSREG、SRC //常指定SI寄存器。
执行操作:REG=(SRC),DS=(SRC+2)//将SRC指向的前两个存储单元的发送到命令指定的寄存器,将后两个存储单元发送到段寄存器DS 。

汇编语言常用指令

微控制器汇编错误的原因分析。
目前汇编语言指令格式有两种不同的标准:Windows中的汇编语言多基于Intel风格的语法,如MASM和NASM,而Unix/Linux中的汇编语言多基于; on 基本遵循AT&T风格语法: 1.汇编语言语句的一般格式 [名称[:]]指令代码[第一个操作数][,第二个操作数]注释汇编代码操作数的个数。
0、1 或 2; 如果操作数数量为 2,则运算符仍然有两种不同的格式: Windows 上的 Intel 风格汇编运算符格式: [name[:]] 指令代码 目标操作数 DST,源操作数 SRC。
注意,Unix/Linux 上 AT&T 风格的汇编操作符的格式为: [ name[: ]] 指令码的源操作数 SRC,目的操作数 DST; 注释如: CYCLE:ADDAX,02H (AX) 并非所有语句都需要汇编语句格式的“名称”,但如果语句包含“名称”; ,那么大多数情况下“Name”指的是内存中特定存储单元的地址,即“name”之后的元素在内存中存储的第一个存储单元的地址(包括段地址和段地址) “name”所在段的地址,偏移地址); 例如,上面的指令中,CYCLE是语句的名称,CYCLE代表下一条机器指令代码在内存中存放的首地址; “名称”和指令代码之间的分隔符可以是冒号“:”,也可以是冒号分隔时的空格符“”; 代表一个标签,用空格分隔,代表一个名称; 表可以是标签,也可以是变量; 如果指令代码有多个操作数,相邻的两个操作数之间必须用逗号“,”隔开; 指令码和操作数必须用空格分隔; 以分号“;”开头; 2. 陈述的构成要素 1. 经常;经常; Number:汇编语言中的常量包括整数和字符串; 汇编语言使用各种后缀来区分: B:二进制数; D:十进制数; H:十个十六进制数; 值后面没有后缀;默认为十进制。
系统编号; 字符串常量 - 字符串与高级语言一样,并非所有操作数都是常数。
汇编器的语言也有其自身的变量,并且在操作过程中可以更改变量。
启动程序A.变量的确定:在汇编器的语言中,变量的定义是使用伪指导完成的; 用于确定变量的伪建筑的格式如下:变量DB表达式的名称; 字节变量的定义,也称为单字节变量(1个顺序字节),db-> byte dw的字节名称; 表达公式定义了言语变量,也称为两个字节变量(连续2个字节),dw-> wo; 变量RD表达式DD的名称; 它从双词定义一个变量,也称为四字节变量(连续4个字节),expre ss dd-> dword expession dd-> dword the变量名称定义了一个六个toy变量,也称为六个toy变量; 字节变量(6个顺序字节),df->变量fword的名称,表达式dq确定变量一个长词,并导致八维变量(8个顺序字节)(8个顺序字节),变量dq-> q Word的名称,表达式,表达式的名称dt,确定InterBisht变量(连续10个字节),其中该变量的名称是可接受的标识符; ,在变量的名称之后,结肠无法进行“:”,您只能使用空白,不需要变量的名称; 强制性,可选; 变量的类型由关键词DB,DW,DD,DQ和DT确定; 变量确定的运算符中的“表达式”用于初始化变量。
有几种情况::(1)。

一个或多个常数或表达; 如果有几种常数或表达式,请与逗号共享。
分裂; 例如,data1-data4; (2)。
与单样行动; 对于变量字节(db),每个变量的大小为1个字节,每个变量的值不能超过1个符号。
符号在每个诱饵中的代码值,整行可以在一对单引号中列出,这等同于诸如data5之类的一系列符号的定义。
对于单词类型(DW)的变量,每个变量的大小为2个字节,每个变量的值变量不能超过 2 个字符。
,这也遵循如果是1个字符,最高位存放高字节,低位存放低字节的规则; 然后低字节存放字符的ASCII码值,高字节为00,如DATA6为双字(DD)类型变量,每个变量的大小为4个字节,每个变量的值为; 不能超过2个字符,如果是2个字符,也遵循高位存高字节,低位存低字节的规则; 然而,2 个字符的值存储在双字变量的低 2 个字节中,对于长字类型 (DQ) 变量,1 个字符的值存储在双字变量的低 1 个字节中。
尺寸; 每个变量为8个字节,每个变量的值不能超过2个字符。
如果它由2个字符组成,它也将存储在最高有效位中。
高低字节规则存储在低字节中,但2个字符的值存储在长字变量的低2字节中,1个字符的值存储在长字变量的低1字节中; 。
以字节为单位; (3)。
问号“?” 表示变量的值未定义,即:变量所代表的存储单元的。
未定义,或者说,当表达式为问号时,新值不会存储在变量对应的内存区域中,而只保留适当的存储空间,例如DATA7、DATA8(4)。
该模式目前有以下格式:重复次数DUP(表达式重复模式); 该值可以重新存储到变量对应的内存区域中。
重复次数由伪指令指定,相当于定义一个数组,例如DATA9和DATA10定义变量:DATA1DB20H; DATA2DW0204H,1000H 2字节变量DAT; A3DB(-1*3),(15/3);1 字节变量 DATA4DD123456H;4 字节变量 DATA5DB'0123';相当于字符数组 DATA6DW'AB','C','D' 的字符串变量; 字符串变量相当于单词String数组; DATA7DB?; 1 字节变量,未初始化的 DATA8DD?; 4 字节变量,未初始化 DATA9DB5DUP(0); 用 5 个零初始化的 1 字节变量,相当于带有 5 个 ArrayDATA10DW3DUP(? ) 的 DB 类型元素; 2 字节变量,未初始化,相当于 DW 类型的 3 元素数组。
变量定义语句中伪指令的作用就是将表达式的值依次存储在一块内存区域中,从 at 开始。
变量名对应的地址,表达式中每个值占用的内存字节数对应变量汇总类型:a; 变量名实际上就是该变量在内存段中对应的内存区域的有效地址(偏移地址)。
高地址表示地址值比较大,低地址表示地址值比较大; 小而高的地址意味着地址值比较小。
地址和底部地址是相对的。
5、变量属性: (1). 该变量具有以下; 属性: A. 段地址(SEG):变量所在段的地址; B. 偏移地址(OFFSET):变量所在段内的偏移地址。
C.类型(TYPE):变量类型决定了每个变量。
DB、DW、DD、DQ 和 DT 类型所占用的内存字节数分别为 1、2、4、8 和 10。
通常,DB、DW、DD类型定义的变量称为BYTE类型、WORD类型、DWORD类型变量; 因此,经常使用的标识符 典型的标识符值列表: 标识符类型 字节变量 字变量 双字; NEAR 标签和远 FARTYPE 标签旁边的变量值为 124-1-2D。
长度(LENGTH):如果定义了变量,则变量的个数由包含DUP语句的变量名决定; 由变量名标识的变量。
确定一种格式在另一种格式中的重复次数; 各种变量定义中,每个变量名定义的变量个数为1; E. 大小(SIZE):在变量定义语句中,为所有变量分配的总字节数变量名相同,其值就是值。
变量的类型和长度,其中段地址、偏移地址和类型属性是变量的主要属性。
属性以及长度和大小属性是变量的辅助属性: 属性运算符:表示SEGSEG变量的名称或标签的运算符表达式,输出变量的名称或标签所在段的地址,OFFSETOFFSET变量的名称或。
label 检索标签所在段中的偏移地址的变量名或 TYP ETYPE 变量名或标签 获取变量名或标签的类型(变量占用的字节数) LENGTHLENGTH 变量名 获取变量的长度变量 SIZESIZE 变量名称 获取变量的大小 这些语句本身不能构成语句,只能用作表达式和表的一部分的组成部分。
表达式评估也在构建过程中完成; 6.强制类型转换运算符。
PTR格式:数据类型。
PTR地址表达格式中的“数据类型”可以是BYTE、WORD、DWORD、NEAR、FAR; 三。
第一种类型是变量类型,后两种类型是标准类型。
号码类型; 格式表达式可以是变量、标签或其他地址表达式; PTR语句的作用是覆盖特定变量或标号的类型,其作用范围仅在当前语句内; 例如:DATA1DW02HMOVBYTEPTRDATA1,AL这条指令中将DATA1类型转换为BYTE类型,然后将AL中的存储到DATA1的低字节中; 范围仅在此 MOV 语句中。
执行此语句后,DATA1 仍为 DW 类型。
即:原来的DATA1类型没有改变;

【汇编语言】指令汇总

汇编语言指令总结如下: 1. 算术逻辑运算指令:MOVE、SUB、AND、OR、NOT、XOR、SCH、SHL、CMP、TEST、NEG、INC、DEC 2. 数据处理指令:mov、movsb , movsw,cld,std,inc,dec,add,sub,and,or,not,xor.3.寄存器及内存操作指令: 推、弹出、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,jns,jz,ret,int,out.5. 条件传输指令:daa、das、adc、sbb、cmp、movsb、movsw 这些指令构成了汇编语言的基础,对于编写直接控制计算机硬件的高效程序至关重要。
它们涵盖了读写数据、数学运算、逻辑运算、程序控制以及传输和中断处理等各种需求。
在编写程序时,选择合适的指令可以有效提高代码执行效率。
理解并有效地使用这些指令是成为一名优秀的汇编程序员的关键。

汇编语言指令大全

8086汇编指南1。
数据传输指南,内存和注册之间的信息,注册,输入和输出端口。
1。
一般数据传输指令。
MOV将传达单词或碎屑。
MOVSX符号 - 首先签名并翻译。
然后,Movzx Zero-HAS首先针对。
推动将是一个词堆叠的单词。
流行音乐将在卷轴上发出单词。
Pusha Ax,CX,DX,BP,SI,DI将按顺序拉动。
出现Poopa di,SI,BP,SP,BX,SX,CX,CX,AX Club订阅。
Pushad Eax,Ecx,EDX,EBX,EBP,ESI和EDI将推入堆栈。
POPAD EDI,ESI,EBP,ESP,EAX,EAX都会顺序出现。
BSWAP通道序列在32位记录中变化。
XCHG正在改变单词或咬人。
(这是至少一个操作员记录,不能在类记录中用作操作员)并交换运算符。
(第二个Operad集合是OX / AX)XADD将更改第一个并存储。
(结果是在第一个歌剧中)XLAT字节搜索图表。
2。
输入和输出端口传输指令。
INI / O端口的输入。
OUTI / O端口输出。
3。
目标地址传输订单。
LEA将安装地址。
LDS转移目标光标,并将锅的安装到DS。
LES通过目标光标,并将锅的安装到ES。
LFS将目标光标转移,然后将锅的安装到FS。
LGS将目标光标和锅的含量转移到GS。
LSS设置了目标光标,并将锅的安装到SS。
4。
登录。
通过LAHF国旗寄存器,将标志按啊。
SAHAF标志已发送,AH安装在Sanlery记录中。
Pushf Flag将被拉到堆栈上。
Popf国旗将登上石头。
PUSHD32-BT标志加载在堆栈上。
Popd32-Bit的旗帜在石头上熄灭。
5。
肢体操作指南addd add。
通过ADC添加。
Inc和1。
包括AAA。
DAA的其他小数调整。
子。
SBB减少福利。
十分为1。
负NEC(0)。
CMP比较。
(减少了两个操作员,标志,只是固定,结果未重新团聚)ASCII代码调整AAS。
减少DAS的十进制调整。
MUL的无限乘。
IML整数。
这AAM 复制的 ASCII 代码更正。
DIV 无符号类。
IDIV 整数除法。
AAD 类的 ASCII 代码更正。
CBW 字节转换为字。
CWD 字变成双字。
CWDE 字转换为双字。
CDQ 双字后缀。
6.逻辑指令AND运算。
或操作。
XOR 特殊或运算。
这并没有被禁止。
测试测试(两个操作数为AND,仅设置标志位,不返回结果)SHL逻辑左移。
SAL 算术左移。
(=SHL) SHR 逻辑右移。
SAR 算术右移。
(=SHR) ROL 向左转。
ROR 正确旋转。
RCR 与直接运输轮换。
RCR 通过轴承向左旋转。
对于上述8个移位指令,移位次数可达255次。
7. 字符串目录 DS:SI 源字符串部分寄存器:源字符串索引。
ES:DI 目标字符串段寄存器:目标字符串索引。
CX 频率计数器。
AL/AX 扫描值。
D标志位0表示重复运算时SI、DI自动相加; Z 标志用于控制扫描或比较的结束。
MOVS 字符串传输。
CMPS 字符串比较。
SCAS 字符串扫描。
LODS 加载字符串。
STOS 节省了电缆。
REP 当达到 CX/ECX>0 时重复。
当ZF=1或比较结果相等且CX/ECX>0时重复REPE/REPZ。
如果ZF=0或比较结果不相等且CX/ECX>0,则重复REPNE/REPNZ。
当 CF=1 且 CX/ECX>0 时,REPC 重复。
当 CF=0 且 CX/ECX>0 时,REPNC 重复。
8. 程序传输指令 1> 无条件传输指令(长传输) JMP 无条件传输指令 Call 过程调用 RET/RETF 过程返回。
2>条件跳转指令(短跳转,距离-128到+127) 如果JA/JNBE小于或等于则跳转。
JAE/JNB 大于等于转移。
JB/JNA 小于传输的。
JBE/JNA 小于或等于转移。
上述四项检查无符号整数运算的结果(标志 C 和 Z)。
JG/JNLE 不仅仅是传输。
JGE/JNL大于等于转移。
JL/JNGE小于传输。
JLE/JNG小于或等于转移。
上述四项检查有符号整数运算的结果(标志 S、O 和 Z)。
JE/JZ 传输相等。
JNE/JNZ 不等于时间转移。
当有保留时,JC 会被转移。
无承运人时的 JNC分支机构。
当 JNO 未满时发送。
当 JNP/JPO 奇偶校验为奇数时转移。
当JNS信号位为“0”时跳过。
JO 盈余转移。
当 JP/JPE 奇偶性相等时转移。
当JS信号位为“1”时跳转。
3> 如果 LOOPCX 不为零,则循环控制指令(短传输)循环。
如果 LOOPE/LOOPZCX 不为零且 Z=1 不是标志,请触摸 LOOPNE/LOOPNZCX 不为零且标志 Z=0…当 JCXZCX 为零时跳过循环。
当 JECXZECX 为零时跳转。
4>中断指令 INT 中断指令 INTO 溢出中断 IRET 中断返回 5>处理器控制指令 HLT 处理器停止并不会继续执行,直到发生中断或复位信号。
当芯片引线测试为高电平时,WAIT 将 CPU 置于待机模式。
ESC 切换到外部处理器。
LOCK 阻塞总线。
NOP 无操作。
STC 设置进位标志。
CLC 清除进位标志。
CMC 航母旗帜翻转。
STD 设置方向标志。
CLD 清除方向标志。
STI 设置中断允许位。
清除 CLI 中断允许位。
6. 错误指令 DW 定义字(2 个字节)。
PROC 定义了过程。
ENDP进程结束。
SEGMENT 定义段。
ASSUME 建立类寄存器地址。
结束 本节结束。
END 程序结束。
热门资讯
苹果手机一键清理
m2固态没有螺丝固定
逻辑门符号与表达式详解:与非门、或非门、异或门
redis缓存删除失败是什么情况
自学51单片机太难了
redis清除指定key缓存
实现高可用Redis集群的三种方案解析
CPU外频与内存频率对应关系解析