8086指令总结

合集下载

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汇编指令大全.
不影响标志位
不允许寄存器或存储单元到除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汇编指令表

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指令系统总结

8086指令系统总结

8086指令系统总结8086是一种x86架构的微处理器,由Intel公司于1978年推出。

它是16位的,拥有20位的物理寻址能力,可以访问1MB的内存空间。

8086指令系统是其所支持的一系列指令集合,下面将对8086指令系统进行详细总结。

数据传输指令是8086指令系统中的基础指令之一,用于将数据从一个位置传输到另一个位置。

其中包括mov指令、xchg指令、push指令和pop指令等。

mov指令用于将数据从一个存储位置复制到另一个存储位置;xchg指令用于交换两个存储位置中的数据;push指令用于将数据压入栈顶;pop指令用于将栈顶的数据弹出。

算术运算指令是用于进行各种算术运算的指令。

8086支持包括加法、减法、乘法和除法等多种算术运算指令。

例如,add指令用于将两个操作数相加,sub指令用于将第二个操作数从第一个操作数中减去,mul指令用于将两个操作数相乘,div指令用于将第一个操作数除以第一个操作数,并将结果保存在指定的寄存器中。

逻辑运算指令用于进行逻辑运算,包括与、或、非、异或等运算。

例如,and指令用于对两个操作数进行按位与运算,or指令用于对两个操作数进行按位或运算,not指令用于对一个操作数进行按位非运算,xor指令用于对两个操作数进行按位异或运算。

控制转移指令用于控制程序的执行流程。

包括无条件转移指令、条件转移指令和循环指令。

无条件转移指令用于无条件地跳转到指定的地址,例如jmp指令;条件转移指令用于根据一些条件是否成立来进行跳转,例如je指令(跳转到指定地址,如果上一次比较操作相等);循环指令用于循环执行指定的指令块,例如loop指令。

I/O指令用于进行输入输出操作,包括从外部设备读取数据和将数据写入外部设备。

例如,in指令用于将输入端口的数据读取到指定的寄存器中,out指令用于将指定的寄存器中的数据写入到输出端口。

此外,8086还支持一些特殊的指令,如访问标志寄存器的指令,控制指令(如hlt指令、nop指令)和字符串指令(如movsb指令、cmpsb指令)等。

8086汇编指令

