微机控制课件 4.docx

上传人:b****5 文档编号:6847906 上传时间:2023-01-11 格式:DOCX 页数:27 大小:566.14KB
下载 相关 举报
微机控制课件 4.docx_第1页
第1页 / 共27页
微机控制课件 4.docx_第2页
第2页 / 共27页
微机控制课件 4.docx_第3页
第3页 / 共27页
微机控制课件 4.docx_第4页
第4页 / 共27页
微机控制课件 4.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

微机控制课件 4.docx

《微机控制课件 4.docx》由会员分享,可在线阅读,更多相关《微机控制课件 4.docx(27页珍藏版)》请在冰豆网上搜索。

微机控制课件 4.docx

微机控制课件4

2011-10-27

第二章微机原理及其工艺过程控制应用

第1节86系列微处理器结构

第2节86系列微型计算机的指令系统

指令是让计算机完成某种操作的命令,指令的集合称作指令系统,

2.186系列汇编语言指令语句格式

86系列汇编语言指令语句格式如图2—7所示。

图中由前向后的箭头表示是可选项,由后向前的箭头表示是重复项,回头方框表示是语句中的关键字。

图2-786系列汇编语言指令语句格式

 

例如:

AA:

MOVAX,BX;将寄存器BX内容送到寄存器AX之中

标号助记符操作数注释

图2-886系列的操作数寻址方式

[例2.1]设BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H,假定没有使用段前缀,即把DS作为操作数对应的段寄存器。

在各种寻址方式下,这些寄存器和位移量所产生的有效地址和物理地址为:

(1)直接寻址:

有效地址=1B57H

物理地址=21000H十1B57H=22B57H

(2)寄存器间接寻址(寄存器为BX):

有效地址=0158H

物理地址=21000H十0158H=21158H

(3)BX寄存器相对间接寻址:

有效地址=0158H十1B57H=1CAFH

物理地址=21000H十1CAFH=22CAFH

(4)变址寻址(寄存器为DI):

有效地址=l0A5H

物理地址=21000H十10A5H=220A5H

(5)DI寄存器相对变址寻址:

有效地址=10A5H十lB57H=2BFCH

物理地址=21000H十2BFCH=23BFCH

(6)基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):

有效地址=0158H十10A5H=11FDH

物理地址=21000H十llFDH=221FDH

(7)相对的基址加变址的寻址(BX为基址寄存器,DI为变址寄存器)

有效地址=0158H十l0A5H十1B57H=2D54H

物理地址=21000H十2D54H=23D54H

****************************************************************************

指令系统:

传送类指令、

算术运算类指令、

逻辑运算和移位指令、

串操作指令、

控制指令

2.3传送类指令

传送类指令是指令系统中最活跃的一类指令,也是条数最多的一类指令,主要用于数据的保存及交换等场合。

此处我们把这类指令分为4种,并把各种指令操作码助记符和对应的操作数列表所示。

表2-3传送类指令

指令

类型

指令

格式

指令

功能

状态标志位

备注

OSZAPC

通用

数据

传送

MOV目标,源

PUSH源

POP目标

XCHG目标,源

XLAT

传送字节或字

字压入堆栈

字弹出堆栈

交换字节或字

字节翻译

------

------

------

······

------

源:

寄存器、存储器、立即数

目标:

寄存器、存储器

源:

寄存器、存储器

目标:

寄存器(CS除外)、存储器

源:

通用寄存器、存储器

目标:

通用寄存器、存储器

目标

地址

传送

LEA目标,源

LDS目标,源

LES目标,源

装入有效地址

装入数据段指针到DS

装入附加段指针到ES

------

------

------

源:

内存操作数

目标:

16位通用寄存器

标志

位传

LAHF

SAHF

PUSHF

POPF

把FR低字节装入AH

把AH内容装入FR低字节

把FR内容压入堆栈

从堆栈弹出FR内容

------

-·····

------

······

I/O

数据

传送

IN累加器,端口

OUT端口,累加器

输入字节或字

输出字节或字

------

------

累加器:

AL或AX

端口:

地址0~255或间址寄存器DX

说明:

·运算结果影响标志位,-运算结果不影响标志位。

1.传送类指令

