8086指令系统总结

8086指令系统总结
8086指令系统总结

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,3000H

MOV DS,AX ;段寄存器填充

MOV SI,0100H ;基本指令执

MOV DI,2000H ;行前的初值

MOV CX,50

NT: PUSH [SI] ;程序从这

POP [DI] ;开始设计

INC SI

INC SI

INC DI

INC DI

LOOP NT

MOV AH,4CH

INT 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,7

ADD AL,5

AAA

执行前两条后,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,1000H

MOV DI,2000H

MOV CX,8

CLC

L1: MOV AL,[SI]

ADC AL,[DI]

DAA

MOV [DI], AL

INC SI

INC DI

LOOP L1

MOV AH,4CH

INT 21H

(3)未组合BCD码减法十进制调整指令 AAS

指令格式:AAS

指令功能:对AL中的数进行校正:在AX中产生未组合十进制数差。

如: MOV AL,"7" ;"7"为7的ASCII码

SUB AL,5

AAS

执行前两条后,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 BL

AAM

执行前三条后,AX=001EH,经AAM调整后,AX=0300H (BCD)。

(6)未组合BCD码的除法十进制调整指令 AAD

指令格式:AAD

指令功能:对AX中的数进行校正:在AX中产生未组合十进制数。

如: MOV AX,0300H(BCD)

AAD

MOV BL,06H(BCD)

DIV BL

执行前两条后,AX=001EH,执行DIV指令后,AX=0005H (BCD)。

3.逻辑运算

(一)逻辑运算指令

逻辑指令有三类:逻辑运算指令:NOT、AND、OR、XOR及TEST 移位指令:SHL、SAL、SHR和SHR

循环移位指令:ROL、ROR、RCL和RCR

1. 逻辑运算指令

(1)求反指令 NOT

指令格式: NOT 目

指令功能:将目标内容求反。

(2)逻辑与指令 AND

指令格式: AND 目,源

指令功能:将目标内容同源内容按位进行逻辑与运算。结果放在目标。

如: AND AX,00FFH

其结果AH=0;AL内容不变。

(3)逻辑或指令 OR

指令格式: OR 目,源

指令功能:将目标内容同源内容按位进行逻辑或运算。结果放在目标。

如: OR AX,00FFH

其结果AH内容不变;AL=0FFH(所有位为1)。

(4)逻辑异或指令 XOR

指令格式: XOR 目,源

指令功能:将目标内容同源内容按位进行逻辑异或运算。结果放在目标。

如: OR AX,AX

其结果AX被清0。

(5)测试指令 TEST

指令格式: TEST 目,源

指令功能:将目标内容同源内容按位进行逻辑与运算。结果不放回目标,只影响标志位。

如: TEST AL,80H

执行后,如果ZF=0,则AL的最高位为1,反之,最高位为0。

(二)移位指令

(1)算术左移指令和逻辑左移指令 SAL和AHL

指令格式:#1 SAL 目,1

#2 SAL 目,CL

指令功能:将目标操作数各数位依次左移一次,最高位进入CF,且最低位补0。若CL内容大于1时,重复前面的操作。除AF标志位不确定外,影响其它标志位。

(2)算术右移指令 SAR

指令格式:#1 SAR 目,1

#2 SAR 目,CL

指令功能:将目标操作数各数位依次右移一次。最低位进入CF,且最高位不变。若CL内容大于1时,重复前面的操作。除AF标志位不确定,外影响其它标志位。

(3)逻辑右移指令 SHR

指令格式:#1 SHR 目,1

#2 SHR 目,CL

指令功能:将目标操作数各数位依次右移一次。最低位进入CF,最高位补0。若CL内容大于1时,重复前面的操作。除AF标志位不确定,外影响其它标志位。

(三)循环移位指令

(1)循环左移指令

指令格式:#1 ROL 目,1

#2 ROL 目,CL

指令功能:将目标操作数各数位依次左移一位。最高位进入CF,同时进入最低位。若CL内容大于1,则重复前面的操作。除AF标志位不确定,外影响其它标志位:(2)循环右移指令

指令格式:#1 ROR 目,1

#2 ROR 目,CL

指令功能:将目标操作数各数位依次右移一位。最高低进入CF,同时进入最高位。若CL内容大于1,则重复前面的操作。除AF标志位不确定,外影响其它标志位:(3)带进位循环左移指令

指令格式:#1 RCL 目,1

