全站数据
8 4 2 0 5 8 1

8086 133条指令有哪些

一起学消防 | 教育先行,筑梦人生!         
问题更新日期:2024-06-07 12:38:15

问题描述

8086 133条指令有哪些,麻烦给回复
精选答案
最佳答案

8086指令包含133条基本指令, 一般分为五类来介绍

传送指令,算术运算指令,逻辑运算和移位指令,串操作指令,控制转移指令

一、数据传送类指令

数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令

传送指令把数据从一个位置传送到另一个位置

除标志寄存器传送指令外,均不影响标志位

重点掌握

MOVXCHGPUSHPOP XLAT LEA

1、通用数据传送指令

提供方便灵活的通用传送操作

有3条指令

MOV

XCHG

PUSHPOP

①基本传送指令MOV(move)

mov cl,4;cl←4,字节传送

mov dx,0ffh;dx←00ffh,字传送

mov si,200h;si←0200h,字传送

mov bvar,0ah;字节传送

假设bvar是一个字节变量,定义如下:bvardb 0

mov wvar,0bh;字传送

假设wvar是一个字变量,定义如下:wvardw 0

mov al,[bx];al←ds:[bx]

mov dx,[bp];dx←ss:[bp+0]

mov dx,[bp+4];dx←ss:[bp+4]

mov es,[si];es←ds:[si]

2,非法指令的主要现象:

两个操作数的类型不一致

无法确定是字节量还是字量操作

两个操作数都是存储器

段寄存器的操作有一些限制

例子:

1、当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明

MOV [BX+SI], 255;非法指令,修正:

mov byte ptr [bx+si],255

byte ptr 说明是字节操作

mov word ptr [bx+si],255

word ptr 说明是字操作

2,8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)

MOV buf2, buf1如MOV[BX],[SI]

3,MOV DS, ES;非法指令,修正:

mov ax,es

mov ds,ax

MOV DS, 100H;非法指令,修正:

mov ax,100h

mov ds,ax

MOV CS, [SI];非法指令

指令存在,但不能执行

②交换指令XCHG(exchange)

XCHG reg,reg/mem

reg  reg/mem

寄存器与寄存器之间对换数据

寄存器与存储器之间对换数据

不能在存储器与存储器之间对换数据

例子:

mov ax,1199h;ax=1199h

xchg ah,al;ax=9911h

等同于 xchg al,ah

mov wvar,5566h;wvar是一个字量变量

xchg ax,wvar ;ax=5566h,wvar=9911h

等同于 xchg wvar,ax

注意:不能在两个内存单元之间交换

如:XCHG [BX],[SI]错误!

段寄存器中CS、IP不能做操作数

③ 堆栈操作指令

1.堆栈是一个“后进先出LIFO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址

堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定

2,堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP

堆栈由栈底向低地址方向生成

push:进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部

如:push ax

push [2000h]

出栈指令POP:出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2

如:pop ax

pop wvar

3,堆栈操作的特点

堆栈操作的单位是字,进栈和出栈只对字进行

数据从栈顶压入和弹出时,都是低地址送低字节,高地址送高字节

堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据

堆栈段是程序中不可或缺的一个内存区,常用来

临时存放数据

传递参数

保存和恢复寄存器

2、累加器专用传送指令

① 输入输出指令(IN/OUT指令)

格式:IN AL,port;port为直接端口地址

IN AL,DX ;DX的内容为端口地址(间接方式)

INAX,port;

INAX,DX

OUT port,AL

OUTDX, AL

OUT port,AX

OUTDX, AX

注意:

①只能用累加寄存器不能用其它寄存器

②当端口地址在00H—FFH之间可以用直接地址

当端口地址大于FFH时必须用DX间址形式

例:IN AL,40H;(40H)AL

IN AX,80H; (80H)、(81H)AX

MOVDX, 0382H

IN AL,DX ;(0382H) AL

OUT 62H, AL

MOVDX, 0380H

OUT DX,AX

② 换码指令XLAT(查表指令)

将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL

XLAT;al←ds:[bx+al]

换码指令执行前:

在主存建立一个字节量表格,内含要转换成的目的代码

表格首地址存放于BX,AL存放相对表格首地址的位移量

换码指令执行后:

将AL寄存器的内容转换为目标代码

③址传送指令 三条LEA 、LDS、LES

将存储器操作数的有效地址送至指定的16位通用寄存器

LEA r16, mem

r16←mem的有效地址EA

例子:有效地址的获取

LEAAX, [2375H] ; AX=2375H

LEASP, [BX+SI] ; SP=(BX)+(SI)

区别: LEA SI, BUFF;SI=BUFF

MOV SI,BUFF;SI=(BUFF)

LDSr16, mem

ds、r16←mem中的双字,

执行后,会更新r16,ds的值。前面两个字节送到r16,后面两个字节送到ds

LESr16, mem

es、r16←mem中的双字,执行后,会更新r16,ds的值,效果与lds类似

3、标志传送指令

①读标志指令

LAHF ;标志寄存器低字传送到AH

②设标志指令

SAHF ; AH的内容送标志寄存器低8位

③标志寄存器堆栈指令

PUSHF ;标志寄存器内容(16位)压栈

④标志寄存器出栈指令

POPF;弹出标志寄存器的内容。

二、算术运算类指令

概述:算术运算类指令用来执行二进制的算术运算:加减乘除以及BCD码调整。

这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志。

重点掌握

加法指令:ADD、ADC、INC

减法指令:SUB 、SBB、DEC、CMP、NEG

1、加法和减法指令

加法指令:ADD, ADC和INC

减法指令:SUB, SBB, DEC, NE

其他回答

⼀、 数据传送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。

⼆、 算术指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。

三、 逻辑指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。

四、 控制转移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。

五、 串操作指令:MOVS、LODS、STOS、CMPS、SCAS。

六、 标志处理指令:CLC、STC、CLD、STD。