(1)通用数据传送指令

通用传送指令中包括最基本的传送指令MOV,堆栈指令PUSH和POP,数据交换指令XCHG。

MOV指令是形式最简单、用的最多的指令。

它可以实现CPU内部寄存器之间的数据传送、寄存器和内存之间的数据传送,还可以把一个立即数送给CPU的内部寄存器或者内存单元。

例如:

MOVAL,BL;BL中的8位数据送AL

MOVES,DX;DX中16位数据送ES

MOVAX,[BX];BX和BX十1所指的两个内存单元的内容送AX

MOV[DI],AX;累加器的内容送DI和Dl十1所指的两个单元

MOVCX,[1000];将1000和1001两单元的内容送CX

MOVBL,40;立即数40送BL

MOVDX,5040;立即数5040送DX

MOVWORDPTR[SI],6070;立即数6070送到SI和SI十1所指的两个单元

;这里的PTR是一个汇编操作符,与前面的WORD

;一起,标明往SI地址中写一个字,而不是一个节

*********************************************

(2)堆栈操作指令

在子程序调用和中断处理过程时,分别要保存返回地址和断点地址,在进入子程序和中断处理后,还需要保留通用寄存器的值;

子程序返回和中断处理返回时,则要恢复通用寄存器的值,并分别将返回的地址或断点地址恢复到指令指针寄存器中。

这些操作都要通过堆栈来操作,其中寄存器的保存和恢复需要有堆栈指令来完成。

8086/8088的堆栈操作遵循“先进后出”原则。

例:

保存和恢复DS,ES内容的指令如下

PUSHDS

PUSHES

POPES

POPDS

与上比较:

PUSHDS

PUSHES

POPDS

POPES

结果有何不同?

*********************************************

(3)交换指令

交换指令XCHG可以实现字节交换,也可以实现字交换。

交换过程可以在CPU的内部寄存器之间进行,也可以在内部寄存器和存储单元之间进行,但不能在两个存储之间执行数据交换过程。

例如:

XCHGAL,BL;AL和BL之间进行字节交换

XCHGBX,CX;BX和CX之间进行字节交换

XCHG[2503],CX;CX中的内容和2530,2531两单元的内容交换

*******************************************

(4)换码指令

XLAT是一条完成字节翻译功能的指令,称为换码指令。

它可以使累加器中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换。

使用换码指令时,要求BX寄存器指向表的首地址,AL中为表中某一项与表格首地址之间的偏移量,指令执行时,会将BX和AL中的值相加,把得到的值作为地址,然后将此地址所对应的单元中的值取到AL中去。

XLAT指令是通过查表方式来完成翻译功能的,因此,在执行该指令之前,必须建立好一张翻译表,该表的最大容量为256字节。

例如,将十进制数字(0—9)翻译成7段显示码的译码表顺序存放在内存中,假设这段数据存放的偏移地址首址为2000H,取出“6”所对应的7段码,该过程可用如下几条程序实现:

MOVBX,2000H

MOVAL,3

XLAT

*********************************************

2.目标地址传送指令

这是一类专用于传送地址码的指令,可用来传送操作数的段地址或偏移地址,共包含以下3条指令:

(1)取有效地址指令

取有效地址指令LEA的功能是将存储器地址送到一个寄存器。

LEA指令要求源操作数必须为内存单元地址,目的操作数必须为一个16位的通用寄存器。

这条指令常用来使一个寄存器作为地址指针。

例如:

LEAAX,[2728];将2728单元的偏移量送AX,指令执行后,AX中为2728

LEABX,[BP+SI];指令执行后,BX中的内容为BP+SI的值

LEASP,[0482];使堆栈指针SP为482

**********************************************

(2)将地址指针装到DS和另一个寄存器的指令