#2 RCL 目,CL

指令功能:将目标操作数各数位依次左移一位。最高位进入CF,CF进入最低位。若CL内容大于1,则重复前面的操作。除AF标志位不确定,外影响其它标志位:(4)带进位循环右移指令

指令格式:#1 RCR 目,1

#2 RCR 目,CL

指令功能:将目标操作数各数位依次右移一位。最低进入CF,CF进入最高位。若CL内容大于1,则重复前面的操作。除AF标志位不确定,外影响其它标志位:

4.串操作指令

(一)串传送指令

串操作指令可以实现对一串数据的操作。串操作指令有五类:串传送、串比较、串搜索、取串和存串等。

串操作指令的共同点:

(1)串传送 MOVS

指令格式:

#1 MOVSB ;字节串传送指令

#2 MOVSW ;字串传送指令

#3 MOVS 目标串符号首址,源串符号首址

功能:将源串中一个字节(字)传送到目标串。不影响标志位。

例:将100字节的数据从3000H:100H,搬到3000H:200H

MOV AX,3000H

MOV DS,AX

MOV ES,AX

MOV SI,0100H

MOV DI,0200H

MOV CX,50

REP MOVSW

MOV AH,4CH

INT 21H

(二)串比较指令

(2)串比较指令 CMPS

指令格式:

#1 CMPSB ;字节串比较指令

#2 CMPSW ;字串比较指令

#3 CMPS 目标串符号首址,源串符号首址

功能:将源串中一个字节(字)与目标串比较。影响标志位。

(三)取串指令

(3)取串指令 LODS

指令格式:

#1 LODSB ;从串中取字节指令

#2 LODSW ;从串中取字指令

#3 LODS 源串符号首址

功能:将源串中一个字节(字)传送到AL(AX)中。不影响标志位。

(四)存串指令

(4)存串指令 STOS

指令格式:

#1 STOSB ;存字节于目标串指令

#2 STOSW ;存字于目标串指令

#3 STOS 目标串符号首址

功能:将AL(AX)中的一个字节(字)存到目标串中。不影响标志位。

(五)目标串搜索指令

(5)目标串搜索指令 SCAS

指令格式:

#1 SCASB ;从目标串中搜索字节指令

#2 SCASW ;从目标串中搜索字指令

#3 SCAS 目标串符号首址

功能:将AL(AX)中的一个字节(字)与目标串中某字节(字)比较,不影响标目标串,只影响标志位。

5.控制转移指令

(一)无条件转移指令及指令寻址

在8086CPU的转移指令中,其目标操作数将给出下一条指令到哪儿去找。即给出指令的寻址方式。

8086CPU指令的寻址方式可分成两大类:段内转移寻址方式及段间转移寻址方式。

段内和段间均又可分成两种:直接转移和间接转移。下面将通过无条件转移指令作详细分析。

无条件转移指令

指令格式: JMP 目

指令功能:程序将转到由目标操作数指明的地址去执行。

(二)条件转移指令

条件转移指令一般是根据标志寄存器中某个标志或几个标志的逻辑关系来决定是否转移。根据依据的条件,可分成三类条件转移指令:单标志条件转移指令;用于判断无符号数大小的条件转移指令;用于判断符号数大小的条件转移指令。

(1)单标志条件转移指令

除半进位标志AF之外的所有状态标志都有相应的条件转移指令。

JZ|JE

JNZ|JNE

JC

JNC

JS

JNS

JO

JNO

JP

JNP

(2)判断无符号数大小的条件转移指令

JA ;高于转移

JNA ;不高于转移

JB ;低于转移

JNB

(3)判断符号数大小的条件转移指令

JG ;大于转移

JNG

JL ;小于转移

JNL

(三)子程序指令

(1)子程序调用指令 CALL

指令格式:CALL 目

功能:执行该指令时,CPU先将该指令下面一条指令的存放地址压入堆栈(该地址叫返回地址),然后,计算出目标地址的偏移地址并装入IP,如果是远调用还要将目标地址的段地址装入CS。其结果,程序将转到目标子程序去执行。

(2)返回指令 RET

指令格式:RET|RET N

功能:从堆栈顶弹出两个(近过程调用)或四个(远过程调用)字,装入IP和CS (远过程调用)。其结果是返回到主程序取执行。如果是RET N,则还要使栈顶指针往上

移N个字节。一般N取偶数值。

(四)循环控制指令

