微机原理 80x86指令系统

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

4.1.3 8086/8088指令系统

8086/8088CPU指令系统包含有133条基本指令。按其功能可以分为6类,它们是:

⑴数据传送类指令

⑵算术运算类指令

⑶逻辑运算与位移类指令

⑷字符串指令

⑸控制转移类指令

⑹处理器控制类指令。

一、数据传送类指令

数据传送类指令时将数据、地址或立即数传送到寄存器或存储器单元中。可完成寄存器与寄存器之间、寄存器与存储器之间、寄存器与I/O端口之间的字节或字传送。它又可分为通用数据传送指令、输入/输出指令、目标地址传送指令和标志传送指令四组。特点:除SAHF和POPF不影响标志寄存器内容。

(一)通用数据传送指令

1. 最基本的传送指令

指令格式及操作:

MOV dst,src;(dst)←(src)

将源操作数s指定的内容送到d目的操作数

dst是目的操作数,它可以是存储器、通用寄存器(不能为IP)和段寄存器(不能为CS),不能为立即数。

Src是源操作数,它可以是存储器、通用寄存器、段寄存器和立即数。

MOVE指令需要注意的问题:

①MOVE指令可传送8位数据,也可传送16位数据。

②MOVE指令中的两操作数s和d,必用1个寄存器,不允许同时为存储单元。

③不能用CS和IP做目的操作数。

④不允许段寄存器之间直接数据传送。

⑤不允许立即数做目的操作数。

⑥不能向段寄存器送立即数。

2.堆栈操作指令

堆栈操作指令是用来完成压入和弹出堆栈操作的。8086/8088指令系统中提供了完成这两种操作的相应指令。

⑴压入堆栈指令

指令格式及操作:

PUSH src;(SP) ←(SP)-2,

((SP)+1:(SP)) ←(src) src源操作数可以是寄存器操作数和存储器操作数,且必须是16位的操作数,但不能是立即数。

⑵弹出堆栈指令

指令格式及操作:

POP dst; (dst) ←((SP)+1:(SP)),

(SP) ←(SP)+2

dst目的操作数可以是寄存器操作数和存储器操作数,且必须是16位的操作数,但不能是立即数。

特点:

①s和d可以是16位寄存器或存储器两相邻单元;

②堆栈按字操作;

③每执行一条入栈指令,堆栈地址指针SP减2,入栈的数据位于栈顶;

④高位字节先入栈,放在高位地址单元,低位字节后入栈,放在较低地址单元;先进先出原则;

⑤执行弹出指令时,过程相反,栈顶指针的值加2;

⑥CS段寄存器的值可以入栈,但不能反过来弹出一个字到CS

3.交换指令

将源操作数和目的操作数(字或字节)相互对应交换位置。

指令格式及操作:

XCHG opr1, opr2;(opr1) ←→(opr2)

4.字节转换指令

通过查表来完成代码转换,用于实现字节翻译的功能。

指令格式及操作:

XLAT src_table;(AL) ←((BX)+(AL))

XLAT指令是用来将一种字节代码转换成另一种字节代码。执行的结果放在AL中。

使用指令前:BX寄存器的内容指向表格首址;AL中存放待查的码,即某一项与表首地址的距离。

XLAT指令还可以有以下几种表示形式:

XLAT;不写操作数

XLATB;有B就不允许再写操作数。

XLAT ES:src_table;重设段寄存器为ES

Hex_table

码,则可用以下几条指令实现:

Hex_table+F46H

6100FH

(二) 输入/输出指令

只能用累加器作为执行I/0数据传送的机构。输入输出指令可以分为两大类:一类是直接端口地址的输入/输出指令:一类是通过DX寄存器间接端口地址的输入/输出指令。

⑴输入指令

①直接寻址的输入指令

寻址范围0-255(少于8位地址)

指令格式及操作:

IN acc, port;(acc) ←(port)

②间接寻址的输入指令

寻址范围0-65535(少于或超过8位地址)指令格式及操作:

IN acc, DX;(acc) ←((DX))

⑵输出指令

①直接寻址的输出指令

指令格式及操作:

OUT port, acc; (port) ←(acc)

②间接寻址的输出指令

指令格式及操作:

OUT DX, acc; ((DX)) ←(acc)

(三)目标地址传送指令

1. 取有效地址指令

指令格式:

LEA reg16, mem

此指令的功能是将存放源操作数的16位偏移地址(即有效地址EA)送到一个16位的通用寄存器中。即源操作数必须是一个存储器操作数,目的操作数必须是一个通用寄存器操作数。例如:

LEA BX, buffer

LEA AX, [BP][DI]

LEA DX, beta[BX][SI]

注意LEA指令和MOV指令的异同。

不同:

LEA BX, buffer;将存储器buffer的偏

移地址送到BX

MOV BX, buffer;将存储器buffer的内

容传送到BX

相同:

LEA BX, buffer

MOV BX, OFFSET buffer

以上两条指令都是将存储器buffer的偏移地址送到BX。其中OFFSET buffer表示存储器偏移地址。

相关文档
最新文档