8086指令表
8086汇编指令表
8086汇编指令表MOV MOV DST,SRCDST≠CS、IP和imm不影响标志位MOV[9AF0H],ALMOVS MOVS mem, memMOVSB/W不影响标志位字符串传送ES:DI←(DS:SI)SI←(SI)(+/-)1DI←(DI)(+/-)1MOVSES:BYTEPTR[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 CXNEG NEG reg/mem CF OF SFZF AF PF求补:取反加一0-(DST)NEG CLNOP NOP 不影响空操作NOP NOT NOT reg/mem 不影响按位取反NOT CLOR 同AND PF SF ZFCF=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,ALPOP POP DSTDST!=imm & CS不影响标志位DST←((SP)+1,(SP))SP←(SP)+2POP WORDPtr [87EAH]POPF POPF 设置所有标志位从堆栈中弹出16位标志寄存器POPFPUSH PUSH SRC8086 SRC!=imm不影响标志位SP<--(SP)-2((SP)+1,(SP))←(SRC) [SP循环]PUSH WORDPtr [87EAH]PUSHF PUSHF 不影响压栈16位标志寄存器PUSHF RCL 同SHL 同ROL带进位循环左移RCL AL,1RCR 同SHL 同ROL带进位循环右移RCR AL,1ROL 同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 PFCF(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(不变\反)。
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,….宏调用一.指令由名字,操作码、操作数(地址)组成。
汇编语言指令集合 吐血整理
RET(return)
5.中断
INT(interrupt)指令
IRET(interrupt return)
INTO(interrupt if overflow)
六、处理机控制指令
1.标志处理指令
CLC(Clear carry)
CMC(Complement carry)
STC(Set carry)
CLD(Clear direction)
串比较指令
SCASB(Scan string of byte)
串搜索指令
SCASW(Scan string of word)
串搜索指令
STOSB(Store string of byte)
存串指令
STOSW(Store string of word)
存串指令
LODSB(Load string of byte)
ES(Extra Segment):附加段寄存器。
第一部分:指令助记符: 一、数据传送指令
1.通用数据传送指令 MOV(Move) PUSH(Push onto the stack) POP(Pop from the stack) XCHG(Exchange)
2.累加器专用传送指令 IN(Input) OUT(Output) XLAT(Translate)
REPE(Repeat when empty) 若(CX)=0,则退出,否则 CX=CX+1;
REPZ(Repeat when flag )
若 ZF=0,则退出,否则 CX=CX+1;
REPC(Repeat when carry flag)
REPNE(Repeat when not empty)
REPNZ(Repeat when not zero flag)
2_第3章 8086指令系统_加减运算指令比较指令52
3.4.2 算术运算指令
算术运算指令涉及两种类型数据,即无符号数和有符号数 对加法指令和减法指令而言,无符号和有符号数可采用同
一套指令,其先决条件有两个: 一是参加的操作数必须同为无符号数或同为有符号数 二是要采用不同标志位来检查无符号数和有符号数的 运算结果是否溢出
而乘除运算指令则需要区分无符号数和有符号数
11 11
ADC指令的使用价值
主要用于由于数据较大(多字节),需要多次运算的加法 运算中。 例:有两个4字节的无符号数相加:
2D568F8CH+3C9E489BH=? 设 被加数存放在BUF1开始的存储区内
加数存放在BUF2开始的存储区内 要求和放回BUF1存储区 假设CPU进行8位的加法运算,为此将进行4次加法运算
.386
……
MOVZX AX, A
MOVZX BX, B
ADD
AX, BX
MOVZX BX, C
ADD
AX, BX
MOV
SUM, AX
;取第一个数,扩展0传送 ;取第二个数 ;加第二个数 ;取第三个数 ;加第三个数 ;保存三个数的和
20 20
[例] P,Q,R均为8位有符号数,求它们的和,送入TOTAL
这个问题的另一种方法:
MOV AL, A
;取第一个数
MOV AH, 0
;高8位清零,准备存放和的高8位
ADD AL, B
;加第二个数
ADC AH, 0
;如果有进位,存入AH
ADD AL, C
;加第三个数
ADC AH, 0
;如果有进位,加入AH
MOV SUM, AX ;保存三个数的和
19 19
这个问题的第三种方法:
微机原理与接口技术 (第三版)电子工业出版社 第03章 8086的指令系统
4、寄存器间接寻址(Register indirect addressing) 内存单元的逻辑偏移地址通过寄存器 间接给出。 例: MOV SI , 61A8H MOV DX , [SI]
5、基址/变址寻址(Based/Indexed addressing) 位移量是一带符号的16位16进制数。当 使用BX或BP寄存器时,称基址寻址;使用SI 或DI寄存器时,称变址寻址。 例: MOV CX , 36H[BX] MOV -20[BP] , AL
2、MOV数据传送指令 其格式为: MOV 目的操作数,源操作数 • 目的操作数和源操作数均可采用不同的寻 址方式, • 两个操作数的类型必需一致。
二、寻址方式介绍பைடு நூலகம்
1.立即寻址(Immediate addressing) 操作数就在指令中,紧跟在操作码后面, 作为指令一部分存放在内存的代码段中,这 种操作数称为立即数。 例: MOV AX , 34EAH MOV BL , 20H
3)、段间直接转移 JMP far PTR 目标地址 4)、段间间接转移 JMP WORD PTR[BX][SI]
2、条件转移指令
1)、单条件转移指令 ① JC ② JNC ③ JE/JZ ④ JNE/JNZ ⑤ JS ⑥ JNS ⑦ JO ⑧ JNO ⑨ JP/JPE ⑩ JNP/JPO ;CF标志为1,则转移 ;CF标志为0,则转移 ;ZF标志为1,则转移 ;ZF标志为0,则转移 ;SF标志为1,则转移 ;SF标志为0,则转移 ;OF标志为1,则转移 ;OF标志为0,则转移 ;PF标志为1,则转移 ;PF标志为0,则转移
3、目标地址传送指令
这类指令有: 1)LEA 有效地址传送到寄存器 2)LDS 装入一个新的物理地址 3)LES 装入一个新的物理地址
Intel8086ASMCode汇编指令的机器码
8086指令码汇总表8086指令有汇编语言指令和指令码两种形式,汇编语言指令形式经过汇编程序处理后生成指令码形式。
通过指令码形式可帮助理解汇编语言指令格式的含义和用法。
O、8086指令码格式0B/1B 1B或2B 0B/1B 0B/1B/2B/4B 0B/1B/2B/4B 指令前缀操作码段寻址方式段偏移量参数立即数参数说明:偏移量参数和立即数参数的有无由寻址方式段决定。
一、传送类指令MOV指令REG/MEM→/←REG 100010dw mod reg r/mIMME→REG/MEM 1000111w mod 000 r/m data data if w=1 IMME→REG 1011wreg data data if w=1MEM→AX 1010000w addr-low addr-highAX→MEM 1010001w addr-low addr-highREG/MEM→段REG 10001110 mod reg r/m 8E段REG→REG/MEM 10001100 mod reg r/m 8CPUSH指令REG/MEM 11111111 mod 110 r/m FFREG 01010reg段REG 000reg110POP指令REG/MEM 10001111 mod 000 r/m 8FREG 01011reg段REG 000reg111XCHG指令REG/MEM←→REG 1000011w mod reg r/mREG←→AX 10010regXLAT指令11010111 D7LEA指令10001101 mod reg r/m 8DLDS指令11000101 mod reg r/m C5LES指令11000100 mod reg r/m C4LAHF指令10011111 9FSAHF指令10011110 9EPUSHF指令10011100 9CPOPF指令10011101 9DIN指令直接寻址1110010w port间接寻址1110110wOUT指令直接寻址1110011w port间接寻址1110111wCBW指令10011000 98CWD指令10011001 99 说明:d—0/1表示REG为源/目的操作数;w—0/1表示操作数类型为BYTE/WORD;mod、r/m—寻址方式,参见教材P56~57;IMME—立即数操作数,字段中用data表示;reg—通用REG用3位编码,段REG只用2位编码(即为0xx)。
汇编语言2-1寻址方式
EA =
+
பைடு நூலகம்
注意: 允许段超越。 注意:①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配 或 是非法搭配
例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
指令操作例:MOV AX,DATA[DI][BX] 指令操作例: , 操作例 若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AH=[83201H], AL=[83200H] 则指令执行后
目的 源
指令举例:
MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC HLT [BX]
二、8086的操作数分类
立即数(常数) 1、立即数(常数)
取值范围如下表: 取值范围如下表 8位 无符号数 00H-FFH(0-255)
带符号数80H-7FH(-128~127)
16位 0000H-FFFFH(0-65535)
存储器寻址方式
1、 立即寻址 、
直接把参与操作的数据写在指令中,是指令的一部分, 直接把参与操作的数据写在指令中,是指令的一部分,该数 据称为立即数。操作数可以是各种数制下的数值(相当于8位 据称为立即数。操作数可以是各种数制下的数值(相当于 位 位二进制数),也可以是带单引号的字符。 或16位二进制数),也可以是带单引号的字符。 位二进制数),也可以是带单引号的字符 强调: 强调:立即寻址只能用于源操作数 例如: 2050H,执行后, 执行后, 例如: MOV AX,2050H ; AX , 执行后 MOV AL,05H , ;AH = 20H,AL = 50H , MOV AL,‘A’ , 观察指令: 观察指令: MOV 05H,AL MOV BL,324D , , MOV CH,2050H MOV DL,‘25’ , , 注意: 立即数永远不能作目的操作数。 注意:1. 立即数永远不能作目的操作数。 2. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
8086CPU指令和伪指令(中英文全解)
8086CPU指令和寄存器英文全称。
一、数据传送指令比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xchg(exchange)等都是数据传送指令,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送。
二、算术运算指令比如,add、sub(substract)、adc(add with carry)、sbb(substract with borrow)、inc (increase)、dec(decrease)、cmp(compare)、imul(integer multiplication)、idiv (integer divide)、aaa(ASCII add with adjust)等都是算术运算指令,这些指令实现寄存器和内存中的数据运算。
它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位。
三、逻辑指令比如,and、or、not、xor(exclusive or)、test、shl(shift logic left)、shr(shift logic right)、sal(shift arithmetic left)、sar(shift arithmetic right)、rol(rotate left)、ror(rotate right)、rcl(rotate left through carry)、rcr(rotate right through carry)等都是逻辑指令。
除了not 指令外,它们的执行结果都影响标志寄存器的相关标志位。
四、转移指令可以修改IP,或同时修改CS和IP的指令统称为转移指令。
转移指令分为一下几类。
(1)无条件转移指令,比如,jmp(jump);(2)条件转移指令,比如,jcxz(jump if CX is zero)、je(jump if equal)、jb(jump if below)、ja(jump if above)、jnb(jump if not below)、jna(jump if not above)等;(3)循环指令,比如,loop;(4)过程,比如,call、ret(return)、retf(return far);(5)中断,比如,int(interrupt)、iret(interrupt return)。
8086指令系统一览表
RCR op1, 1 带进位位的循环右移 RCR op1, CL
reg mem reg mem
串 MOVSB 操 作 MOVSW 类
((DI)) ← ((SI)) (SI) ← (SI)±1, (DI) ← (DI)±1 ((DI)) ← ((SI)) (SI) ← (SI)±2, (DI) ← (DI)±2
SAR op1, 1 算术右移 SAR op1, CL
ROL op1, 1 循环左移 ROL op1, CL
ROR op1, 1 循环右移 ROR op1, CL
reg mem mem, reg reg, mem reg, reg reg, imm mem, imm acc, imm reg, mem reg, reg reg, imm mem, imm acc, imm reg mem reg mem
9+22/rep 不重复:15 1 重复:
9+15/rep 1 不重复:15 重复:
9+15/rep
2
1
2
1
REPNE/REP (CX)=0 或(ZF)=1 退出重复,否则
NZ
(CX)←(CX)-1 并执行其后的串指令
ቤተ መጻሕፍቲ ባይዱ
string_instruc
控 JMP SHORT 无条件转移 制 op1 转 JMP NEAR 移 PTR op1 类 JMP FAR
reg mem
PTR op1
JMP WORD
PTR op1
JMP DWORD
PTR op1 JZ/JE op1 JNZ/JNE op1 JS op1
ZF=1 则转移 ZF=0 则转移 SF=1 则转移
JNS op1
8086、8088 指令速查表
8086/8088 指令速查表约定:RR 表示通用寄存器和专用寄存器(AX,BX,CX,DX,BP,SP,SI,DI ),SER 表示段寄存器(CS,DS,ES,SS),MEM 表示内存单元的有效地址,[MEM]表示该单元的内容, AC 表示AX 和AL ,NN 表示立即数,NN 表示立即数, *表示对标志位有影响,F 表示标志寄存器:XXXXODITSZXAXPXCMOV X,Y X ←Y RR,SER,AC ←→[MEM],RR’; RR ,[MEM] ← NNPUSH Z Z=RR,[MEM],SERPOP ZPUSHFPOPFXCHG X,Y X ←→Y RR ←→ [MEM],RR’XLAT (OPR) AL ←[BX+AL]LEA RR,[MEM] RR ←MEMLDS RR,[MEM] RR ←[MEM],DS ←[MEM+2]LES RR,[MEM] RR ←[MEM],ES ←[MEM+2]LAHF AH ←F 低字节SAHF F 低字←AHADD X,Y X ←X+Y *ADC X,Y X ←X+Y+CF *SUB X,Y X ←X-Y *SBB X,Y X ←X-Y-CF *CMP X,Y X-Y *INC Z Z ←Z+1 Z=RR ,[MEM] * 不影响CFDEC Z Z ←Z-1 * 不影响CFNEG Z Z ←0-Z 求补 *MUL Z AX ←AL*Z (8位),DXAX ←AX*Z (16位),Z 同上,无符号数乘法,影响CF 和OFIMUL Z AX ←AL*Z ;DXAX ←AX*Z ;Z 同上;带符号数乘法,影响CF 和OFDIV Z AX/Z ,AH ←余数,AL ←商(16位/8位)DXAX/Z ,DX ←余数,AX ←商(32位/16位)IDIV Z 带符号数除法,操作同上DAA 加法后对AL 进行组合BCD 码调整 *DAS 减法后对AL 进行组合BCD 码调整 *AAA 加法后对AL 进行非组合BCD 码调整,AH ←AH+调整后的进位,CF=调整后的进位 * AAS 减法后对AL 进行非组合BCD 码调整,AH ←AH-调整后的借位 *AAM 将AL 中的积调整为非组合BCD 码, AH ←商(AL/0AH ),AL ←余数(AL/0AH ) *AAD 除法前的调整,A ←AL+AH*0AH ,AH ←0 *AND X,Y X ←X ∧Y *OR X,Y X ←X ∨Y *NOT Z Z ←/ZXOR X,Y X ←X Y *TEST X,Y X ∧Y *SHL Z,1(CL) 逻辑左移 *SAL Z,1(CL) 算术左移 *SHR Z,1(CL) 逻辑右移 *SAR Z,1(CL) 算术右移 *无符号数除法ROL Z,1(CL) 循环左移 影响CF 和OFROR Z,1(CL) 循环右移 影响CF 和OFRCL Z,1(CL) 带进位循环左移 影响CF 和OFRCR Z,1(CL) 带进位循环右移 影响CF 和OFMOVSB/MOVSW [ES:DI] ←[DS:SI],DF=0,DI 和SI 递增,否则递减,可加REP,CX ←CX-1,CX=0退出 STOSB/STOSW [ES:DI] ←AC, DF=0,DI 递增, 否则递减,可加REPLODSB/LODSW AC ←[DS:SI], DF=0,SI 递增, 否则递减,不加前缀CMPSB/CMPSW [DS:SI]-[ES:DI]比较, DF=0,DI 和SI 递增,否则递减,可加REPE/REPZ,REPNE/REPNZSCASB/SCASW AC-[ES :DI]比较,DF=0,DI 递增, 否则递减,可加REPE/REPZ,REPNE/REPNZ JMP W IP ←W ,W=NN ,RR ,[MEM]JMP NN1,NN2 CS ←NN1,IP ←NN2对无符号数JA/JNBE NN 高于/不低于也不等于 则转移 JAE/JNB NN 高于或等于/不低于 则转移 JB/JNAE NN 低于/不高于也不等于 则转移 JBE/JNA NN 低于或等于/不高于 则转移 对带符号数JG/JNLE NN 大于/不小于也不等于 则转移 JGE/JNL NN 大于或等于/不小于 则转移 JL/JNGE NN 小于/不大于也不等于 则转移 JLE/JNG NN 小于或等于/不大于 则转移 单标志JC NN CF=1 则转移 JNC NN CF=0 则转移 JZ/JE NN ZF=1, 则转移 JNZ/JNE NN ZF=0, 则转移 位条件转移JS NN SF=1, 则转移 JNS NN SF=0, 则转移 JO NN OF=1, 则转移 JNO NN OF=0, 则转移 JP/JO NN PF=1, 则转移 JNP/JNO NN PF=0, 则转移 循环控制LOOP NN CX ←CX-1,CX ≠0, 则转LOOPE/LOOPZ NN CX ←CX-1,ZF=1且CX ≠0 则转LOOPNE/LOOPNZ NN CX ←CX-1,ZF=0且CX ≠0 则转JCXZ NN CX=0,则转CALL W RET IRETINT TYPE CS 压栈,IP 压栈,CS ←[TYPE*4+2],IP ←[TYPE*4+4] INT0 OF=1,则CS 压栈,IP 压栈,CS ←[12H],IP ←[10H]CBW AL 符号扩展到AH CWD AX 符号扩展到DXCLC CF ←0 STC CF ←1CLD DF ←0 STD DF ←1CLI IF ←0 STI IF ←1CMC CF ←/CF NOP 空操作HLT 停机 WAIT 等待ESC 换码 LOCK 封锁IN AC, DX OUT DX,ACIN AC, PORT OUT PORT,AC。
8086汇编语言指令表(按字母顺序)
CLI ;置IF=0,CPU禁止响应外部中断
STI ;置IF=1,使CPU允许向应外部中断
功能: 完成对标志位的置位、复位等操作.
说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.
CLD
处理器控制指令-标志位操作指令
格式:
3. 在8088/8086指令系统中,专门提供了一组根据带符号数比较大小后,实现条件转移的指令.
CMPS
字符串比较指令
格式: CMPS OPRD1,OPRD2
CMPSB
CMPSW
功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.
同时SI,DI将自动调整.
CMC
处理器控制指令-标志位操作指令
格式:
CLC ;置CF=0
STC ;置CF=1
CMC ;置CF=(Not CF)进位标志求反
CLD ;置DF=0
STD ;置DF=1
CLI ;置IF=0,CPU禁止响应外部中断
STI ;置IF=1,使CPU允许向应外部中断
功能: 完成对标志位的置位、复位等操作.
说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.
说明:
1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整:
乘积: (AH)<--(AL)/10
(AL)<--(AL)MOD10
2. 本指令应跟在MUL指令后使用,乘积的两位十进制结果,高位放在AH中,低位放在AL中.AH内容是MUL指令的结果被10除的商,即(AL)/10,而最后的AL内容是乘积被10整除的余数(即个位数).
chap3.2指令
•MOV [BP],AX;使用SS段寄存器
•MOV DS:[BP],DL;使用跨段前缀
•MOV BUF,DS;BUF是个字变量
MOV AX, ‘E’ 把E的ASCII码传给AX
MOVSX 目的操作数,源操作数 功能:将16或8位的源操作数,带符号扩展成32 位或16位的目的操作数。两种格式 (1)寄存器 寄存器(2)寄存器 存储单元 MOVSX ECX , AX AX=1234 ECX=00001234 MOVZX 目的操作数,源操作数 功能:将源操作数零扩展送目的操作数 两种格式 (1)寄存器寄存器(2)寄存器存储单元 MOVZX ECX, AX AX=A345 ECX=0000A345
OUT DX,AL
(2) 换码指令
格式:XLAT 功能:使累加器AL中的值变换为内存表格 中的某个对应值。将(BX)为首址(AL)为
位移量的字节存储单元中的数据送AL寄存器。 即([BX+AL])→AL
用途:常用来把一种代码转换为另一种代码。 注意:该指令不影响标志位。
DS=F000H ,BX=0040H, AL=03H XLAT 或 XLAT LIST
III. 不影响标志寄存器
(3)交换指令
语句格式:XCHG OPD,OPS
功能:将源地址与目的地址中的内容互换。即 (OPD)→OPS,(OPS)→OPD。
寄存器与存储器之间或寄存器之间数据交换。 XCHG AX,BX
XCHG BX, [BP+SI] BX=6F30H,BP=0200H SI=0046H,SS=2F00H,(2F246H)=4154H PA=SS*10H+SI+DI=2F246H 执行后: BX=4154H (2F246H)=6F30H
第3章 8086指令系统(最后有练习题)
开 始
8086CPU的指令系统的基本指令
包括数据传送类指令、算术运算类指令、 位操作类指令、串操作类指令、控制转移 类指令、处理机控制类指令。后几节将分 别介绍这些指令的语句格式和功能。
3.1 8086的寻址方式
3.1.1 数据的寻址方式 3.1.2 程序转移地址的寻址方式 3.1.3 对端口的寻址方式
3.1.2 程序转移地址的寻址方式
用来确定转移指令及CALL指令的转向地址。
段内寻址
段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址
段间寻址
段内:转移指令与转向的目标指令在同一代码段 中,(CS)不变。
段间:转移指令与转向的目标指令在两个代码段中, (CS) 变化。
表示转移距离(称为位移量)的操作符:
返回本节
2 . 寄存器寻址
寄存器寻址方式的操作数在指令指明的寄 存器中。 汇编格式:R ,其中R表示寄存器名。 功能:操作数直接存放在寄存器R中。 例如:MOV AL,BL
【例3-2】下列程序执行后,(AX)=?,
(BX)=?
MOV AX,1234H
MOV BX,5678H
ADD AX,BX 执行:1234H→AX 5678H→BX (AX)+(BX)→AX 执行后:(AX)=68ACH,(BX)=5678H
3 . 直接寻址
特点:操作数在内存中。 汇编格式:①含有变量的地址表达式。 ②段寄存器名:[EA] 。 功能:指令下一字单元的内容是操作数的偏 移地址EA。 图形表示:
【例3-3】
寄存器和存储器内容为:(AX)=1212H, (DS)=3000H,(32000H)=45H, (32001H)=46H。 执行指令:MOV AX ,[2000H] 问执行后:(AX)=? Step1:计算地址DS*16+2000H=32000H Step2:找内容(32000H),(32001H) 所以执行后:(AX)=4645H
第3章8086指令系统(上)
或
(SS)×16+(BP)
【例3-4】 已知:(DS)=3000H,(BX)=1100H,(31100H)= 12H,(31101H)=34H,执行指令:MOV AX, [BX]。 操作数的物理地址为:(DS)×16+(BX)=3000H×16+ 1100H=31100H,指令执行后(AX)=3412H。
本章内容提要
3.1 8086指令系统入门 3.2 数据据传送类指令 3.3 算术运算与逻辑运算类指令
3.1 8086指令系统入门
3.1.1 指令分类
数据传送类指令 算术运算类指令
字符串操作指令 处理器控制类指令
逻辑运算类指令
程序控制类指令
3.1.2 指令格式
操作码 [目的操作数][,源操作数]
3.1.3 操作数寻址
ADD SI, 2 LOOP LOP MOV BX, SI MOV DI, BX MOV 1000[DI], AX
;将累加和存入1000+(DI)指 ;向的内存单元
3.2 数据传送类指令
3.2.1 传送指令
格式:MOV DST, SRC 功能:将源操作数传送给目的操作数。 ① ② ③ ④ 在CPU内部寄存器之间进行数据传送 MOV AX,BX 在CPU内部寄存器与存储器之间进行数据传送 MOV AX,[1000H] 将立即数传送给寄存器 MOV AX,1234H 将立即数传送给存储单元 MOV [1000H],1000H
【例3-15】 已知:(DS)=3000H,(32000H)=12H,(32001H)= 34H,(32002H)=56H,(32003H)=78H。 执行指令:LDS SI, [2000H]。
8086指令系统一览表
CMP op1, op2
(op1) - (op2)
mem, reg
reg, mem
reg, reg
reg, imm
mem, imm
acc, imm
9+EA
9+EA
3
4
10+EA
4
2 ~ 4
2 ~ 4
2
3 ~ 4
3 ~ 6
2 ~ 3
MUL src
(AX)←(AL) * (src)
(DX, AX)←(AX) * (src)
(IP)←(IP) + D16
段内间接:(SP)←(SP)-2
((SP)+1, (SP))←(IP)
(IP)←EA
段间直接:(SP)←(SP)-2
((SP)+1, (SP))←(CS)
(SP)←(SP)-2
((SP)+1, (SP))←(IP)
(IP)←目的偏移地址
(CS)←目的段基址
16位reg
16位mem
80 ~ 90
(86 ~ 96)+EA
144 ~ 162
(150 ~ 168)+EA
2
2 ~ 4
2
2 ~ 4
IDIV src
(AL)←(AX) / (src)的商
(AH)←(AX) / (src)的余数
(AX)←(DX, AX) / (src)的商
(DX)←(DX, AX) / (src)的余数
(86 ~ 104)+EA
128 ~ 154
(134 ~ 160)+EA
2
2 ~ 4
2
2 ~ 4
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表2-2算术运算指令
表2-4 串操作指令
表2-5程序转移指令
表2-7串操作指令中寄存器和标志位的用途
1.设BL=0FFH,执行指令“SAR BL , 1”后,BL中的内容是(0FFH)。
2.设SP=1300H,AX=200H,执行指令“POP AX”后,SP寄存器的内容为(1302H)。
3.十进制数的-1的8位二进制补码,用十六进制数表示是(D)
A.01H
B.8FH
C.0FEH
D.0FFH
MOV用法总结
非法操作:
1.两个操作数都是存储器操作数
2.src是立即数,dest是段寄存器
3.两个操作数都是段寄存器
MOV指令用法的举例:
MOV AX , CX ;段寄存器至通用寄存器
MOV AL , 125 ;立即数至寄存器
MOV MEM , 15 ;立即数至存储器,直接寻址
MOV SI , BX ;寄存器至寄存器
MOV DS , AX ;通用寄存器至段寄存器(CS不行)
MOV [BX] , 50H ;立即数至存储器,寄存器间接寻址
MOV MEM , AX ;寄存器至存储器,直接寻址
MOV MEM , DS ;段寄存器至存储器,直接寻址
MOV ISP[BX] , CX ;寄存器至存储器,基址寻址
MOV AX , DISP[SI] ;存储器至寄存器,变址寻址
MOV DS , MEM ;存储器至段寄存器,直接寻址
MOV AX , DISP[BX] [SI] ;存储器至寄存器,基址变址寻址
标志位
1.CF:进位标志位。
当进行加法或减法运算时,最高位发生进位或借位,CF=1;否则,CF=0。
2.PF:奇偶标志位。
当运算结果的最低有效字节中“1”的个数为偶数时,PF=1;为奇数时,CF=0。
3.AF:辅助进位位。
在减法或加法操作中,低4位向高4位有进位、借位发生时,AF=1;否则,AF=0。
4.ZF:零标志位。
ZF=1表示运算结果为零;否则ZF=0。
5.SF:符号标志位。
SF=1表示运算结果的最高位为1(即为负数);否则SF=0。
6.OF:溢出标志位。
OF=1表示溢出,即算术运算的结果超出了带符号数的范围;OF=0表示未溢出。
8位带符号数的范围是-128--+127,16位带符号数的范围是-32768--+3276
7.
7.TF:跟踪标志位。
TF=1是CPU处于单步执行指令的工作方式。
这种方式便于进行程序的调试。
每执行一条指令后,便自动产生一次内部中断,从而能逐条地检查程序。
8.IF:中断允许标志位。
IF=1使CPU可以响应可屏蔽中断请求。
IF=0使CPU 禁止响应可屏蔽中断请求。
不可屏蔽中断和内部中断不受IF影响。
9.DF:方向标志位。
DF=1字符串操作按地址递减进行;DF=0字符串操作按地址递增进行。
数据的寻址方式:
1.立即寻址
操作数直接在指令中给出。
例:MOV AL,50
2.寄存器寻址
指令的操作码是一个寄存器,操作数在这个寄存器中。
例:ADD AX,BX,将AX中的内容和BX中的内容相加后,结果送AX。
3.直接寻址
操作数在存储器中的地址在指令中直接给出。
例:ADD AX,[1000H],将存储单元1000H中的内容和AX中的内容相加后,结果送AX。
4.寄存器间接寻址
操作数的地址在寄存器中,其寄存器在指令中给出。
例:MOV AX,[SI],将寄存器SI中的内容作为访问存储器的某个单元的地址,然后取出地址中的操作数送入AX。
MOV [SI] ,BX
注:能使用的寄存器有四个:SI、DI、BX、BP。
5.变址寻址
是由指令提供基地址、变址寄存器提供偏移爨,此寻址方式面向用户,常用于访问字符串、向量数据结构和循环程序设计。
例:MOV AX,[SI][1300H],EA=SI+13000H
注:能使用的寄存器有两个:SI或DI。
6.基址寻址
是由基址寄存器提供基准地址、指令提供偏移量;此寻址方式面向系统,由逻辑地址空间到物理地址空间的变换提供支持,用以解决程序在存储器中再定位和扩大寻址空间问题。
例:MOV AX,[BX][1300H],EA=BX+13000H
注:能使用的寄存器有两个:BX或BP。
7.基址变址寻址
操作数的地址是程序计数器PC的值加上偏移量形成的,这个偏移量在指令中给出。
是一种特殊的变址寻址方式,偏移量用补码表示,可正可负。
相对寻址可用较短的地址码访问内存。
例:MOV AX,[BX][1300H] [SI],EA=BX+13000H+SI
注:指令使用了BX,则段地址是DS;指令使用了BP,则段地址是SS。
1.变量定义X DW 12H,34H,执行MOV AX , X后,AX的值是(A)
A.12H
B.34H
C.1234H
D.3412H
2.设有变量定义伪指令X DB ‘2834’,则执行指令MOV AL , X后,AL的值是(A)
A.’2’
B.’4’
C.’2834’
D.指令不能执行
3.由伪指令X DB 2 DUP(123,‘0’)定义的变量X占用的字节数是(B)
A.2
B.4
C.6
D.8
4.设被测量温度的变化范围为-50℃--150℃,要求测量误差不超过±1℃,则应选用A/D转换器的分辨率至少应为(8)位。
5.某10位D/A转换器输出电压范围为0--5V,数字量200H对应的输出电压为(B)
A.0.00V
B.2.50V
C.3.50V
D.5.00V
6.指令MOV AX , 4 NE 3执行后,AX=(0FFFFH)。
7.设有数据定义A DW 1234H , 5678H,执行指令“MOV AX , A+1”后,AX中的内容是(D)
A.1235H
B.3456H
C.5634H
D.7812H
8.中断类型号为12H的中断向量的物理地址为(B)
A.00012H--00015H
B.00048H--0004BH
C.00048H--00051H
D.00072H--00075H
9.设有数据定义VAL DW , 1,2,3,4,5
则指令MOV AX , VAL+4执行后,AX的值为(0003H)
10.存放在内存物理地址0000H:0010H处的中断向量所对应的中断类型号是(B)
A.0
B.4
C.10
D.10H
11.设有数据定义A DW 1234H , 5678H,执行指令“MOV AL , BYTE PTR A+1”后,AL中的内容是(A)
A.12H
B.13H
C.34H
D.35H
12.设在内存00048H--0004BH单元中存储的内容依次为40H,23H,90H,78H,则指令“INT 12H”执行后,CS=(7890H)。
13.设某一ROM芯片的地址范围为00000H--003FFH,则该ROM芯片可寻址的存储单元有(A)
A.1K个
B.2K个
C.4K个
D.8K个
14.伪指令X DW 2 DUP(‘0’,12)定义的变量X占用了(8)个字节。
15.某一中断服务程序的入口地址存放在中断向量表的0020H--0023H存储单元中,则该中断对应的中断类型码是(B)
A.05H
B.08H
C.10H
D.20H
16.变量定义X DW 12H , 34H,执行指令“MOV AX , X”后,AX的值是(0012H)。
17.2716为2K*8位的EPPOM存储器,若其起始地址为0B000H,则该存储器的末地址为(0B7FFH)。
18.某8位D/A转换器输出电压的范围为0--5V,数字量40H对应的输出电压约为(B)
A.1V
B.1.25V
C.2.5V
D.4V
19.若要使8253的某一计数器工作在方式3,按二进制计数,使输出的方波频率为1KHz,当输入脉冲CLK为1MHz时,则该计数器应输入的计数初值为(A)
A.1000
B.1024
C.2000
D.2048
20.某存储器系统采用部分译码法,有3条最高位地址线未参加地址译码,则译码输出所对应的地址范围是其所连接芯片容量的(D)
A.2倍
B.3倍
C.4倍
D.8倍
21.某2K*8位的EPPOM芯片采用全译码法与CPU连接,若为该芯片分配的起始地址为08000H,则分配给它的末地址为(0B7FFH)。
22.用512*4位的RAM芯片构成4KB的存储系统,需要改芯片的数量是(C)
A.4片
B.8片
C.16片
D.32片
默认的段寄存器*10+存放偏移的寄存器=物理地址。