循环控制指令用来设计循环程序。此类指令有三条:

(1)LOOP 指令

指令格式:LOOP 短标号

功能:该指令执行时,先将CX内容减1,然后判断CX中内容是否为0,若不为0,则返回到标号处去执行。若为0,则执行该指令下面一条指令。

(2)LOOPZ|LOOPE

指令格式:LOOPZ|LOOPE 短标号

功能:该指令执行时,先将CX内容减1,然后判断CX中内容是否为0且ZF是否为1,若不同时满足,则返回到标号处去执行,否则执行该指令下面一条指令。

(3)LOOPNZ|LOOPNE

指令格式:LOOPNZ|LOOPNE 短标号

功能:该指令执行时,先将CX内容减1,然后判断CX中内容是否为0且ZF是否为0,若不同时满足,则返回到标号处去执行,否则执行该指令下面一条指令。

(4)JCXZ

指令格式:JCXZ 短标号

功能:该指令执行时,只判断CX中内容是否为0,若满足,则返回到标号处去执行,否则执行该指令下面一条指令。

(五)中断指令

8086提供了软中断手段,这就是中断指令 INT 及中断返回指令 IRET。

中断指令格式:INT N

6. 处理器控制指令

处理器控制指令只介绍部分指令及指令功能。

(1)标志操作指令

CLC 清CF

STC 置CF

CLD 清DF

STD 置DF

CLI 清IF

CMC CF取反

(2)CPU暂停指令性 HLT

(3)空操作指令 NOP

以上的内容是下一章汇编语言程序设计的基础,本章有很多要记忆的内容,希望大家在理解的基础上进行记忆,而不是死记硬背。结合一些下程序来记住这些指令,是个很好的方法。

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

8086汇编指令手册

8086汇编指令手册 一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 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,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) XLAT 字节查表转换. —— BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即 0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. 4. 标志传送指令. LAHF 标志寄存器传送,把标志装入AH. SAHF 标志寄存器传送,把AH内容装入标志寄存器.

8086汇编指令大全.

