8086微机指令
- 格式:doc
- 大小:23.00 KB
- 文档页数:3
8086CPU指令小结所有指令:(1)立即数不能作为目的操作数。
(2)不能在2个存储单元之间直接进行操作(串操作除外)。
(3)MOV指令和堆栈指令是惟一能对段寄存器进行操作的指令。
(4)源和目的操作数的数据类型必须匹配,都是8位,或都是16位。
(5)CS 、IP不能直接作为操作数。
(6)指令中至少要有一项明确说明传送的是字节还是字,如果没有,可通过PTR进行设置。
一、传送指令(1)6种指令:通用传送指令、堆栈操作指令、交换操作指令、I/O操作指令、目的地址传送指令和标志传送指令。
(2)对标志位的影响:除标志传送(SAHF、POPF)外,均不影响标志位。
(3)操作数表示方法:立即数——data,存储器单元地址——mem,寄存器——reg,段寄存器——segreg。
1. 通用传送指令:完成数据传送(1)指令格式:MOV OPRD1,OPRD2 ;[目的操作数OPRD1]←[源操作数OPRD2] (2)源OPRD2:data、mem、reg、segreg。
(3)目的OPRD1:mem、reg、segreg。
(4)通用传送指令MOV和堆栈指令是唯一允许以段寄存器(代码段寄存器CS和指令指针IP除外,即CS 、IP不能作为直接操作数)作为操作数的指令,不允许通过MOV 指令直接以立即数方式给段寄存器赋值,不允许直接在两个段寄存器之间直接进行传送。
(5)8位/16位操作。
2. 堆栈操作指令:将数据压入/弹出堆栈(1)指令格式:入栈:PUSH OPRD;先修改堆栈指针SP-2,然后将数据压入堆栈。
;SP =SP-1,[SP]=操作数高8位;SP =SP-1,[SP]= 操作数低8位。
出栈:POP OPRD;先将数据弹出堆栈,然后修改堆栈指针SP+2。
;(操作数低8位)←[SP],SP =SP+1;(操作数高8位)←[SP],SP =SP+1。
(2)操作数:mem、reg、segreg。
操作数不能是立即数data。
8086 8088 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
微机原理iret微机原理IRET指令是Intel 8086微处理器的一条指令,用于中断处理程序的返回操作。
IRET指令主要用于从中断处理程序返回到主程序,并且将标志寄存器的值和程序状态字寄存器的值恢复到中断前的状态。
本文将介绍IRET指令的详细功能和执行过程。
IRET指令是中断返回指令,用于从中断服务程序返回到主程序,并恢复中断前的状态。
IRET指令的语法如下:IRETIRET指令没有操作数,它执行的功能包括将标志寄存器的值和程序状态字寄存器的值恢复到中断前的状态,同时从堆栈中弹出返回地址,实现从中断处理程序的返回。
IRET指令的执行过程如下:1.从堆栈中弹出返回地址,将其保存在IP(指令指针寄存器)中。
2.继续从堆栈中弹出CS(代码段寄存器)的值,将其保存在CS中。
3.再次从堆栈中弹出标志寄存器的值,并将其保存在标志寄存器中。
4.如果在中断处理过程中使用了SS(堆栈段寄存器),则再从堆栈中弹出SS的值,将其保存在SS中。
5.最后从堆栈中弹出SP(堆栈指针寄存器)的值,将其保存在SP中。
IRET指令的执行过程中,栈指针的变化如下:SP=SP+2SP=SP+2SP=SP+2如果使用了堆栈段寄存器SP=SP+2IRET指令的执行还可能涉及到特权级的变化。
在进入中断处理程序时,处理器会将当前特权级压入堆栈中作为返回地址之前的值。
因此,在IRET指令中,如果特权级从低级别返回到高级别,那么堆栈中的特权级值会被加载到CS和SS寄存器中。
如果特权级从高级别返回到低级别,那么CS和SS寄存器的值将不会发生改变。
IRET指令的使用非常广泛,特别适用于中断处理程序的编写。
在中断处理程序中,当完成中断服务后,使用IRET指令可以方便地返回到主程序,并恢复中断前的状态。
总结:IRET指令是微处理器中的一条中断返回指令,用于从中断处理程序返回到主程序,并恢复中断前的状态。
执行IRET指令的过程涉及到返回地址、代码段、标志寄存器、堆栈段和堆栈指针的恢复。
第3章指令系统机器指令:能指示计算机完成基本操作的二进制代码指令系统:CPU可执行的机器指令的集合。
为了方便编程,人们又把完成特定操作的机器码用特定的符号表示,这就产生了符号表示的机器指令-------指令助记符。
第3章8086指令系统机器指令由二进制代码组成,一条指令包括操作码和操作数(或地址)两部分,操作码指明该指令进行何种操作,操作数用来说明操作对象。
个别指只有操作码没有操作数。
由于不同的指令所表达的信息不尽相同,因此指令的长度即机器码字节数也有长有短。
8086指令系统的指令是可变长指令(1~6个字节)3.18086CPU寻址方式重点是存储器寻址存放在存储器中的数据称为存储器操作数。
指令中需要确定存储单元的段地址、偏移地址(亦称有效地址EA),以及存储器操作数的类型。
段地址存放在段寄存器中,确定段地址实际上就是确定段寄存器,采用的方法是默认或添加段超越前缀。
生成存储器有效地址有多种方法,这些方法形成了对存储器操作数的多种寻址形式。
确定数据类型的方法是源操作数和目的操作数类型一致原则或附加类型说明。
立即寻址方式中操作数也在存储器中,但立即寻址中的立即数包含在指令中,随程序存放在代码段,CPU在取指令时就获得操作数。
这里所说的存储器操作数是存放在数据段、附加段或堆栈段中,取指令时也不会被立即取到。
段超越前缀变量的定义在第四章详细介绍直接寻址:MOV AX,[2000H];寄存器间接寻址:MOV ES:[DI],AH基址寻址:MOV BYTE PTR[BX+1200H],10变址寻址:MOV DL,[SI+2AH]基址加变址寻址:MOV CL,[BX+SI+5]MOV AX,[BP+DI]MOV CL,[BX+SI+5]的等价形式:MOV CL,5[BX][SI]、MOV CL,5[BX+SI]、MOV CL,[BX][SI+5]MOV CL,[BX+SI-5]等价于MOV CL,[BX+SI+65531] MOV CL,[BX-SI]MOV CL,[SI+DI]错误!MOV[BX+DI],1000H正确吗?3.2.1数据传送类指令传送指令把数据从一个位置传送到另一个位置使用MOV指令应注意1.立即数只能作为源操作数2.无存储器之间直接传送与交换的指令3.没有用立即数对段寄存器直接赋值的指令4.段寄存器之间无传送指令5.两个操作数的类型要一致6.要能确定是字节还是字操作mov ah,al mov bvar,ch mov ax,bx mov ds,ax mov al,[bx]下列MOV指令正确吗?MOV AL,050AHMOV SI,DLMOV[BX+SI],255MOV DS,100HMOV[BX],[SI]MOV[BX+SI],bvarbvar是一个已定义过的字节变量 MOV CS,[SI]将数据段中偏移地址为2000H、2001H、2002H的3个字节的存储单元置数FFH。
8086指令集的操作码-回复【8086指令集的操作码】是专门为Intel 8086微处理器设计的一组指令。
Intel 8086微处理器是20位处理器,与许多后来的x86系列处理器兼容。
它是上世纪70年代末和80年代初广泛使用的一种微处理器,其指令集具有多样的功能,可以完成各种复杂的任务。
在本文中,我们将逐步探讨8086指令集的操作码,以便更好地了解它的功能和用法。
第一部分:引言和基本概述在本节中,我们将简要介绍8086指令集和操作码的基本概念。
8086指令集是一组二进制指令,通过这些指令可以执行各种操作,如算术运算、逻辑运算、数据传输和控制转移等。
每个指令都有一个唯一的操作码,用于识别和执行该指令。
我们还将简要介绍8086微处理器的体系结构和寻址模式。
8086是一种基于寄存器-寻址的微处理器,其中包含多个通用寄存器、指令指针寄存器和标志寄存器。
同时,它还支持不同的寻址模式,如直接寻址、寄存器间接寻址和基址寻址等。
第二部分:算术和逻辑运算在这一部分,我们将详细讨论一些用于算术和逻辑运算的8086指令的操作码。
这些指令可以执行加法、减法、乘法、除法、与运算、或运算、异或运算和移位运算等操作。
我们将执行以下操作码的示例:- ADD指令:用于执行加法操作,将两个操作数相加。
- SUB指令:用于执行减法操作,将第二个操作数从第一个操作数中减去。
- MUL和DIV指令:用于执行乘法和除法操作,分别将两个操作数相乘或相除。
- AND、OR和XOR指令:用于执行与、或和异或运算,将两个操作数进行按位运算。
- SHL和SHR指令:用于执行逻辑左移和逻辑右移操作,将操作数按指定位数进行移位。
我们将逐步演示每个指令的使用方式和操作结果,以便更好地理解这些指令在实际编程中的应用。
第三部分:数据传输和访存操作在本节中,我们将研究用于数据传输和访存操作的8086指令的操作码。
这些指令允许我们将数据从一个位置传输到另一个位置,以及将数据存储到内存中或从内存中加载数据。
实验一数据传送实验目的:1.熟悉8086指令系统的数据传送指令及8086的寻址方式。
2.利用TurboDebugger调试工具来调试汇编语言程序。
实验任务:1.通过下述程序段的输入和执行来熟悉TurboDebugger的使用,并通过显示器屏幕观察程序的执行情况。
练习程序段如下:MOVBL,08HMOVCL,BLMOVAX,03FFHMOVBX,AXMOVDS:[0020H],BX2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。
压栈程序段如下:MOVAX,0102HMOVBX,0304HMOVCX,0506HMOVDX,0708HPUSHAXPUSHBXPUSHCXPUSHDX出栈程序段请自行编写(用不同的出栈顺序)。
3.指出下列指令的错误并加以改正,上机验证之。
(1)MOV[BX],[SI](2)MOVAH,BX(3)MOVAX,[SI][DI](4)MOVBYTEPTR[BX],2000H(5)MOVCS,AX(6)MOVDS,2000H4.设置各寄存器及存储单元的内容如下:(BX)=0010H,(SI)=0001H(10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H(10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH说明下列各条指令执行完后AX寄存器中的内容,并上机验证。
(1)MOVAX,1200H(2)MOVAX,BX(3)MOVAX,[0120H](4)MOVAX,[BX](5)MOVAX,0110H[BX](6)MOVAX,[BX][SI](7)MOVAX,0110H[BX][SI]5.将DS:1000H字节存储单元中的内容送到DS:2020H单元中存放。
试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。
8086指令集的操作码8086指令集的操作码,指的是英特尔8086微处理器所支持的一系列指令的二进制表示。
这些操作码由不同的位字段组成,每个位字段代表不同的指令功能或参数,通过编码的方式告知处理器要执行的具体操作。
本文将以中括号内的主题为主线,分步介绍8086指令集的操作码,帮助读者了解其结构和功能。
第一步,我们先了解8086指令集的基本结构。
8086指令集主要由操作码、操作数和寄存器组成。
操作码用于表示指令的类型和功能,操作数用于指定指令要操作的数据,而寄存器则用于存储指令过程中的临时数据。
操作码是指令集的核心部分,它决定了处理器要进行的具体操作。
第二步,我们详细分析操作码的结构。
8086指令集的操作码通常由一个或多个字节组成,不同指令的操作码长度各不相同。
每个操作码由若干位字段组成,不同位字段表示不同的含义。
下面是8086指令集常见操作码的一些位字段及其含义:1. 操作码前缀:有些指令的操作码以一个或多个字节作为前缀,用于修改指令的默认行为。
例如,0x66前缀用于指示指令使用16位操作数而不是默认的8位操作数。
2. 操作码码头:通常由几个位字段组成,用于表示指令的类型和功能。
不同的码头表示不同的指令类型,例如,00开头的指令码用于表示数据传输指令,8x开头的指令码用于表示算术和逻辑操作等。
3. 操作数字段:一些指令的操作码中包含指定操作数的字段。
例如,寄存器操作数字段用于指定寄存器编号,内存操作数字段用于指定内存地址,立即数操作数字段用于指定一个常数等。
4. 模式字段:一些指令的操作码中包含用于指定指令执行模式的字段。
例如,寻址模式字段用于指定内存操作数的寻址方式,寄存器模式字段用于指示指令使用哪些寄存器。
5. 功能字段:一些指令的操作码中包含用于指定指令所执行的具体功能的字段。
例如,ALU操作码字段用于指定逻辑或算术操作的类型,位移操作码字段用于指定位移操作的方向和位数等。
第三步,我们了解如何使用操作码来编写8086汇编指令。
8086/8088微机指令(共99条)
一、数据传送类(14条)
MOV PUSH POP XCHG XLA T LEA LDS
LES LAHF SAHF PUSHF POPF IN OUT
二、算术运算类(20条)
ADD ADC INC SUB SBB DEC NEG
CMP MUL IMUL DIV IDIV CBW CWD
DAA DAS AAA AAS AAM AAD
三、逻辑运算类与移位类(13条)
AND OR NOT XOR TEST SHL SAL
SHR SAR ROL RCL ROR RCR
四、控制转移类(26条)
JMP JZ/JE JNZ/JNE JO JNO JS JNS
JP/JPE JNP/JPO JB/JNAE/JC
JNB/JAE/JNC JBE/JNA JNBE/JA
JL/JNGE JNL/JGE JLE/JNG JNLE/JG JCXZ LOOP LOOPZ LOOPNZ CALL RET INT INTO IRET
五、处理器控制类(12条)
CLC STC CMC CLD STD CLI STI NOP
HLT WAIT ESC LOCK 六、字符串操作(14条)
REP LODSB REP LODSW
REP STOSB REP STOSW
REP MOVSB REP MOVSW
REPZ/REPE CMPSB REPZ/REPE CMPSW
REPNZ/REPNE CMPSB REPNZ/REPNE CMPSW
REPZ/REPE SCASB REPZ/REPE SCASW
REPNZ/REPNE SCASB REPNZ/REPNE SCASW
注:记的时候要注意每条指令的格式。