8086指令大全
8086指令集机器码

8086指令集机器码
2. ADD指令(将两个数相加并将结果存储在目标位置): - 寄存器相加: 机器码:01 D1(例如,将ECX寄存器的值与EDX寄存器的值相加) - 立即数与寄存器相加: 机器码:83 C0 05(例如,将EAX寄存器的值与立即数05相加)
3. JMP指令(无条件跳转到指定的地址): - 相对短跳转: 机器码:EB rel8(例如,EB 05,跳转到相对偏移量为05的地址) - 相对长跳转: 机器码:E9 rel16(例如,E9 1234,跳转到相对偏移量为1234的地址)
8086指令集机器码
8086指令集是Intel 8086处理器的指令集架构,它定义了一系列的机器码(二进制代码 )来执行不同的操作。下面是一些常见的8086指令及其对应的机器码示例:
1. MOV指令(将数据从一个位置移动到另一个位置): - 传送立即数到寄存器: 机器码:B8 imm16(例如,B8 1234) - 传送寄存器到寄存器: 机器码:89 C1(例如,将EAX寄存器的值传送到ECX寄存器) - 传送内存到寄存器: 机器码:8B 45 08(例如,将偏移地址为08的内存单元的值传送到EAX寄存器)
8086指令集机器码
4. INT指令(触发中断): - 软中断: 机器码:CD int8(例如,CD 1,触发21号软中断)
这是8086指令集中的示例,每个指令都有特定的操作码和操作数,机器码的格式和长度 也会有所不同。如果需要查找特定指令的机器码,可以参考8086处理器的文档或相关资料。
8086指令系统

8086指令系统数据传送指令1、通用数据传送指令Mov 传送Movzx 带符号扩展传送Movzx 带零扩展传送Push 进栈Pop 出栈Pusha/pushad 所有寄存器进栈Popa/popad 所有寄存器出栈Xchg 交换2、累加器专用传送指令In 输入Out 输出Xlat 换码3、地址传送指令Lea 有效地址送寄存器Lds 指针送寄存器和DS Les 指针送寄存器和es Lfs 指针送寄存器和FS Lgs 指针送寄存器和gs Lss 指针送寄存器和ss 4、标志寄存器传送指令Lahf 标志送AHSahf AH送标志寄存器Pushf/pushfd 标志进栈Popf/popfd 标志出栈5、类型转换指令Cbw 字节转换为字Cwd/cwde 字转换为双字Cdq 双字转换为4字Bswap 字节交换算术指令1、加法指令Add 加法Adc 带进位加法Inc 加一Xadd 交换并相加2、减法指令Sub 减法Sbb 带借位减法Dec 减一Neg 求补Cmp 比较Cmpxchg 比较并交换Cmpxchg8b 比较并交换8字节3、乘法指令Mul 无符号数乘法Imul 带符号乘法4、除法指令Div 无符号数除法Idiv 带符号数除法逻辑指令1、逻辑运算指令And 逻辑与Or 逻辑或Not 逻辑非Xor 异或Test 测试2、位测试并修改指令Bt 位测试Bts 位测试并置一Btr 位测试并置0Btc 位测试并变反3、位扫描指令Bsf 正向位扫描Bsr 反向位扫描4、移位指令Shl 逻辑左移Sal 算术左移Shr 逻辑右移Sar 算术右移Rol 循环左移Ror 循环右移Rcl 带进位循环左移Rcr 带进位循环右移Shld 双精度左移Shrd 双精度右移串处理指令Movs 串传送Cmps 串比较Scas 串扫描Lods 从串取Stos 串输入Ins 串输入Outs 串输入与串处理指令配合使用的前缀右:Rep 重复Repe/repz 相等/为零则重复Repne/repnz 不相等/不为零则重复控制转移指令1、无条件转移指令Jmp 跳转指令2、条件转移指令(1)根据单个条件的设置情况转移Jz 结果为零(或相等)则转移Jnz 结果不为零(或不相等)则转移Js 结果负则转移Jns 结果为正则转移Jo 溢出则转移Jno 不溢出则转移Jp(或jpe) 奇偶位为1则转移Jnp(或jpo)奇偶位为0则转移Jb(或jnae或jc) 低于,或者不高于或等于,或进位为一则转移Jnb (或jae 或jnc) 不低于,或者高于或等于,或进位为零则转移(2)比较两个无符号的数,并根据比较的结果转移Jb(或jnae,或jc)低于或不高于或等于,或进位位1则转移Jnb(或jae或jnc)不低于,或者高于或等于,或进位为0则转移Jbe(或jna)低于或等于,不高于则转移Jnbe (或ja) 不低于或等于,或高于则转移(3)比较两个带符号数,并根据结果转移Jl (或jnge) 小于,或者不大于或等于则转移Jnl(或jge) 不小于,或者大于或者等于则转移Jle(或jne)小于或等于,或者不大于则转移Jnle (或jg) 不小于或等于,或者大于则转移条件转移指令(1)根据单个条件标志的值把目的字节置1Setz(或sete) 结果为零(或相等)则母的字节置1 Setnz(或setne)结果不为零(或不相等)则目的字节置1Sets 结果为负则目的字节置1Setns 结果为正则目的字节置1Seto 溢出则目的字节置1 Setno 不溢出则目的字节置1Setp(setpe) 奇偶位为1则目的字节置1Setnp(或setpo) 奇偶位0则目的字节置1Setc(或setb,或setnae)进位为1,或低于,或不高于或等于则目的字节置1 Setnc(或setnb,或setae)进位为零,或不低于,或高于或等于则目的字节置1(2)比较两个无符号数,并根据比较结果把目的字节置1 Setb(或setnae,或setc) 低于,不高于或等于,或进位位为1则目的字节置1 Setnb(或setae,或setnc)不低于,或高于或等于,或进位位为0则目的字节置1Setbe(或setna)低于或等于,或不高于则目的字节置1Setnbe(或seta)不低于或等于,或高于则目的字节置1(3)比较两个带符号数,并根据比较结果把目的字节置1Setl(或setnge) 小于或不大于或等于则目的字节置1Setnl(或setge)不小于,或大于或等于则目的字节置1Setle(或setng) 小于或等于,或不大于则目的字节置1Setnle(或setg) 不小于或等于,或大于则目的字节置1循环指令Loop 循环Loopz/loope 当为零或相等时循环Loopne/loopne 当不为零或不相等时循环子程序Call 调用Ret 返回中断Int 中断指令Into 若溢出则中断指令Iret 从中断返回指令Iretd 从中断返回指令处理机控制与杂项指令1、标志处理指令Clc 进位位置0指令cf-0Cmc 进位位求反指令cf-非cfStc 进位位置1指令cf-1Cld 方向标志位置0指令df-01Std 方向标志位置1指令df-1Cli 中断标志置0指令if-0Sti 中断标志置1指令if-12、其他处理机控制与杂项操作指令Nop 无操作Hlt 停机Esc 换码Wait 等待Lock 封锁Bound 界限Enter 建立堆栈帧Leave 释放堆栈帧。
8086汇编指令大全.