标志寄存器:9个有效位,分 6个状态寄存器和 3个控制寄存器 CF 当执行一个加法(减法使最高位产生进位(借位时 CF=1 否则 CF=0 PF 指令执行的结果低 8位有偶数个一时, CF=1 否则 CF=0 AF 当执行一个加法(减法使运算结果低 4位向高 4位有进位(借位时 AF=1 否则 AF+0 ZF 当前运算结果为零, ZF=1 否则 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] 3 寄存器相对寻址 4 基址变址寻址 5 相对基址变址寻址 6 直接寻址 7 立即数寻址 i. 立即数寻址立即数寻址不能用在单操作数指令中 ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段 指令系统: 1 数据传送指令 mov 注意: 不允许在两个存储单元之间直接传送数据

不允许在两个段寄存器之间传送数据 不允许用立即数直接为段寄存器赋值 不影响标志位 不允许寄存器或存储单元到除 CS 外的段寄存器 2 入栈(出栈指令 PUSH (POP 注意: PUSH 操作数不能是“立即数” POP 操作数不能是段寄存器 CS 不影响标志位 先进后出 单操作符 3 交换指令 XCHG 注意:

常用8086汇编指令(彩色版)

8086/8088指令系统 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为:MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input)输入 OUT(Output)输出 XLAT(Translate)换码 这组指令只限于使用累加器AX或AL传送信息. .IN输入指令 长格式为:IN AL,PORT(字节) IN AX,PORT(字) 执行的操作:(AL)<-(PORT)(字节) (AX)<-(PORT+1,PORT)(字) 短格式为:IN AL,DX(字节) IN AX,DX(字) 执行的操作:AL<-((DX))(字节) AX<-((DX)+1,DX)(字) .OUT输出指令 长格式为:OUT PORT,AL(字节) OUT PORT,AX(字)

执行的操作:(PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为:OUT DX,AL(字节) OUT DX,AX(字) 执行的操作:((DX))<-(AL)(字节) ((DX)+1,(DX))<-AX(字) 在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息. .XLAT换码指令 格式为:XLAT OPR 或:XLAT 执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令 LEA(Load effective address)有效地址送寄存器 LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES .LEA有效地址送寄存器 格式为:LEA REG,SRC 执行的操作:(REG)<-SRC 指令把源操作数的有效地址送到指定的寄存器中. .LDS指针送寄存器和DS指令 格式为:LDS REG,SRC 执行的操作:(REG)<-(SRC) (DS)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器. .LES指针送寄存器和ES指令 格式为:LES REG,SRC 执行的操作:(REG)<-(SRC) (ES)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器. 4.标志寄存器传送指令 LAHF(Load AH with flags)标志送AH SAHF(store AH into flags)AH送标志寄存器 PUSHF(push the flags)标志进栈 POPF(pop the flags)标志出栈 .LAHF标志送AH

8086指令系统精析解析

8086指令系统精析 3.1基本数据类型 1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字 (64位,486中引入的)和双四字(128位,Pentium3中引入的)。 2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1 3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的 地址,双字和四字的自然边界地址要分别能被4和8除尽。 4.数据结构要尽可能在自然边界上对齐 5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访 问,只要进行一次存储访问操作。 6.数字数据类型(学生自学)PPT 3.28086的指令格式 一、指令格式 Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中: 1.标号是一个标识符,后面跟有冒号 2.助记符是一类具有相同功能的指令操作码的保留名 3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取 决于操作码 4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程 序的另一部分声明的赋予数据项的标识符。 5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数 是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。 3.38086/8088指令的操作数寻址方式

寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。 1.立即数 用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。 立即数可以是8位或16 例1 MOV AX , 2056H 结果( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果( AL ) = 78H 2.寄存器操作数 操作数在寄存器中,指令中指定寄存器名 8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL 16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES 例1 MOV AX , 2056H 执行后:(AX)=2056H 例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H ▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。 ▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。 3. 内存操作数 ▲指令MOV DS: [ DI ] , CL 完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT 地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H MOV AX, 2000H MOV DS, AX ; (DS) = 2000H

8086指令表

表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字符串操作按地址递增进行。

8086 汇编语言中断程序设计

汇编语言程序设计实验报告 学院:计算机科学与技术专业:计算机科学与技术班级:计科131

LEA DX,FNAME MOV CX,0 ;语句1 INT 21H JC EXIT MOV FNUM,AX MOV BX,AX ;语句2 MOV CX,100 MOV AH,40H LEA DX ,BUF INT 21H MOV BX,FNUM MOV AH,3EH INT 21H EXIT: MOV AH,4CH INT 21H CODE ENDS END START 使用相应的文本编辑器建立文件LAB7.asm,内容如上所示。 2.汇编并运行此程序后,在当前目录建立的文件名是什么?其内容是什么? 1>汇编: C:\masm> masm lab7; 2>连接: C:\masm> link lab7; 3>运行: C:\masm> lab7 3.若将语句1 改为mov cx,1,则运行情况与前面会有什么区别? 4.若将语句1 改为mov cx,2,则运行结果同上会有什么不同?并简要说明此语句的作用. 5.若将语句2 改为mov bx,1,则运行结果会有什么不同?简要说明则语句的作用. 实验二:编写0 号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到DOS。源程序下: assume cs:code code segment start: mov ax,cs mov ds,ax

mov si,offset do mov ax,0 mov es,ax mov di,200h mov cx,offset doend-offset do ;安装中断例程cld rep movsb mov word ptr es:[0],200h mov word ptr es:[2],0 ;设置中断向量表 mov dx,0ffffh mov bx,1 ;测试一下 div bx mov ax,4c00h int 21h do:jmp short dostart db 'divide error!' dostart: mov ax,0 mov ds,ax mov si,202h mov ax,0b800h mov es,ax mov di,160*12+60 mov cx,13 s: mov al,ds:[si] mov ah,15 mov es:[di],ax inc si inc di inc di loop s mov ax,4c00h int 21h doend:nop code ends end start

8086汇编指令表

8086汇编指令表

MOV MOV DST,SRC DST≠CS、IP和imm 不影响 标志位 MOV [9AF0H],AL MOVS MOVS mem, mem MOVSB/W 不影响 标志位 字符串传送ES:DI←(DS:SI) SI←(SI)(+/-)1 DI←(DI)(+/-)1 MOVS ES:BYTE PTR[DI], DS:[SI] MUL MUL r/m8 设置CF OF S 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 同AND PF 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 DST DST!=imm & CS 不影响 标志位 DST←((SP)+1,(SP)) SP←(SP)+2 POP WORD Ptr [87EAH] POPF POPF 设置所有标志位从堆栈中弹出16位标志寄存器POPF PUSH PUSH SRC 8086 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,1 ROR 同SHL 同ROL 循环右移: ROR AL,1 REP REP String operation 不影响 标志位 CX=0则终止---CX←(CX)-1 ---串操作---SI/DI增量 REPZ REPE REPE String operation AF CF OF PF SF ZF CX=0||ZF=0则终止 ---CX←(CX)-1 ---串比较---SI/DI增量 REPNZ REPNE REPNE String operation AF CF OF PF SF ZF CX=0||ZF=1则终止--- CX←(CX)-1 ---串比较---SI/DI增量 RET RET 恢复压栈标志位 POP IP[CS] 子过程返回(Near)/(Far) RET RET imm16 子过程返回后SP←(SP)+imm16 RET 08

8086指令总结

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,3000H MOV DS,AX ;段寄存器填充 MOV SI,0100H ;基本指令执 MOV DI,2000H ;行前的初值 MOV CX,50 NT: PUSH [SI] ;程序从这 POP [DI] ;开始设计 INC SI INC SI INC DI INC DI LOOP NT MOV AH,4CH INT 21H

8086汇编语言上机调试步骤

8086汇编语言上机调试步骤 1、在网络课堂-微机原理与接口技术-实验指导-汇编工具下载,下载汇编工具并解压,文件夹名为“masm”。 2、用鼠标点击“masm”文件夹。进入该文件夹后将看到 MASM.EXE, LINK.EXE , DEBUG.EXE3个文件进行复制操作。 3、用鼠标点击“我的电脑”再点击D: 盘,并在 D: 盘上建立新的“ MASM”文件夹,最后将上面的3个文件全部复制到该文件夹中。(注意实验所有的文件都放在该文件夹内) 4、用文本编辑软件UltraEdit-32、WINDOWS 中的记事本或其它的文本编辑器输入汇编语言程序, 注意在最后一行的 END输入完后要按一次回车键,保存的源 文件的扩展各一定要是“.asm”如: example.asm 。(建议用记事本输入源程序,另存时,保持类型选择“所有文件”如图所示) 5、进入MS-DOS方式 ( 从开始>程序>附件>命令提示符) 或者(从程序 > 运行输入“cmd”回车,进入MS-DOS环境。

6、进入D:>MASM文件夹 7、显示MASM文件夹内所有文件“dir”命令 8、在 DOS 提示符下进行汇编、连接、动态调试等操作。 例如: 对源文件 example.asm 进行的操作

D:\MASM\MASM example.asm;汇编源程序操作 D:\MASM\LINK example.dbj;连接并生成扩展名为 .EXE 的可执行文件 D:\MASM\DEBUG example.exe;对可执行文件进行调试 9、要求掌握的调试命令(在 DEBUG 中使用的命令) a: U - 反汇编命令 用法: -U 代码段地址:起始偏移地址如:-U CS:100 b: D - 显示内存中的数据命令 用法: -D 数据段地址:存放数据的偏移地址如:-D DS:00 20 c: T - 单步执行程序命令 用法: -T 要执行的指令条数如:-T 3 d: G - 连续执行程序命令 用法: -G=代码段地址:指令的起始偏移地址指令的结束偏移地址如: -G=CS:100 106 注意: 结束地址一定要是操作码的所在地址 e: R - 查看和修改寄存器数据命令 用法: -R 回车如:-R AX f: F - 对内存单元填充数据命令 用法: -F 数据段地址:偏移首地址偏移未地址填入的数据 如: -F DS:100 120 ff g: Q - 退出”DEBUG“应用程序命令 10、应用例子 ;二进制到BCD转换(a.asm) ;将给定的一个二进制数,转换成二十进制(BCD)码 DATA SEGMENT RESULT DB 3 DUP(?) DATA ENDS CODE SEGMENT

8086汇编语言程序设计实验指导书.

汇编语言上机实验指导书 一、概述 上机实验总学时为16学时,其中综合性实验为2学时。实验共有6项暂定为8次,每次2学时。 1.实验辅导的主要内容 实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。开始的实验介绍较细,后面的实验简要介绍。 2.实验的软硬件要求 关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。 3.加强实践能力的培养 实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。其中包括: 实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等; 开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。 对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。 实验一汇编语言运行环境及方法、简单程序设计(2学时、验证性) 1.实验目的: (1) 熟悉汇编语言运行环境和方法 (2)了解如何使用汇编语言编制程序 (3) 熟悉DEBUG有关命令的使用方法 (4) 利用DEBUG掌握有关指令的功能 (5) 利用DEBUG运行简单的程序段 2.实验内容 (1)学会输入、编辑汇编语言程序 (2)学会对汇编语言程序进行汇编、连接和运行 (3)进入和退出DEBUG程序 (4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应试一下。 3.实验准备 (1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。 (2)准备好源程序清单、设计好调试步骤、测试方法、对运行结果的分析。 (3) 编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示’Match.’,否则显示’No match!’;(1)仔细阅读有关DEBUG 命令的内容,对有关命令,都要事先准备好使用的例子。 4.实验步骤 (1)在DOS提示符下,进入MASM目录。 (2)在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。 ①调用edit输入、编辑源程序并保存在指定的目录中;例:edit abc.asm ②用汇编程序masm对源程序汇编产生目标文件obj。例:masm abc 不断修改错误,直至汇编通过为止。 ③用连接程序link产生执行文件exe.例:link abc ④执行程序 可直接从DOS执行程序,即在DOS环境中,输入文件名即可。 (3)详细记录每一步所用的命令,以及查看结果的方法和具体结果。 5.实验报告要求 (1)源程序清单。 (2) 如何启动和退出EDIT程序。 (3) 如何对源程序进行汇编及编辑。

汇编语言程序的设计实验篇(emu8086)

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和存单元的容。 1.1.1创建程序 https://www.360docs.net/doc/fe10234085.html, TEMPLATE程序 本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。 在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。 输入全部指令后,单击按钮,保存相应的程序段。 2.EXE TEMPLATE程序 本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。 在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

8086 汇编指令集

8086 汇编指令集 一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令 MOV 传送字或字节. 格式为: MOV DST,SRC 执行的操作:(DST)<-(SRC) MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) POP 把字弹出堆栈. 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 依次弹出堆栈. BSWAP 交换32 位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) 2. 输入输出端口传送指令. IN I/O 端口输入. ( 语法: IN 累加器,{端口号│DX} ) 长格式为: IN AL,PORT(字节) IN AX,PORT(字) 执行的操作: (AL)<-(PORT)(字节) (AX)<-(PORT+1,PORT)(字) 短格式为: IN AL,DX(字节) IN AX,DX(字) 执行的操作: AL<-((DX))(字节) AX<-((DX)+1,DX)(字) OUT I/O 端口输出. ( 语法: OUT {端口号│DX},累加器),输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX 指定时,其范围是0-65535. 长格式为: OUT PORT,AL(字节) OUT PORT,AX(字) 执行的操作: (PORT)<-(AL)(字节)

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/m IMME→REG/MEM 1000111w mod 000 r/m data data if w=1 IMME→REG 1011wreg data data if w=1 MEM→AX 1010000w addr-low addr-high AX→MEM 1010001w addr-low addr-high REG/MEM→段REG 10001110 mod reg r/m 8E 段REG→REG/MEM 10001100 mod reg r/m 8C PUSH指令 REG/MEM 11111111 mod 110 r/m FF REG 01010reg 段REG 000reg110 POP指令 REG/MEM 10001111 mod 000 r/m 8F REG 01011reg 段REG 000reg111 XCHG指令 REG/MEM←→REG 1000011w mod reg r/m REG←→AX 10010reg XLAT指令11010111 D7 LEA指令10001101 mod reg r/m 8D LDS指令11000101 mod reg r/m C5 LES指令11000100 mod reg r/m C4 LAHF指令10011111 9F SAHF指令10011110 9E PUSHF指令10011100 9C POPF指令10011101 9D

习题3-8086指令系统

习题三8086指令系统 主要内容:8086指令系统。主要介绍8086的基本数据类型、寻址方式和指令系统,重点掌握8086指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指令,控制传送指令。 1.单选题: (1)执行下面指令序列后,结果是(A)。 MOV AL,82H CBW A、(AX)=0FF82H B、(AX)=8082H C、(AX)=0082H D、(AX)=0F82H (2)与MOV BX,OFFSET VAR指令完全等效的指令是(D )。 A、MOV BX,VAR B、LDS BX,VAR C、LES BX,VAR D、LEA BX,VAR (3)编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有(D )。 A、CMP B、SUB C、AND D、MOV (4)下面指令执行后,改变AL寄存器内容的指令是(D )。 A、TEST AL,02H B、OR AL,AL C、CMP AL,B D、AND AL,BL (5)设DH=10H,执行NEG DH指令后,正确的结果是(D )。 A、(DH)=10H,CF=1 B、(DH)=0F0H,CF=0 C、(DH)=10H,CF=0 D、(DH=0F0H,CF=1 (6)设DS=8225H,DI=3942H,指令NEG BYTE PTR[DI]操作数的物理地址是(A )。 A、85B92H B、86192H C、BB690H D、12169H (7)下列指令中,执行速度最快的是(C )。 A、MOV AX,100 B、MOV AX,[BX] C、MOV AX,BX D、MOV AX,[BX+BP] 2.8086 CPU执行如下指令后的结果,以及标志SF、AF、CF、OF的值。 (1)MOV AL,0110 0100B SUB AL,58H ;(AL)=0CH,AF=1 DAS ;(AL)=06H, AF=1 ADD AL,89H ;(AL)=8FH, AF=0 DAA ;(AL)=95H,AF=1,SF=1 结果: (AL)=95H, SF=1, AF=1, CF=0, OF=0 (2)MOV AL,05H MOV BL,09H MUL BL ;(AX)=002DH, SF、AF、CF、OF=0 AAA ; (AX)=0103H ;AAM ; ; (AX)=0405H 结果: (AX)=0103H, CF=1 , SF=0、AF=1、OF=0 3.分析执行下列指令序列后的结果: MOV AL,10110101B AND AL,00011111B ;(AL)=0001 0101B OR AL,11000000B ;(AL)=1101 0101B XOR AL,00001111B ;(AL)=1101 1010B NOT AL ;(AL)=0010 0101B 4.假设(AL)=10101111B,CF=0,CL=2,写出分别执行下列指令后的结果以及标志位CF、ZF、OF的值。 (1)SHL AL,CL ;(AL)=1011 1100B, CF=0、ZF=0、OF=1 (2)SHR AL,CL ;(AL)=0010 1011B, CF=1、ZF=0、OF=0 (3)SAR AL,CL ;(AL)=1110 1011B, CF=1、ZF=0、OF=0 (4)ROL AL,CL ;(AL)=1011 1110B, CF=0、ZF=0、OF=1 (5)RCR AL,CL ;(AL)=1011 1101B, CF=0、ZF=0、OF=1 5.设(IP)= 3D8FH,(CS)=4050H,(SP)=0F17CH,当执行CALL 2000:0094H后,试求出IP、CS、SP的

8086指令整理v0.95

8086/8088指令小结 一、数据传送指令 通用传送指令 基本传送指令 MOV dst, src;要类型匹配;不能同时为存储器操作数 ;立即数,CS,IP不能作为目的 ;不能给段寄存器赋立即数,段寄存器间不能直接赋值数据交换指令 XCHG dst, src;使源与目的互换;要类型匹配 ;不能同时为存储器操作数,段寄存器不能参加交换堆栈操作指令 PUSH src;将16位操作数压入栈顶,SP=SP-2,不能压立即数 POP dst;从堆栈弹出一个字送至目的,SP=SP+2,dst不能为立即数查表转换指令 XLAT src-tabel;src-tabel表的表首地址应先放入BX,表中元素序号送AL ;查询后结果存于AL,可以段超越,如XLAT ES:src-tabel 输入输出指令 输入指令IN IN ac, port;从一个端口输入一个字节或字到累加器(ac)输出指令OUT;对于IN和OUT,间接寻址时,地址只能装在DX中OUT port, ac;执行与IN相反的操作。 地址传送指令 取有效地址指令LEA LEA reg, src;送指定存储器的16位偏移地址到16位通用寄存器指针送寄存器和DS的指令LDS LDS reg, src;32位地址,段地址放入DS,偏移地址放入reg 指针送寄存器和ES的指令LES LES reg, src;32位地址,段地址放入ES,偏移地址放入reg 标志位传送指令 取标志位Load AH Flag对标志位无影响 LAHF;将SF、ZF、AF、PF、CF存入AH的7、6、4、2、0位存标志位Save AH Flag明显对标志位有影响 SAHF;将AH的7、6、4、2、0位存入SF、ZF、AF、PF、CF 标志位入栈PUSHF;将16位标志位入栈保护 标志位出栈POPF;将栈顶字单元弹出到标志位

8086指令系统记忆表

数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器。 第一部分:指令助记符: 一、数据传送指令

相关文档
最新文档