LDS指令的功能是把4个字节的地址指针(其中包括一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后两个字节即段地址一定送到DS中。

比如,设2l30H一2133H这4个单元中存放着一个地址,2130H和2131H中为地址的偏移量,2132H和2133H中为地址的段值,执行指令:

LDSDI,[2130H]

该指令功能是:

2130H和2131H中的偏移量送到DI,2132H和2133H中的段值送到DS。

****************************************88

(3)将地址指针装到ES和另一个寄存器的指令

LES指令与LDS指令的操作基本相同,所不同仅在于将源操作数所指向地址指针中的段基址(后两个字节)传送到ES段寄存器,而不是DS段寄存器。

3.标志位传送指令

可完成标志位传送的指令共有4条:

(1)读取标志指令

读取标志指令LAHF被执行时,将标志寄存器中的低8位传送到AH中,如图2-9所示。

图2-9LAHF指令的功能

(2)设置标志指令

设置标志指令SAHF被执行时,将AH寄存器的相应位传送到标志寄存器的低8位。

用图表示,就是将图2-9的5个箭头方向反过来。

(3)对标志寄存器的压入堆栈指令和弹出堆栈指令

PUSHF指令将标志寄存器的值压入堆栈顶部,同时,堆栈指针SP的值减2。

此指令在执行时标志寄存器的值不变。

POPF指令的功能正好相反,此指令在执行时从堆栈中弹出一个字送到标志寄存器中,同时堆栈指针SP的值加2。

PUSHF和POPF指令一般用在子程序和中断处理程序的首尾,起保存主程序标志和恢复主程序标志的作用。

 

4.输入/输出数据传送指令

输入/输出指令用来完成累加器(AX/AL)与I/O端口之间的数据传送功能。

执行输入指令时,CPU可以从一个8位端口读入一个字节到AL中,也可以从两个连续的8位端口读一个字到AX中。

执行输出指令时,CPU可以将AL中的—个字节写到一个8位端口中,或者将AX中的一个字写到两个连续的8位端口中。

例如:

INAL,50H;将50H端口的字节读入AL

INAX,70H;将70、71端口的值读入AX,将70H端口的内容读入AL,71H端口的内容读入AH

INAL,DX;从DX所指的端口中读取一个字节

OUT44H,AL;将AL中的一个字节输出到44H端口。

OUT80H,AX;将AL中的内容输出到80H,AH中的内容输出到81H

OUTDX,AL;将AL中的内容输出到DX所指的端口中

OUTDX,AX;将AL中的内容输出到DX所指的端口中;AH中的内容输出到DX+1所指的端口中

*********************************************************

2.2.4算术运算类指令

86系列CPU指令系统中,具有完备的加,减,乘,除算术运算指令,可处理不带符号或带符号的8/16位二进制整数,以及不带符号的装配型/拆开型十进制整数。

表2-4给出了86系列指令系统中算术运算类指令。

表2-4算术运算类指令

指令

类型

指令

格式

指令

功能

状态标志位

备注

OSZAPC

ADD目标,源

ADC目标,源

INC目标

加法(字节/字)

带进位加法(字节/字)

加1(字节/字)

······

······

·····-

源:

通用寄存器、存储器、立即数

目标:

通用寄存器、存储器

源:

通用寄存器、存储器、立即数

目标:

通用寄存器、存储器

目标:

通用寄存器、存储器

SUB目标,源

SBB目标,源

DEC目标

NEG目标

CMP目标,源

减法(字节/字)

带借位减法(字节/字)

减1(字节/字)

取补

比较

······

······

·····-

·····1

······

源:

通用寄存器、存储器、立即数

目标:

通用寄存器、存储器

源:

通用寄存器、存储器、立即数

目标:

通用寄存器、存储器

目标:

通用寄存器、存储器

目标:

通用寄存器、存储器

源:

通用寄存器、存储器、立即数

目标:

通用寄存器、存储器

MUL源

IMUL源

无符号乘法(字节/字)

有符号乘法(字节/字)

·****·

·****·

源:

通用寄存器、存储器

源:

通用寄存器、存储器

DIV源

IDIV源

CBW

CWD

无符号除法(字节/字)

有符号除法(字节/字)

字节转换成字

字转换成双字

******

******

------

------

源:

通用寄存器、存储器

源:

通用寄存器、存储器

AAA

DAA

AAS

DAS

AAM

AAD

加法的ASCII码调整

加法的十进制调整

减法的ASCII码调整

减法的十进制调整

乘法的ASCII码调整

除法的ASCII码调整

***·*1

*·····

***·*1

*·····

*··*·*

*··-·*

说明:

·运算结果影响标志位,-运算结果不影响标志位,*标志位为任意值,“1”将标志位置1

1.加法指令

(1)不带进位位的加法指令

ADD用来执行两个字或两个字节的相加操作,结果放在原来存放目的操作数的地方。

例如:

ADDAL,50H;AL和50H相加,结果放在AL中

ADDCX,l000H;CX中的内容和1000H相加,结果放在CX中

ADDDI,SI;DI和SI的内容相加,结果放在DI中

ADD[BX+DI],AX;BX十DI和BX十DI十1两个存储单元的内容和AX中的内容相加,

;结果放在BX+DI和BX+DI+1所指的存储单元中

ADDAX,[BX+2000H];BX+2000H和BX+2001H所指的两单元的内容和AX的内容相加,

;结果放在AX中

(2)带进位位的加法指令

ADC在形式上和功能上都和ADD指令类似,只有一点区别,就是ADC指令被执行时,将进位标志CF的值加在和中。

例如:

ADCAX,SI;AX和SI中的内容以及CF的值相加,结果放在AX中

ADC指令为实现多字节的加法运算提供了方便。

【例子】有两个4字节的无符号数相加,这两个数分别放在2000H和3000H开始的存储单元中,低位在前,高位在后,要求进行运算后,得到的和放在2000H开始的内存单元中。

可以用如下程序段实现这种多字节的加法:

CLC;清进位位CF

MOVSI,2000H;取第一个数的首地址

MOVAX,[SI];将第一个数的低16位取到AX

MOVDI,3000H;取第二个数的首地址

ADDAX,[DI];第一个数和第二个数的低16位相加

MOV[SI],AX;低16位相加的结果送到2000H,200lH单元

MOVAX,[SI+2];取第一个数的高16位送到AX中

ADCAX,[DI+2];两个数的高16位连同进位位相加

MOV[SI+2],AX;高16位相加的结果送到2002H、2003H单元

(3)增量指令

INC只有1个操作数,指令在执行时,将操作救的内容加1,再送回该操作数。

这条指令一般用在循环程序中修改指针和循环次数。

例如:

INCAL;将AL中的内容加1

INCCX;将CX中的内容加I

INCBYTEPTR[BX+DI+500];将BX十DI十500所指的存储单元的内容加1

在编程中要注意,INC指令不影响进位标志CF的状态。

2.减法指令

(1)不带借位的减法指令

SUB完成两个字节或两个字的相减。

例如:

SUBBX,CX;将BX中的内容减去CX中的内容。

结果放在BX中

SUB[BP+2],CL;将SS段的BP+2所指的单元中的值减去CL中的值。

;结果放在BP+2所指的堆栈单元中

SUBAL,20;AL中的数减去20,结果放在AL中

SUBSI,5010H;SI中的数减去50l0H,结果放在SI中

(2)带借位的减法指令

SBB在形式上和功能上都和SUB指令类似,只是SBB指令在执行减法运算时,还要减去CF的值。

在减法运算中,CF的值就是两数相减时,向高位产生的借位,所以,SBB在执行减法运算时,是用被减数减去减数,并减去低位字节相减时产生的借位。

和带进位位的加法指令类似,SBB主要用在多字节减法运算中。

例如:

SBBAX,2030H;将AX的内容减去立即数2030H,并减去进位位CF的值

SBBWORDPTR[DI],1000H;DI和DI+1所指的单元中的数减去1000H及CF,;结果

;放在DI和DI+1所指的单元中

(3)减量指令

DEC只有1个操作数,执行时,将操作数的值减1,再将结果送回操作数。

例如:

DECAX;将AX的内容减1,再送回AX中

DECBL;将BL的内容减1,结果送回BL中

DECBYTEPTR[DI+2];将DI+2所指的单元中的内容减1,结果送回此单元

(3)取补指令

NEG对指令中给出的操作数取补码,再将结果送回。

因为对一个操作数取补码相当于用0减去此操作数,所以NEG指令执行的也是减法操作。

例如:

NEGAL;将AL中的数取补码,送回AL

NEGCX;将CX中的内容取补码,送回CX

(4)比较指令

CMP也是执行两个数的相减操作,但不送回相减的结果,只是使结果影响标志位。

例如:

CMPAX,2000H;将AX的内容和2000H相比较,结果影响标志位

CMPAX,[BX+DI+100];将累加器和两个存储单元的数相比较,结果影响标志

;位,地址由BX+DI+100和BX+DI+101指出

CMPDX,DI;将DX和DI的内容相比,结果影响标志位

一般情况下,CMP指令后面经常会有一条条件转移指令,用来检查标志位的状态是否满足了某种关系。

CMP指令对标志位的影响如表2-5所示。

表2-5CMP指令执行后标志位的状态

数据类型

目的操作数与源操作数的关系

CFZFSFOF

带符号位

的操作数

0100

-010

-001

-000

-011

不带符号位

的操作数

0100

10--

00--

3.乘法指令

乘法运算是双操作数运算,但是,在指令中却只指定了—个操作数,另一个操作数是隐含规定的,乘法运算的隐含规则如图2—10所示。

其中的操作数可以是寄存器操作数或存储器操作数,而隐含的为AL或AX。

从图2—10中可以看出,两个8位数相乘,其结果是16位数;两个16位数相乘,其结果是32位数。

图2-10乘法运算规则

4.除法指令

除法运算也是双操作数运算,它的隐含规则如图2—11所示,其中的操作数与乘法指令相同。

在除法运算中,如果除数是8位的,则要求被除数是16位的;如果除数是16位的,则要求被除数是32位的。

如果被除数的位数不够,则应在进行除法以前,预先将被除数扩展到所需要的位数。

对于带符号数,这种扩展应该保持被扩展数的值(包括符号位)不变,因此应该是带符导位的扩展。

例如,0111000B应扩展成0000000001110000B,11110000应扩展成1111111111110000B。

CBW和CWD指令就是分别用于这两种扩展的。

对于带符号数的除法,86系列是按表2-6所示的方式来处理商和余数的。

图2-11除法运算规则

表2-6带符号数除法的商和余数

被除数

除数

余数

9

9

-9

-9

2

-2

2

-2

4

-4

-4

4

1

1

-1

-1

从表2-6可以看出.余数始终与被除数同号,也就是说,商是往0靠拢的。

********************************************************************************

2.2.5逻辑运算和移位指令

8086指令系统提供了对8位数和16位数的逻辑操作指令。

这些指令分为两类:

一类是逻辑运算指令,另一类是移位指令。

表2-7给出了86系列指令系统中逻辑运算和移位类指令。

表2-7逻辑运算和移位指令

指令

类型

指令

格式

指令

功能

状态标志位

备注

OSZAPC

NOT目标

AND目标,源

OR目标,源

XOR目标,源

TEST目标,源

非(字节/字)

与(字节/字)

或(字节/字)

异或(字节/字)

测试(字节/字)

------

0··*·0

··*·0

··*·0

0··*·0

目标:

通用寄存器、存储器

源:

通用寄存器、存储器、立即数

目标:

通用寄存器、存储器

源:

通用寄存器、存储器、立即数

目标:

通用寄存器、存储器

源:

通用寄存器、存储器、立即数

目标:

通用寄存器、存储器

源:

8位或16位立即数

目标:

通用寄存器、存储器

SHL目标,计数值

SAL目标,计数值

SHR目标,计数值

SAR目标,计数值

逻辑左移(字节/字)

算术左移(字节/字)

逻辑右移(字节/字)

算术右移(字节/字)

···*··

···*··

···*··

···*··

目标:

通用寄存器、存储器

计数值:

1或CL,移位次数

目标:

通用寄存器、存储器

计数值:

1或CL,移位次数

目标:

通用寄存器、存储器

计数值:

1或CL,移位次数

目标:

通用寄存器、存储器

计数值:

1或CL,移位次数

ROL目标,计数值

R0R目标,计数值

RCL目标,计数值

RCR目标,计数值

循环左移(字节/字)

循环右移(字节/字)

带进位循环左移(字节/字)

带进位循环右移(字节/字)

·--*-·

·--*-·

·--*-·

·--*-·

目标:

通用寄存器、存储器

计数值:

1或CL,移位次数

目标:

通用寄存器、存储器

计数值:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1