不允许寄存器或存储单元到除CS外的段寄存器
2入栈(出栈指令PUSH (POP
注意:
PUSH操作数不能是“立即数” POP操作数不能是段寄存器
CS
不影响标志位
先进后出
单操作符
3交换指令XCHG
注意:
只允许寄存器与存储单元之间的交换
不影响标志位
4换码指令XLAT
5地址传送指令LEA :偏移地址
ZF=0
SF符号标志位
OF溢出标志位
DF方向标志位
IF中断允许位IF=1时响应外部中断
TF跟踪标志位
操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式:
1寄存器寻址例:INC AX ; MOV AX , BX
2寄存器间接寻址(寄存器只能是BX , DI , SI , BP ; [PA=(BX、DI、SI +DS》4或BP+SS》4]
6数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI、高地址的字
送DS
7附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI、高
地址送ES
上三指令不影响标志位
8标志寄存器传送指令
LAHF :标志寄存器低八位送
AH
SAHF :AH送标志寄存器低八位
PUSHF :标志寄存器压入堆栈
标志寄存器:9个有效位,分6个状态寄存器和3个控制寄存器
CF当执行一个加法(减法使最高位产生进位(借位时CF=1否则
CF=0
PF指令执行的结果低8位有偶数个一时, CF=1否则
CF=0
AF当执行一个加法(减法使运算结果低4位向高4位有进位(借位时AF=1否则
8086指令

8086指令1.数据传送指令
(1)通用传送指令
(2)累加器专用传送指令
(3)地址传送指令
2.算术运算指令
(2)减法指令
(5)符号扩展指令
(6)十进制调整指令
3.逻辑运算和移位指令(1)逻辑运算指令
(2)移位指令
注:OPR不能为立即数和段寄存器,若CNT大于1,应先将CNT存入CL寄存器中,移位指令中CNT写为CL即可。
4.串操作指令
(1)重复前缀指令
(2)串传送指令
(3)串比较指令
5.控制转移指令
(1)无条件转移指令
(2)条件转移指令
①简单条件转移指令(根据某一标志位的值决定是否有转移,测试的标志位有S、Z、C、P、O 5个,每个标志位可能取“0”和“1”,共10条)
②无符号数比较条件转移指令
③有符号数比较条件转移指令
④测试CX的值为0则转移的指令
(3)子程序调用和返回指令
(4)循环控制指令
(5)中断指令
6.处理机控制指令
(2)其他处理机控制指令
7.伪指令
(1)数据定义伪指令
(2)分析运算符
(3)属性操作符
(4)符号定义指令
(5)地址计数器与对准伪操作
(6)宏与过程(子程序)的定义和调用。
8086汇编指令

HLT 处理器暂停, 直到出现中断或复位信号才继续. O MN|ea.O
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. &ET PYf %#
ESC 转换到外处理器. Kl+4 A} Uo
LOCK 封锁总线. %'[ pucEF
NOP 空操作. bn"z&g
POPD 32位标志出栈. @A6 iY
二、算术运算指令 J 299 mgB
ADD 加法. (RI)<zaK ;
ADC 带进位加法. ~+ {*KPiD
INC 加 1. oO;L l? ~
AAA 加法的ASCII码调整. At@0G\^
DAA 加法的十进制调整. '| g sm O
STC 置进位标志位. y O?52YO
CLC 清进位标志位. *Ja,3Q q
CMC 进位标志取反. J~rjI 24
STD 置方向标志位. .2 ST Bh.;
CLD 清方向标志位. G X>T~i\f8
STI 置中断允许位. t M{U6 k
CLI 清中断允许位. z`rW2UO#a`
JO 溢出转移. PW -s F
JP/JPE 奇偶性为偶数时转移. ,,V uv n
JS 符号位为 "1" 时转移. E J Ta ~
3>循环控制指令(短转移) aDX 4 }`u
LOOP CX不为零时循环. I, ?!N zB
LOOPE/LOOPZ CX不为零且标志Z=1时循环. ; 5!8LmZ0#
XADD 先交换再累加.( 结果在第一个操作数里 ) PK +sGV
8086常用指令表

8086/8088常用助记符指令类型助记符目的源功能注释数据传送MOV X X 把数据从源操作数传送到目的操作数1.两个操作数不能同时为内存操作数,也不能同时为立即数,目的操作数不能为立即数2两个操作数的类型须一致3立即数不能直接传入段寄存器4CS,IP不能作目的操作数5段寄存器之间不能直接传送PUSH X把指定的寄存器/内存单元的内容压入堆栈1.按字操作,CS能入栈内存不能直接寻址.P-2→SP,再写入栈顶POP X从栈顶弹出一字到指定的寄存器/内存单元1.同上2.先弹出一字,再SP-2→SP XCHG 寄寄/内两操作数互换内容不能用立即数和段寄存器XCHG 寄指定寄存器同累加器互换内容IN AC 端口号从指定端口送数到AL端口号为立即数,地址为8位端口号在DX中,地址为16位OUT 端口号 AL从AL送数到指定端口LEA 寄内存LDS 寄内存LES 寄内存把内存偏址送指定寄存器把内存低2字节送寄存器,高2字节送DS(ES)只能用通用寄存器,不能用段寄存器LAHF把标寄低8位送AHSAHF把AH送标寄低8位PUSHF标寄入栈POPF栈顶弹出进标寄算术运算ADD X X加法(和送目的操作数)加减1.2.同MOV3.段寄存器不能作操作数4.调正在AL中进行,并必需紧跟在运算之后执行.5.比较运算同减法,结果不存,而仅影响标志寄存器6.乘除法的目的操作数隐含是ACAL*乘数→AX, AX*乘数→DX AX,AX/除数→AL, 余数在AH中DXAX/除数→AX, 余数在DX中7.加1减1指令把操作数当无符号数,其他加减指令是否为有符号数要由程序设计需要设定ADC X X带进位加法INC X 指定的寄/内的内容加1AAA分离BCD码调正(AL)DAA组合BCD码调正(AL)SUB X X减法SBB X X带借位减法DEC X指定的寄/内的内容减1NEG X指定的寄/内的内容求补CMP X X 比较AAS分离BCD码调正(AL)DAS组合BCD码调正(AL)MUL 寄/内不带符号乘法IMUL 寄/内带符号整数乘法AAM 分离BCD码调正(AL)DIV 寄/内不带符号除法IDIV 寄/内带符号整数除法AAD非组合BCD码调正CBW扩展AL中的符号位到AHCWD扩展AX中的符号位到DX类型助记符目的源功能注释逻辑运算NOT X 对字或字节按位取反 1.2.3同上4.按位操作5.AND1不变(保持),AND0置0OR1置1,OR0不变(保持)自身与或,结果不变(保持),影响标志位, 自身XOR常用于清零XOR 1取反,XOR 0不变AND X X对字或字节按位与操作OR X X 对字或字节按位或操作XOR X X对字或字节按位异或操作TEST X X同AND,但结果仅影响标寄而不存目的操作数移位和循环移位SHL 寄/内 1/CL按位左移 CF←M←0 1.循环或移位的次数为1或CL中的数2.SHL一次,原数乘2SHR一次,原数除23.目的操作数不能是立既数SAL 寄/内 1/CL按位左移 CF←M←0SHR 寄/内 1/CL逻辑右移 0→M→CFSAR 寄/内 1/CL算术右移→M→CFROL 寄/内 1/CL循环左移 CF← ←M ←ROR 寄/内 1/CL循环右移 CF← →M →RCL 寄/内 1/CL带进位循环左移←CF←M←RCR 寄/内 1/CL带进位循环右移→CF→M→重复前缀REP重复后面字串指令,直到CX=0一般与字串指令联合使用REPE/REPZ当相等/为零时重复REPNE/REPNZ当不相等/不为零时重复MOVSB/MOVSW字符串传送 1.源串偏址在SI中,目的串偏址在DI中.2.每次自动修改SI,DI 内容3.装入和存储是对AX(AL)操作CMPSB/CMPSW字符串比较SCASB/SCASW字符串扫描LODSB/LODSW字符串装入STOSB/STOSW字符串存储转移JMP X无条件转移到指定内存地址操作数前可带NEAR或FAR前缀条件转移(无符号数)JA/JNBE X高于/不低于,不等于由比较和减法指令的结果JA/JNBE 表示二者等价JAE/JNB X大于等于/不低于JB/JNAE X低于/不高于,不等于TBE/JNA X低于等于/不高于条件转移(带符号数)JG/JNLE X大于/不小于等于JGE/JNL X大于等于/不小于JL/JNGE X小于/不大于不等于JLE/JNG X小于等于/不大于条件转移JE/JZ X等于/为零JNE/JNZ X不等于/不为零条件转移JC/JNC X有进位CF=1/无进位CF=0由影响标志位的操作结果JC/JNC表示二者是两个不同用法JO/JNO X有溢出OF=1/无溢出OF=0JP/JPE X奇偶性为偶PF=1JNP/JPO X奇偶性为奇PF=0JS/JNS X符号位为1/符号位为0FR15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CF 溢出方向符号零半进位奇偶进位类型助记符目的源功能注释LOOP X[CX]-1→[CX],[CX]≠0转移到X由CX决定循环次数循环LOOPZ/LOOPE X [CX]-1→[CX],[CX]≠0且ZF=1转移到X为零/相等时循环LOOPNZ/LOOPNE X[CX]-1→[CX],[CX]≠0且ZF=0转移到X非零/不相等时循环JCXZ X [CX]=0转移到X调用返回CALL 过程名调用指定地址开始的子程序对标寄无影响注意用堆栈保护断点RET子程返回RET XRETF标志操作CLC CF=0 (进位)STC CF=1CMC CF取反CLD DF=0 (方向)STD DF=1CLI IF=0 (中断)STI IF=1HLT暂停ESC交权INT 21H DOS功能调用AH=1键盘输入到AL,AH=2显示DL内容,AH=9显示DX为偏移量以$结尾的内存字串NOP空操作3个时钟伪指令功能特征符号 EQU 符号/表达式把右边的值赋予左边的符号1.不产生目标代码,不分配内存单元2.在同一源程序中同一符号不能用EQU重定义,可用=重定义符号=符号/表达式变量名 DB 表达式1,表达式2…. DWDD 定义字节(或字、双字)1.要求汇编分配内存单元,并把表达式1,表达式2…等存入2.为变量名分配这些内存单元的首字节地址段名SEGMENT [定位] [组合]['类别名'] :段名 ENDS 定义逻辑段定位隐含PARA,表示能被16整除ASSUME 段寄名:段名,段寄名:段名,….告诉汇编已定义的段与段寄的关系不产生目标代码,不分配内存单元,不为段寄存器存放段基值过程名 PROC [NEAR/FAR]:RET过程名 ENDP构造子程序最后语句RET不能少ORG 表达式定义下一个数据或指令的偏移量$表示偏移量的现行值宏名 MACRO 形参1,形参2,….ENDM宏定义宏名实参1,实参2,….宏调用一.指令由名字,操作码、操作数(地址)组成。
8086常用指令

JMP DWORD PTR OPR:执行的操作为(IP)<-(EA);(CS)<-(EA+2)
JMP指令不影响条件码。
四、标志寄存器传送指令
LAHF:Load AH with Flags
SAHF:Store AH into Flags
PUSHF/PUSHFD:标志位进栈
POPF/POPFD:标志位出栈
五、类型转换指令
CBW:字节转为字
CWD:字转为双字
CDQ:双字转4字
BSWAP:字节交换
REP指令:格式为:REP <串处理指令>,如REP INS等。执行规则是和循环类似,当CX=0时退出重复。由于这些串处理指令都只一次处理一个单位的数据,因此一般都需要与REP指令结合起来实现批量的数据传送。
结合REP指令的串处理指令用法实例: 若mess1,mess2是data段中指定的两个字符串,其中mess1在data中,为源串;mess2在extra中,为目的串
十四、条件转移指令
对单个条件标志比较,并由结果转移
JZ(JE):当结果为0或相等则跳转。相反:JNZ(JNE);
JS:当结果为负则跳转。相反:JNS;
JO:当溢出则跳转。相反:JNO;
JP(JPE):当奇偶位为1则跳转。相反:JNP(JPO);
JB(JNAE):当低于或CF=1则转移。相反:JNB(JAE),不低于则转移;
lea di,mess2;赋予目的变址DI
mov cx,17;指定重复次数
CLD;方向标志置零(从左向右扫描)
8086汇编指令表

8086汇编指令表Reg ←mem标志位 DS ←(SRC+2) LSS 同LDS 不影响 指针送寄存器和SS LES 同LDS 不影响 指针送寄存器和ES LFS 同LDS 不影响 指针送寄存器和FS LGS 同LDS 不影响 指针送寄存器和GSLEA LEA r16,m 不影响 标志位 将源操作数的有效地址送r16 LEA SI,[BX] LEA r32,m 将源操作数的有效地址送r32 LEA STRING LOCK LOCK 不影响 总线锁定LOCK LODS LODS mem LODSB/W 不影响 标志位 装入串:AL/AX ←(DS:SI) SI ←(SI)(+/-)1LOOPLOOP rel8不影响 CX ←(CX)-1---(CX)≠0,则循环 LOOPELOOPZLOOPE rel8不影响 标志位 CX ←(CX)-1(CX)≠0且ZF=1,则循环 LOOPNELOOPNZ LOOPNE rel8不影响 标志位 CX ←(CX)-1(CX)≠0且ZF=0,则循环MOVMOV DST ,SRCDST ≠CS 、IP 和imm不影响 标志位MOV[9AF0H],AL MOVSMOVS mem, mem MOVSB/W 不影响 标志位字符串传送 ES:DI ←(DS:SI) SI ←(SI)(+/-)1 DI ←(DI)(+/-)1MOVS ES:BYTE PTR[DI], DS:[SI] MUL MUL r/m8 设置CF OFS Z A P 无法预测 无符号乘法:AX ←AL*r/m8 MUL CL MUL r/m16 无符号乘法:DX:AX ←AX*r/m16 MUL CX NEG NEG reg/mem CF OF SF ZF AF PF 求补:取反加一 0-(DST) NEG CL NOP NOP不影响 空操作 NOP NOT NOT reg/mem 不影响 按位取反 NOT CL OR 同ANDPF SF ZF CF=OF=0 逻辑或OR AL,0FH (不变\置1)OUT OUT imm8,AL/AX/EAX 不影响 标志位 将AL/AX/EAX 输出到imm8指定端口 OUT 0FFH,AL OUT DX,AL/AX/EAX 将AL/AX/EAX 输出到DX 指定的端口 OUT DX,AL POP POP DSTDST!=imm & CS 不影响 标志位 DST ←((SP)+1,(SP)) SP ←(SP)+2POP WORD Ptr [87EAH] POPF POPF设置所有标志位 从堆栈中弹出16位标志寄存器POPF PUSHPUSH SRC8086 SRC!=imm不影响 标志位 SP<--(SP)-2((SP)+1,(SP))←(SRC) [SP 循环] PUSH WORD Ptr [87EAH] PUSHF PUSHF 不影响 压栈16位标志寄存器 PUSHF RCL 同SHL 同ROL 带进位循环左移 RCL AL ,1 RCR 同SHL 同ROL带进位循环右移RCR AL ,1 ROL同SHL移一位后符号位改变则OF=1 循环左移:ROL AL ,1ROR 同SHL 同ROL循环右移:ROR AL,1REP REP String operation 不影响标志位CX=0则终止---CX←(CX)-1---串操作---SI/DI增量REPZ REPE REPE String operationAF CF OFPF SF ZFCX=0||ZF=0则终止---CX←(CX)-1---串比较---SI/DI增量REPNZ REPNE REPNE String operationAF CF OFPF SF ZFCX=0||ZF=1则终止--- CX←(CX)-1---串比较---SI/DI增量RET RET 恢复压栈标志位POP IP[CS]子过程返回(Near)/(Far) RET RET imm16 子过程返回后SP←(SP)+imm16 RET 08SAHF SAHF SF ZF AF PF CF (SF:ZF:0:AF:0:PF:1:CF)←AH SAHFSAL 同SHL 移入CFOF PF SF ZF算术左移:[所有移位]如果操作数符号位改变,则OF=1(CL≠1则OF无定义)SAL AL,1SAR 同SHL 移入CFOF PF SF ZF 算术右移SAR AL,1SHL SHL reg/mem, 1SHL reg/mem, CL移入CFOF PF SF ZF 逻辑左移SHL AL,1SHL AL,CLSHR 同SHL 移入CFOF PF SF ZF 逻辑右移SHR AL,1SBB 同SUB AF CF OFSF PF ZF带借位减法(CF)DST←(DST)-(SRC)-(CF)SCAS SCAS memSCASB/WOF SF ZFAF PF CF扫描字符串(ES:DI)-(AL/AX)DI←(DI)(+/-)1STC STC CF=1 进位标志CF置1 STC STD Std DF=1 方向标志DF置1(地址减量) STD STI STI IF=1 中断标志IF置1(开中断) STISTOS STOS memSTOSB不影响标志位存入串(ES:DI)←(AL/AX)DI←(DI)(+/-)1SUB SUB reg/mem, imm/regSUB reg, memAF CF OFSF PF ZF减法SUB BYTE Ptr[87EAH], 39TEST 同AND PF SF ZFCF=OF=0逻辑与测试,但是不改变目的操作数,只设置相关标志位TEST AL, 1FHWAIT WAIT 不影响等待,检查非屏蔽浮点异常WAITXCHG XCHG OPR1,OPR2reg-reg\reg-mem不影响标志位目的操作数和源操作数的值交换操作数不允许为段寄存器XCHG AX,BXXLAT XLAT [TABLE] 不影响标志位LEA BX, TABLE;表首址给BXMOV AL, 4;待转换内容到ALAL←((BX)+(AL))XLATXOR 同AND PF SF ZFCF=OF=0逻辑异或XOR AL,0FH(不变\反)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80X86 汇编指令符号大全+、-、*、/∶算术运算符。
&∶宏处理操作符。
宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。
$∶地址计数器的值——记录正在被汇编程序翻译的语句地址。
每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。
?∶操作数。
在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。
=∶等号伪指令——符号定义。
对符号进行定义和赋值,功能与 EQU相似,但允许(重复)再定义。
:∶修改属性运算符(操作符)——段操作符。
用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。
注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。
;∶注释符号。
%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。
( )∶1.运算符——用来改变运算符的优先级别。
2.教材符号,表示括号内存储单元(或寄存器)的内容。
< >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。
[ ]∶1.运算符。
方括号括起来的数是数组变量的下标或地址表达式。
带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。
2.教材符号,表示其中的内容可省略。
.LIST∶伪指令。
用于打开列表文件输出。
.RADIX∶伪指令。
把缺省的基数改为2-16范围内的任意基数。
.RADIX不影响DD、DQ、DT伪指令,在这些伪指令中,输入的数值只要没有加上数据类型就认为是十进制数。
.XLIST∶伪指令。
用于关闭列表文件输出。
%OUT∶伪指令。
在汇编时显示其后的信息。
AAA∶ 指令助记符——加法运算后的ASCII调整(非压缩的BCD码)。
无操作数,调整的加法结果在AL中。
AF和CF的状态改变说明结果大于9。
检查AL的低四位是否为合法的BCD码(0-9),如果合法就清除AL的高四位以及AF和CF标志。
当AL的低四位表示的数大于 9或AF=1时,将AL加 6,AH加1 ,并使AF和CF置位,清除AL中的高四位。
任何一个A—F之间的数加上6 以后,都会使AL 低 4位产生0-9之间的数,从而达到调整的目的。
AAD∶指令助记符——除法的ASCII调整(非压缩的BCD码)。
在执行除法操作前,必须利用 AAD指令将非压缩型 BCD码表示的数转换成二进制数送AL。
步骤是,先将被除数的高位数(AH中的内容)乘以10,然后加到AL的低位数中,接着将AH清零。
AAM∶ 指令助记符——乘法的ASCII调整(非压缩的BCD码)。
用于将字节乘法的积转换成两个合法的十进制非压缩码。
AAM不带操作数,假定成绩在AH和AL 中,并将调整后的非压缩码送回AH和AL。
为了保证 AAM得到正确的结果,原乘数和被乘数必须是合法的非压缩码。
指令执行时,AAM 用10(0AH)除AL寄存器,并将除得的商和余数分别送AH和AL寄存器,实现转换。
AAS∶ 指令助记符——减法运算后的ASCII调整(非压缩的BCD码)。
检查AL 的低四位是否为合法的BCD码(0-9),如果合法就清除AL的高四位以及AF和CF标志。
当AL的低四位表示的数大于 9或AF=1时,将AL减 6,AH减1 ,并使AF和CF置1,清除AL中的高四位。
ADC∶指令助记符——带进位加法(把CF的值加上)。
用于多字节数的高字节加法运算。
ADD∶指令助记符——加法。
参与运算的二操作数应该同时带符号或不带符号,并且长度一致。
操作数可以是寄存器、存储器或立即数,但不能同时为存储单元或段寄存器,立即数也不能作为目的操作数。
AF∶ Auxiliary Carry Flag,辅助进位标志,在标志寄存器的第4字节。
记录运算时第 3位(半个字节)产生的进位值(置1)。
该标志用于对BCD码的加减运算中。
AND∶逻辑运算符(在语句的操作数部分,汇编时完成)或逻辑操作指令助记符(在语句的操作码部分,其运算在执行指令时完成)——按位与。
只有相“与”的两位全为1 ,结果才为1。
某数自己与自己相“与”,操作数不变,进位标志CF清0 。
ASSUME∶段定义伪指令——设定分段寄存器,格式为"ASSUME 段寄存器:段名[,段寄存器名:段名]"。
在代码段的开始用来指出所有段与段寄存器的关系,确定某个段分配给哪个段寄存器。
ASSUME只指出各段寄存器的分配,并没有把段地址装入相应的段寄存器。
为此,在代码段中,还必须把数据段和附加数据段的段地址装入相应的寄存器中。
AT∶伪指令——段定义(组合类型)。
该段按绝对地址定位,段基址为数值表达式的值,位移量为0 。
不能指定代码段。
AX∶ Accumulator,通用寄存器,算术运算的主要寄存器。
另外,所有的I/O 指令都使用这一寄存器与外部设备传送信息。
其中AH是高8位,AL是低8位。
B∶数据类型后缀,表示二进制常量。
BP∶Base Pointer,基址指针寄存器。
可以与SS寄存器联用来确定堆栈中任一存储单元的地址。
它指示堆栈中任一单元的偏移量。
非堆栈进出指令要访问堆栈,只能通过BP进行。
BX∶Base,通用寄存器。
在计算存储器地址时,经常用作基址寄存器。
其中BH 是高 8位,BL是低 8位。
BYTE∶伪指令——段定义(定位类型)。
本段起始单元可以从任一地址开始,段间不留空隙,存储器利用率最高。
CALL∶指令助记符——程序调用。
一、段内直接调用:格式为" CALL 过程名"。
先把IP内容(子程序的返回地址,即CALL下一条指令的地址)压入堆栈,然后IP转移到子程序的入口地址。
二、段内间接调用:格式为" CALL WORD PTR OPD"。
先把IP的内容压入堆栈,然后IP指向(转到)由寻址方式决定的EA。
三、段间直接调用。
格式为"CALL FAR PTR 过程名"。
先把CS和IP的内容压入堆栈,然后在CS中装入新的段地址,IP指向段内偏移地址。
四、段间间接调用:格式为"CALL DWORD PTR OPD"。
先把CS和IP的内容压入堆栈,然后把寻址方式确定的有效地址所指定的一个字储存单元的内容送入IP,下一个字存储单元的内容(段首址)送入CS。
CBW∶指令助记符——字节转换为字。
把AL中字节的符号扩展到AH中,若(A L)的最高有效位为0 ,则(AH)=00;若(AH)的最高有效位为1,则(AH)=0FFH。
CF∶Carry Flag,进位标志,在标志寄存器的第0字节 ,记录运算时从最高有效位产生的进位值(置1)。
作加法时,CF位可以用来表示无符号数的溢出(有符号数溢出用OF表示)。
CLC∶指令助记符——标志(进位)设置。
设置CF=0。
CLD∶指令助记符——清方向标志。
使DF=0 。
这样,当执行字节串操作指令时,地址自动增1 ;当执行字串操作指令时,地址自动增2 。
CLI∶指令助记符——中断允许标志设置。
设置IF=0 。
CMC∶指令助记符——标志(进位)设置。
CF取反。
CMP∶指令助记符——比较。
对于“ CMP AX,BX” ,如果是两个无符号数比较(减),若结果没有产生借位,即CF=0,则(AX)≥(BX);若CF= 1,则(AX)〈(BX)。
如果是两个带符号数比较,则当没有溢出(OF=0)时,若SF=0,则(AX)〉(BX)若SF=1,则(AX)〈(BX)当产生溢出(OF =1)时,若SF=0,则(AX)〈(BX)多SF=1,则(AX)〉(BX)简炼的结论,若 OF 异或 SF=0,则(AX)〉(BX)若 OF 异或 SF=1,则(AX)〈(B X)CMPS∶指令助记符——串比较。
通常用CMPSB或CMPSW。
CMPSB∶ 指令助记符——串比较。
将DS段SI指出的字节数据减去ES段DI 指出的字节数据(不保存结果),然后根据相减结果设置标志位(两个数据相等,则ZF=1)。
并由方向标志DF修改SI 和DI中的地址,即当DF=0时,地址都加1;当DF=1时,地址都减1 。
CMPSW∶ 指令助记符——串比较。
将DS段SI指出的字数据减去ES段DI指出的字数据(不保存结果),然后根据相减结果设置标志位(两个数据相等,则ZF=1)。
并由方向标志DF修改SI 和DI中的地址,即当DF=0时,地址都加2;当DF=1时,地址都减2 。
COMMON∶伪指令——段定义(组合类型)。
该段与其它模块中所有也说明为C OMMON的同名,同'类别'段共享相同的存储区域,即这些段的起始地址都相同,共享的公共存储区域的长度是各模块同名段中最大的长度。
使用COMMON方式可以使不同模块中的不同变量或标号作用于相同的存储单元。
CS∶Code Segment,代码段寄存器,存放当前运行的代码段起始地址(高16位)。
代码段存放当前正在运行的程序。
CWD∶ 指令助记符——字转换为双字。
把AX中字节的符号扩展到DX中,若(AX)的最高有效位为0 ,则(DX)=0000;若(AX)的最高有效位为1,则(DX)=0FFFFH。
CX∶Count, 通用寄存器。
在循环和串处理指令中用作隐含的计数器。
其中C H是高 8位,CL是低 8位。
DAA∶指令助记符——加法的十进制调整(压缩的BCD码)。
无操作数,调整的加法结果在AL中。
调整方法是,如果AL的低 4位大于9 或AF=1 ,则加 6 到AL并置AF=1 ;如果AL的高 4位大于 9或CF=1 ,则加60H 到AL,并置CF=1 。
DAS∶ 指令助记符——减法的十进制调整(压缩的BCD码)。
调整方法是,若AF=1 或AL的低4位为A—F,则(AL)减06H,且AF置 1;若CF=1 或AL的高 4位为A—F,则(AL)减60H,且CF置1。
DB∶伪指令——定义字节。
其后的每个操作数占用一个字节。
若是字符串,必须用引号' '括起来,字符串不能超过 255个字符,字符串自左至右以字符的ASCII码按地址递增的顺序依次存放。