8086汇编指令
5>处理器控制指令 T`| >oX
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

8086CPU指令和伪指令(中英文全解)

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常用指令

8086常用指令
JMP FAR 变CS。执行操作为(IP)<-OPR的段内偏移地址;(CS)<-OPR所在段的段地址
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;方向标志置零(从左向右扫描)

Intel8086ASMCode汇编指令的机器码

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)。

8086汇编语言指令表(按字母顺序)

8086汇编语言指令表(按字母顺序)
(2) 若(AL) and 0F0H>90H 或 CF=1,则(AL)<--(AL)+60H,CF<--1.
2. 示例: (AL)=18H,(BL)=06H
ADD AL,BL ; (AL)<--(AL)+(BL) ; (AL)=1EH
DAA ; (AL)
DAS
组合十进制减法调整指令 DAS(Decimal Adjust for Subtraction)
则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,
否则(AL)<--(AL) and 0FH
ADC
带进位加法指令 ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
DAA
组合的十进制加法调整指令 DAA(Decimal Adjust for Addition)
格式: DAA
功能: 对AL中的两个组合进制数相加的结果进行调整,调整结果仍放在AL中,进位标志放在CF中.
说明:
1. 调整操作如下
(1) 若(AL) and 0FH>9 或 AF=1,则(AL)<--(AL)+6,AF<--1,对低四位的调整.
格式: DAS
功能: 对两个组合十进制数相减后存于AL中的结果进行调整,调整后产生一个组合的十进制数且仍存于AL中.
说明:
调整操作
若(AL) and 0FH > 9 或 AF=1,则(AL)<--(AL)-6,AF=1
若(AL) and 0F0H > 90H 或 CF=1,则(AL)<--(AL)-60,CF=1

8086指令大全

8086指令大全

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提供段基址。

8086常用指令集

8086常用指令集

8086指令集寄存器:累加器:AX 变址寄存器:SI 代码段寄存器:CS 指令指针:IP基址寄存器:BX 变址寄存器:DI 数据段寄存器:DS 微处理器状态字:PSW 计数寄存器:CX 堆栈寄存器:SP 附加段寄存器:ES数据寄存器:DX 基址指针:BP 堆栈段寄存器:SS属性操作符:符号及含义:SEG:取出段地址OPR:一个操作数REGn:一个n位寄存器OFFSET:取出偏移地址SRC:源操作数MEM:一个存储单元TYPE:取出其类型DST:目的操作数CNT:计数值LENGTH:取出变量重复次数REG:一个寄存器LABEL:标号或过程名SIZE:取出变量的大小SEG:段地址IDATA:立即数数据寻址方式:立即寻址,寄存器寻址,存储器寻址(5种),隐含寻址一:立即寻址:MOV AX ,12A2H ;二:寄存器寻址:MOV DS,AX ; MOV V AR ,BX ;三:存储器寻址:操作数保存在存储单元中(5种)直接寻址:偏移地址直接给出, 1.MOV AX,V AR; 2. MOV DL,V AR2+5;3. MOV CX,[1200H]4. MOV V AR,2500 ;寄存器间接寻址:有效地址存放在寄存器中,直接寻址:1.MOV AX,[ SI ] ; 2.MOV [BX],DX ;寄存器相对寻址:有效地址为一个基址寄存器或变址寄存器的内容怀一个8位或16位的位移量这和. 1.MOV BX,[ SO+5 ] ; 2.MOV CX,V AR[BX]; 3.MOV AL,V AR[DI-5]基址变址寄存器:有效地址为一个基址寄存器和一个变址寄存器之和,1.MOV DX,[BX][SI]2.MOV AX,[BP][SI]基地变址且相对寻址:基址寄存器内容,一个变址寄存器内容,一个位移量,三者之和。

1.MOV AX,[BX+5][SI];2.MOV V AR[BP][DI],AX;数据传送指令:通用传送类指令:MOV 格式: MOV DST,SRC;获取有效地址指令:LEA 格式:LEA REG16, MEM;获取地址指针指令:LDS,LES 格式:LDS REG16, MEM(取高16位送入DS,低16送入REG16中;) 格式; LES REG16, MEM(高16位送入ES,低16送入REG16中)标志传送指令:LAHF,SAHF 格式:LAHF ;PSW寄存器中低8位传送到寄存器AH中格式:SAHF ; 将寄存器AH中低8位传送到PSW寄存器中的低8位数据交换指令:XCHG 格式:XCHG DST,SRC :两个操作数之间数据的交换字节转换指令:XLAT 格式:XLAT :堆栈操作指令:PUSH,POP,PUSHF,POPF算术运算类指令:加减法指令:加法指令:ADD,ADC : 格式:ADD DST,SRC ;将SRC+DST的结果存入DSTADC DST,SRC;将SRC+DST+CF的结果存入DST 减法指令:SUB,SBB: 格式:SUB DST,SRC;相似上方,取负指令:NEG 格式:NEG DST; 0-DST的结果存在DST.比较指令:CMP 格式:CMP DST,SRC; DST-SRC的结果设置PSW的状态标志位。

8086指令全集

8086指令全集

XCHG 目标,源 目标,
目标地址传送 装入 寄存器 装入DS寄存器 装入ES寄存器 装入 寄存器 低字节装入AH寄存器 将FLAGS低字节装入 寄存器 低字节装入 标志位传送 内容装入FLAGS低字节 将AH内容装入 内容装入 低字节 将FLAGS内容压入堆栈 内容压入堆栈 从堆栈弹出FLAGS内容 内容 从堆栈弹出 I/O数据传送 数据传送 输入字节或字 输出字节或字
X X X X X X X X X X X X X X X X X X -
重复 无条件重复 前辍 当相等/为零时重复
当不等/不为零时重复
REP REPE/REPZ REPNE/REPNZ
3.2.5 处理器控制指令
类 别 指令 名称
清除进位标志 置1进位标志 进位标志
助记符 O D I
CLC STC CMC CLD STD CLI STI WAIT ESC LOCK HLT NOP
指令类型 字压入堆栈
通用数据传送
指令功能 字节或字传送 字弹出堆栈 字节或字交换 代码转换 装入有效地址
指令书写格式 MOV PUSH POP XLAT LEA LDS LES LAHF SAHF PUSHF POPF IN 累加器, 累加器,端口 OUT 端口,累加器 端口, 目标, 目标,源 目标, 目标,源 目标, 目标,源 目标, 目标,源 源 目标
指令书写格式
状态标志位
O S Z A P C X X X X X X X X X X U U U U U X U U X X X X X X X X U U U U U X U X X X X X X X X X X X U U U U U X U X X X X X X X X X X X U U U U X X X X U X X X X X X X X U U U U U X U X X X X X X X — X X X X U U X X X X U U

8086汇编 机器指令

8086汇编 机器指令

8086汇编机器指令8086汇编是一种低级语言,它基于Intel 8086微处理器的指令集架构。

在计算机科学中,汇编语言是一种与机器语言密切相关的语言,它提供了一种将高级语言编写的程序转换为机器语言的方式。

8086汇编的机器指令是一组独特的二进制代码,它们被计算机硬件直接执行,从而实现各种功能。

下面是8086汇编的一些常见指令的相关参考内容:1. MOV指令(Move):用于将数据从一个位置复制到另一个位置。

例如:```MOV AX, BX ;将BX寄存器中的值复制到AX寄存器```2. ADD指令:用于将两个值相加并将结果存储在目标位置。

例如:```ADD AX, BX ;将AX寄存器和BX寄存器中的值相加,并将结果存储在AX寄存器```3. SUB指令(Subtract):用于将一个值从另一个值中减去并将结果存储在目标位置。

例如:```SUB AX, BX ;将BX寄存器的值从AX寄存器的值中减去,并将结果存储在AX寄存器```4. CMP指令(Compare):用于比较两个值,并根据比较结果设置标志位。

例如:```CMP AX, BX ;比较AX寄存器和BX寄存器的值,根据比较结果设置标志位```5. JMP指令(Jump):用于无条件跳转到程序中的另一个位置。

例如:```JMP label ;跳转到标签为"label"的位置```6. JE指令(Jump if Equal):用于在相等条件下跳转到程序中的另一个位置。

例如:```JE label ;如果上一次比较为真,则跳转到标签为"label"的位置```7. JNE指令(Jump if Not Equal):用于在不相等条件下跳转到程序中的另一个位置。

例如:```JNE label ;如果上一次比较为假,则跳转到标签为"label"的位置```8. LOOP指令:用于循环执行一段代码块。

8086汇编指令大全

8086汇编指令大全

8086汇编指令大全标志寄存器: 9个有效位,分6个状态寄存器和3个控制寄存器CF 当执行一个加法(减法)使最高位产生进位(借位)时CF=1 否则CF=0PF 指令执行的结果低8位有偶数个一时,CF=1 否则CF=0AF 当执行一个加法(减法)使运算结果低4位向高4位有进位(借位)时AF=1 否则 AF+0ZF 当前运算结果为零,ZF=1 否则ZF=0SF 符号标志位OF 溢出标志位DF 方向标志位IF 中断允许位 IF=1时响应外部中断TF 跟踪标志位操作数:[目的操作数(OPD),源操作数(OPS)] ;立即操作数,寄存器操作数,存储器操作数。

寻址方式:1) 寄存器寻址例: INC AX; MOV AX,BX2) 寄存器间接寻址(寄存器只能是BX,DI,SI,BP);[PA=(BX、DI、SI)+DS》4)或BP+SS》4]3) 寄存器相对寻址4) 基址变址寻址5) 相对基址变址寻址6) 直接寻址7) 立即数寻址i. 立即数寻址立即数寻址不能用在单操作数指令中ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段指令系统:1) 数据传送指令 mov注意:不允许在两个存储单元之间直接传送数据不允许在两个段寄存器之间传送数据不允许用立即数直接为段寄存器赋值不影响标志位不允许寄存器或存储单元到除CS外的段寄存器2) 入栈(出栈)指令PUSH(POP)注意:PUSH操作数不能是“立即数”POP操作数不能是段寄存器CS 不影响标志位先进后出单操作符3) 交换指令XCHG注意:只允许寄存器与存储单元之间的交换不影响标志位4) 换码指令 XLAT5) 地址传送指令LEA(load effective address):偏移地址()6) 数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI)、高地址的字送DS7) 附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI)、高地址送ES上三指令不影响标志位8) 标志寄存器传送指令LAHF :标志寄存器低八位送AHSAHF :AH送标志寄存器低八位PUSHF:标志寄存器压入堆栈POPF :栈顶内容送标志寄存器9) 加法指令 ADD目的操作数只能是寄存器或存储单元对CF,OF,SF,PF,ZF,AF有影响10) 加1指令 INC对OF,SF,PF,ZF,AF有影响11) 带位加法指令 ADC在进行单精度运算时用ADD指令,在高精度低位运算时用ADD、高位用ADCOPD=OPD+OPS+CF12) 减法指令 SUB对CF,OF,SF,PF,ZF,AF有影响13) 带借位减法指令 SBBOPD=OPD—OPS—CF对CF,OF,SF,PF,ZF,AF有影响对CF,OF,SF,PF,ZF,AF有影响14) 减1指令 DEC15) 比较指令 CMP16) 求补指令 NEG17) 无符号乘法指令 MUL字节操作:AX=AL*OPS字操作:DX,AX=AX*OPS18) 有符号乘法指令 IMUL19) 无符号除法指令 DIV字节的操作:AL=AX/(OPS)的商AH=AX/(OPS)的余数字的操作:20) 有符号除法 IDIV21) 字节转换为字指令 CBW把AL中的符号位扩展到AH中,如果AL的最高位为0,则AH=00H,如果最高位为1,则AH=FFH22) 字转换为双字指令 CWD23) 压缩的BCD码调整指令DAA 加法的十进制调整指令DAS 减法的十进制调整指令24) 非压缩的BCD码调整指令AAA 加法的ASCII调整指令AAS 减法的ASCII调整指令AAM 乘法的ASCII调整指令AAD 除法的ASCII调整指令25) 逻辑与运算指令ADDORNOTTEST(OPD和OPS的内容不变)26) 移位指令逻辑左移与算术左移SHL、SAL(低位补0)算术右移 SAR(高位不变、CF为最后移入的值)逻辑右移 SHR(高位补0、CF为最后移入的值)27) 循环移位左移 ROL (CF为最后移入的值)右移 ROR (CF为最后移入的值)带进位循环左移 RCL(CF+OPD 一起左循环)带进位循环右移 RCR(OPD+CF 一起右循环)28) 无条件转移指令下JMPJMP SHORT OPD(IP=IP+8位位移量)JMP NEAR PTR OPD(IP=IP+16位位移量)上二条指令目的地址是IP=OPD+IPJMP WORD PTR OPD(IP=EA)JMP FAR PTR OPD(IP=OPD的段内偏移地址 CS=OPD段地址)JMP DWORD PTR OPD(IP=EA CS=EA+2)29) 条件转移指令JZ(JE)结果为0则转移(ZF=1)JNZ(JNE)结果不为0则转移(ZF=0)JS 结果为负则转移(SF=1)JNS 结果为正则转移(SF=0)JO 溢出则转移(OF=1)JNO 不溢出则转移(OF=0)JP(JPE)奇偶位为1则转移(PF=1)JNP(JPO)奇偶位不为1则转移(PF=0)JC(JNAE,JB)低于且不等于或进位位为1则转移(CF=1)JNC(JNE,JNB)高于或等于或进位位为0则转移(CF=0)30)。

8086指令操作数的寻址方式实验总结

8086指令操作数的寻址方式实验总结

8086指令操作数的寻址方式实验总结在计算机体系结构的学习中,8086指令操作数的寻址方式是一个非常重要的概念。

通过对这一概念的深入了解和实验操作,我们可以更好地理解计算机程序的执行过程,深化对计算机底层原理的理解。

在本文中,我将结合理论知识和实验结果,对8086指令操作数的寻址方式进行全面评估和总结。

1. 立即寻址立即寻址是一种直接将操作数的值嵌入指令中的寻址方式。

在8086指令集中,我们可以使用MOV指令将一个立即数传送到目的操作数中。

MOV AX, 1234h指令将立即数1234h传送到寄存器AX中。

通过实验操作,我发现立即寻址方式适用于需要直接传送常数值的情况,能够提高程序执行的效率。

2. 寄存器寻址寄存器寻址是一种通过寄存器来寻址操作数的方式。

8086微处理器具有通用寄存器AX、BX、CX、DX等,可以直接操作这些寄存器中的数据。

MOV AX, BX指令将寄存器BX中的数据传送到寄存器AX中。

在实验过程中,我发现寄存器寻址方式是一种高效的操作数寻址方式,能够提高程序的执行速度。

3. 直接寻址直接寻址是一种通过内存位置区域来寻址操作数的方式。

在8086指令集中,我们可以使用MOV指令将内存中的数据传送到寄存器中,或将寄存器中的数据传送到内存中。

MOV AX, [1234h]指令将存储在内存位置区域1234h处的数据传送到寄存器AX中。

实验结果表明,直接寻址方式可以灵活地对内存中的数据进行操作,适用于大规模数据的传送和处理。

4. 寄存器间接寻址寄存器间接寻址是一种通过寄存器中存储的位置区域来寻址操作数的方式。

在8086指令集中,我们可以使用指令将寄存器中存储的内存位置区域作为操作数进行操作。

MOV BX, [SI]指令将寄存器SI中存储的内存位置区域处的数据传送到寄存器BX中。

在实验中,我发现寄存器间接寻址方式适用于需要对内存中多个数据进行操作的情况,能够提高程序的效率和灵活性。

5. 立即偏移寻址立即偏移寻址是一种通过基址寄存器和偏移量来寻址操作数的方式。

8086汇编移位指令

8086汇编移位指令

8086汇编移位指令汇编移位指令包括:SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCRSHL、SHR、SAL、SAR:SHL(Shift Left):逻辑左移SHR(Shift Right):逻辑右移SAL(Shift Arithmetic Left):算术左移SAR(Shift Arithmetic Right):算术右移其中的 SHL 和 SAL 相同, 但 SHR 和 SAR 不同.SHL、SAL: 每位左移, 低位补 0, ⾼位(即移出的那位)进 CFSHR: 每位右移, 低位进 CF, ⾼位补 0SAR: 每位右移, 低位进 CF, ⾼位(即符号位)不变eg:AL=1000,BL=1000,CL=2SHR AL,CL 此后AL=0010SAR BL,CL 此后BL=1110它们的结果影响 OF、SF、ZF、PF、CF它们的指令格式相同:SHL r/m, i8SHL r/m, CLROL、ROR、RCL、RCR:ROL(Rotate Left):循环左移ROR(Rotate Right):循环右移RCL(Rotate through Carry Left):带进位循环左移RCR(Rotate through Carry Right):带进位循环右移ROL: 循环左移, ⾼位到低位并送 CFROR: 循环右移, 低位到⾼位并送 CFRCL: 循环左移, 进位值(原CF)到低位, ⾼位进 CFRCR: 循环右移, 进位值(原CF)到⾼位, 低位进 CF它们的结果影响 OF、CF它们的指令格式相同:SHL r/m, i8SHL r/m, CL。

8086汇编指令汇总

8086汇编指令汇总

8086汇编指令汇总一、基本指令集1.MOV:用于将一个值从一个位置复制到另一个位置。

2.ADD:将两个操作数相加,并将结果存储在第一个操作数中。

3.SUB:将第二个操作数从第一个操作数中减去,并将结果存储在第一个操作数中。

4.INC:将指定的寄存器或内存位置的值加一5.DEC:将指定的寄存器或内存位置的值减一6.MUL:将两个操作数相乘,并将结果存储在累积寄存器中。

7.DIV:将累积寄存器的值除以指定的操作数,并将商存储在累积寄存器中,余数存储在另一个寄存器中。

二、数据传送指令1.MOVSB:从指定内存位置复制一个字节到另一个位置。

2.MOVSW:从指定内存位置复制一个字到另一个位置。

3.MOVSBW:从指定内存位置复制一个字节到另一个位置,并将其扩展为字。

4.LODSB:从指定内存位置加载一个字节到累积寄存器中。

5.LODSW:从指定内存位置加载一个字到累积寄存器中。

6.STOSB:将累积寄存器中的值存储到指定内存位置。

7.STOSW:将累积寄存器中的值存储到指定内存位置。

8.XCHG:交换两个操作数的值。

三、算术与逻辑指令1.AND:对两个操作数执行逻辑与操作,并将结果存储在第一个操作数中。

2.OR:对两个操作数执行逻辑或操作,并将结果存储在第一个操作数中。

3.XOR:对两个操作数执行逻辑异或操作,并将结果存储在第一个操作数中。

4.NOT:对指定的操作数执行逻辑非操作。

5.SHR:将指定操作数的位向右移动指定的位数。

6.SHL:将指定操作数的位向左移动指定的位数。

7.CMP:比较两个操作数的值,并设置相应的条件码。

四、控制转移指令五、字符串操作指令1.REP/REPE/REPZ:用于重复执行一些指令,并且在条件满足时继续执行,直到满足特定的条件。

2.MOVSB/MOVSW:从一个内存位置复制一个字节或字到另一个位置。

3.CMPSB/CMPSW:将两个内存位置的值进行比较。

4.SCASB/SCASW:在累积寄存器中查找指定的字节或字,并设置相应的条件码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086指令系统总结学习微处理器及其程序设计,必须掌握微处理器的指令系统。

本章以8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。

要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。

能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。

本章的重点难点内容是:8086 的指令格式及寻址方式,8086 的常用指令和8086 指令前缀的使用。

下面我们分别进行总结:一.8086寻址方式(1)操作数是数字,指令中立即写出数字------------立即数寻址MOV AX,1234H 解释此句意义(2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址MOV AX,BX(3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址MOV AX,[1234H]MOV AX,ES:[1234H](4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX]MOV AX,ES:[SI]MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI]二.8086指令系统1.数据传送指令(一)通用传送指令(1)MOV指令指令格式:MOV 目,源功能:将源操作数传送给目标操作数。

(2)堆栈操作指令进栈指令:PUSH格式:PUSH 源功能:将源操作数压入堆栈。

例:用堆栈指令完成上例的功能。

MOV AX,3000HMOV DS,AX ;段寄存器填充MOV SI,0100H ;基本指令执MOV DI,2000H ;行前的初值MOV CX,50NT: PUSH [SI] ;程序从这POP [DI] ;开始设计INC SIINC SIINC DIINC DILOOP NTMOV AH,4CHINT 21H(3)交换指令XCHG格式:XCHG 目,源功能:源和目标中的内容交换。

(二)累加器专用传送指令(1)输入输出指令IN,OUT输入指令格式:#1 IN AX|AL,8位端口号#2 IN AX|AL,DX功能:从外设输入数据到AX|AL寄存器。

输出指令格式:#1 OUT 8位端口号,AX|AL#2 OUT DX,AX|AL功能:将AX|AL中的数据输出到外设。

该类指令是硬件功能与软件作用的结合。

(2)查表转换指令XLAT指令格式:XLAT功能:将内存单元[BX+AL]中的内容,置入AL寄存器中。

(三)地址传送指令地址传送指令有两类:仅传送偏移地址指令及段地址与偏移地址同时传送指令。

(1)仅传送偏移地址指令:LEA指令格式:LEA 目,源功能:将源操作数的偏移地址传送给目标寄存器。

如:LEA BX,[2000H]执行后BX=2000H。

又如:LEA SI,[BX+100H]若执行前BX=1000H,执行后SI=1100H。

(2)段地址与偏移地址同时传送指令:LDS、LES指令格式:LDS 目,源LES 目,源功能:将源存储器操作数连续4个字节的内容传送给目标寄存器DS寄存器(LDS指令)或ES寄存器(LES指令)。

如:LDS BX,[2000H]执行前[2000H]=1234H;[2002H]=5678H。

执行后BX=1234H;DS=5678H又如:LDS SI,[BX+100H]若执行前BX=1000H,而[1100H]=4321H;[1102]=8765H。

执行后SI=4321H;DS=8765H。

(四)标志传送指令(1)LAHF指令指令格式:LAHF指令功能:将标致寄存器的低八位中以定义位,传送给AH寄存器中对应的位。

(2)SAHF指令指令格式:SAHF指令功能:将AH寄存器中对应的位,传送给标致寄存器的低八位中以定义位。

(3)PUSHF指令指令格式:PUSHF指令功能:将标致寄存器内容进栈。

(4)POPF指令指令格式:POPF指令功能:从栈顶弹出一个字送入标致寄存器。

2.算术运算(一)加法指令加法指令有三类:不带进位加法指令、带进位加法指令和增一指令。

它们均适合与无符号数和有符号数的加法。

对于有符号数,其结果用补码表示。

(1)不带进位的加法指令ADD指令格式:ADD 目,源指令功能:源+目,其结果放到目标,并影响标志寄存器。

如:ADD AL,50H ;(AL)+50H→AL(2)带进位的加法指令ADC指令格式:ADC 目,源指令功能:源+目+CF,其结果放到目标,并影响标志寄存器。

利用ADC指令可以实现两个多字节数的相加运算。

如:1244AFDCH+9A12458FH。

如:ADC AL,50H ;(AL)+50H+CF→AL(3)增一指令INC指令格式:INC 目指令功能:目+1,其结果放到目标,并影响标志寄存器。

(二)减法指令减法指令包含有五类:不考虑借位减法指令、考虑借位减法指令、减一指令、求补指令和比较指令。

它们均适合与无符号数和有符号数的减法。

对于有符号数,其结果用补码表示。

(1)不考虑借位减法指令SUB指令格式:SUB 目,源指令功能:目-源,其结果放到目标,并影响标志寄存器。

(2)考虑借位减法指令SBB指令格式:SBB 目,源指令功能:目-源-CF,其结果放到目标,并影响标志寄存器。

利用SBB指令可以实现两个多字节数的相减运算。

如:1244AFDCH-9A12458FH。

(3)减一指令DEC指令格式:DEC 目指令功能:目-1,其结果放到目标,并影响标志寄存器。

(4)求补指令NEG指令格式:NEG 目指令功能:0-目,其结果放到目标,并影响标志寄存器。

(5)比较指令CMP指令格式:CMP 目,源指令功能:目-源,其结果不放到目标,但设置标志寄存器。

用法:#1 对于两个无符号数的比较,根据CF标志判断两数的大小。

#2 对于两个有符号数比较大小,根据SF和OF标志位来判断两数的大小:OF和SF相同(=0或=1)则目>源;如果OF和SF相异,则源>目。

(三)乘法指令乘法指令有两类:无符号数乘法指令和有符号数乘法指令。

(1)无符号乘法指令MUL指令格式:MUL 源指令功能:(AL|AX)*源,其结果放到AX|DX:AX(2)有符号乘法指令IMUL指令格式:IMUL 源指令功能:(AL|AX)*源,其结果放到AX|DX:AX(四)除法指令8086CPU的除法指令有两类:无符号数除法指令和有符号数除法指令。

它们均是不等长除法指令。

即:被除数长度必须是除数长度的两倍。

所以,在进行除法运算前应根据除数长度将被除数变成它的两倍长度。

(1)无符号数除法指令DIV指令格式:DIV 源指令功能:AX|DX:AX/源,其结果:商放在AL|AX,余数放在AH|DX之中。

(2)有符号数除法指令IDIV指令格式:IDIV 源指令功能:AX|DX:AX/源,其结果:商放在AL|AX,余数放在AH|DX之中。

(3)将字节扩展成字的指令CBW指令格式:CBW指令功能:将AL中有符号数的符号位扩展到AH之中。

不影响标志位。

用法:一般在两字节有符号数除法前,利用该指令,将符号位进行扩展,以使两数变成不等长数。

(4)将字扩展成双字的指令CWD指令格式:CWD指令功能:将AH中有符号数的符号位扩展到DX之中。

不影响标志位。

用法:一般在执行两字长有符号数除法前,利用该指令,将符号位进行扩展,以使两数变成不等长数。

(五)BCD码运算指令BCD码有两类:组合(压缩)型BCD码和未组合(非压缩)型BCD码。

BCD码的运算相应也有两种情况。

(1)未组合BCD码加法十进制调整指令AAA指令格式:AAA指令功能:对AL中的数进行校正:在AX中产生未组合十进制数和。

如: MOV AL,7ADD AL,5AAA执行前两条后,AL=0CH,经AAA调整后,AX=0102H,CF=OF=1。

(2)组合BCD码加法十进制调整指令DAA指令格式:DAA指令功能:对AL中的数进行校正:在AL中产生组合十进制数和。

如: MOV AL,56H(BCD)ADD AL,47H(BCD)DAA执行前两条后,AL=9DH,经DAA调整后,AL=03H,CF=1。

例:多字节组合BCD码十进制相加设两数长度均为8个字节,分别存放在1000H和2000H开始的8个单元中,要求将两数相加后,结果放在2000H开始的内存区域。

MOV SI,1000HMOV DI,2000HMOV CX,8CLCL1:MOV AL,[SI]ADC AL,[DI]DAAMOV [DI], ALINC SIINC DILOOP L1MOV AH,4CHINT 21H(3)未组合BCD码减法十进制调整指令AAS指令格式:AAS指令功能:对AL中的数进行校正:在AX中产生未组合十进制数差。

如: MOV AL,"7" ;"7"为7的ASCII码SUB AL,5AAS执行前两条后,AL=32H,经AAS调整后,AL=02H。

(4)组合BCD码加减十进制调整指令DAS指令格式:DAS指令功能:对AL中的数进行校正:在AL中产生组合十进制数差。

如: MOV AL,56H(BCD)SUB AL,47H(BCD)DAS执行前两条后,AL=0FH,经DAS调整后,AL=09H,CF=1。

(5)未组合BCD码的乘法十进制调整指令AAM指令格式:AAM指令功能:对AL中的数进行校正:在AX中产生未组合十进制数积。

如: MOV AL,05H(BCD)MOV BL,06H(BCD)MUL BLAAM执行前三条后,AX=001EH,经AAM调整后,AX=0300H (BCD)。

(6)未组合BCD码的除法十进制调整指令AAD指令格式:AAD指令功能:对AX中的数进行校正:在AX中产生未组合十进制数。

如: MOV AX,0300H(BCD)AADMOV BL,06H(BCD)DIV BL执行前两条后,AX=001EH,执行DIV指令后,AX=0005H (BCD)。

3.逻辑运算逻辑指令有三类:逻辑运算指令:NOT、AND、OR、XOR及TEST移位指令:SHL、SAL、SHR和SHR循环移位指令:ROL、ROR、RCL和RCR1. 逻辑运算指令(1)求反指令NOT指令格式: NOT 目指令功能:将目标内容求反。

(2)逻辑与指令AND指令格式: AND 目,源指令功能:将目标内容同源内容按位进行逻辑与运算。

结果放在目标。

如:AND AX,00FFH其结果AH=0(被屛蔽);AL内容不变。

(3)逻辑或指令OR指令格式: OR 目,源指令功能:将目标内容同源内容按位进行逻辑或运算。

结果放在目标。

如:OR AX,00FFH其结果AH内容不变;AL=0FFH(所有位为1)。

相关文档
最新文档