计算机接口技术教案5.docx

上传人:b****6 文档编号:5729520 上传时间:2022-12-31 格式:DOCX 页数:34 大小:30.79KB
下载 相关 举报
计算机接口技术教案5.docx_第1页
第1页 / 共34页
计算机接口技术教案5.docx_第2页
第2页 / 共34页
计算机接口技术教案5.docx_第3页
第3页 / 共34页
计算机接口技术教案5.docx_第4页
第4页 / 共34页
计算机接口技术教案5.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

计算机接口技术教案5.docx

《计算机接口技术教案5.docx》由会员分享,可在线阅读,更多相关《计算机接口技术教案5.docx(34页珍藏版)》请在冰豆网上搜索。

计算机接口技术教案5.docx

计算机接口技术教案5

威海海洋职业学院

 

使用教材《微机原理与接口技术》出版社中国电力出版社

适用专业五专船舶电子技术层次大专总学时32

授课教师吴庆海教研室电气自动化

授课学年2016—2017学年学期第一学期

 

课程教案

教师

吴庆海

职称

讲师

专业

船舶电子

班级

五专船电1601.1602

课程名称

《计算机接口技术》

章节

第2章指令系统2.3指令系统第二部分

教学时数

2

教学方法及手段

新授课多媒体授课

1、掌握指令的基本格式

2、掌握指令系统

 

 

见附页。

时间分配

重难点:

1算术运算和逻辑运算

2控制转移类指令

3处理器控制类指令

[1]《微型计算机原理与接口技术》,吴秀清主编,中国科技大学出版社,2003

[2]《微型计算机技术及应用》,戴梅萼、史嘉权编著,清华大学出版社,2004

课程教案附页

2.38086指令系统

算术运算指令

算术运算指令包括加、减、乘、除四组。

可实现字节或字,无符号数和有符号数运算。

指令有单操作数(如乘、除指令)的,也有双操作数的。

单操作数不允许使用立即数,而双操作数中,立即数也只能作为源操作数。

此外,也不允许两个操作数都为存储器操作数。

算术运算可能涉及到超出数的表示范围的问题,对无符号数和有符号数分别可由CF和OF标志来判断。

除四组二进制算术运算指令外,为使运算结果为十进制数(为BCD码),8088指令系统还提供了四类十进制调整指令。

算术运算指令大多会对标志位产生影响。

1.加法运算指令

加法运算指令有三条:

不带进位位的加法指令ADD、带进位位的加法指令ADC及加1指令INC。

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

指令格式为:

ADDOPRD1,OPRD2;(OPRD1)←(OPRD1)+(OPRD2)

ADD指令用于两个操作数相加(目标操作数加源操作数),和置于目标操作单元。

源操作数和目标操作数均可为8位或16位的寄存器操作数或存储器操作数,源操作数还可为立即数。

两操作数可为无符号数,也可为带符号数。

需要注意的是:

两操作数不能同时为存储器操作数。

另外不能对段寄存器进行运算。

ADD指令的执行会对6个状态标志位产生影响。

例如:

ADDCL,20H;(CL)←(CL)+20H

ADDAX,SI;(AX)←(AX)+(SI)

ADDDATA[BX],AL;((BX)+DATA)←((BX)+DATA)+(AL)

ADDDX,[BX+SI];(DX)←(DX)+((BX)+(SI)+1):

((BX)+(SI))

上述指令均为合法的ADD指令,而下列ADD指令则是非法的:

ADD[SI],[BX];不允许两操作数均为存储器操作数

ADDDS,AX;不允许段寄存器进行运算

ADD指令应用举例:

例:

试析执行下列指令后,各标志位的状态。

MOVAL,7EH;(AL)←7EH

ADDAL,5BH;(AL)←7EH+5BH

01111110

+01011011

11011001

执行后:

AF=1,CF=0,OF=1,PF=0,SF=1,ZF=0

(AL)=D9H

若为无符号数,运算结果未超出8位二进制数的表示范围(CF=0);

若为有符号数,运算结果已超出8位二进制数的表示范围(OF=1)。

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

指令格式为:

ADDOPRD1,OPRD2;(OPRD1)←(OPRD1)+(OPRD2)+CF

ADD指令在格式、功能及对标志位影响上都与ADD指令类同,只是标志位CF的值也参与加法运算,常用于多字节加法运算。

ADC指令应用举例:

例:

求两个4字节无符号数0107A379H+10067E4FH之和。

程序如下:

MOVDX,0107H;第1个数的高位送DX

MOVAX,0A379H;第1个数的低位送AX

MOVBX,1006H;第2个数的高位送BX

MOVCX,7E4FH;第2个数的低位送CX

ADDAX,CX;两数低16位相加

ADCDX,BX;两数高16位相加,并加上低16位相加中的进位位

执行结果:

(DX)=110EH(AX)=21C8HCF=0

即两数之和为110E21C8H

上程序可简化如下:

MOVAX,0A379H

ADDAX,7E4FH

MOVDX,0107H

ADCDX,1006H

执行结果与上程序相同。

(3)加1指令INC(increment)

指令格式为:

INCOPRD;(OPRD)←(OPRD)+1

INC指令将指定的操作数内容加1,后再送回该操作数。

操作数可以是寄存器或存储器操作数。

但不能是段寄存器,也不能为立即数。

操作数可以是8位,也可为16位。

INC指令不影响CF标志位,但对AF、OF、PF、SF及ZF会产生影响。

它通常在循环程序中用于修改地址指针及循环次数等。

例如:

INCAX;(AX)←(AX)+1

INCBL;(BL)←(BL)+1

INCBYTEPTR[SI];将SI所指向的存储单元内容加1,并送回该单元

2.减法指令

8088/8086共有5条减法指令。

包括:

不考虑借位的减法指令SUB,考虑借位的减法指令SBB,减1指令DEC,求补指令NEG以及比较指令CMP。

(1)不考虑借位的减法指令SUB(subtract)

指令格式为:

SUBOPRD1,OPRD2;(OPRD1)←(OPRD1)-(OPRD2)

SUB指令用于两个数相减(目标操作数减去源操作数),结果置于目标操作单元。

该指令对操作数的要求及对标志位的影响与ADD指令完全相同。

例如:

SUBBL,30H;(BL)←(BL)-30H

SUBAL,[BP+SI];AL的内容减去SS段中偏移地址为(BP)+(SI)单元的

;内容,结果送AL

(2)考虑借位的减法指令SBB(subtractwithborrow)

指令格式为:

SBBOPRD1,OPRD2;(OPRD1)←(OPRD1)-(OPRD2)-CF

SBB指令在格式、功能及对标志位的影响上与SUB指令类同,只是标志位CF的值也参与减法运算,常用于多字节减法运算。

例如:

SBBBL,30H;(BL)←(BL)-30H-CF

SBBWORDPTR[SI],1034H;(SI)+1和(SI)的两个单元的值减去立即数1034H

;及CF的值,结果送回(SI)+1及(SI)两个单元

(3)减1指令DEC(decrement)

指令格式为:

DECOPRD;(OPRD)←(OPRD)-1

DEC指令将指定的操作数内容减1,后再送回该操作数。

它对操作数的要求及对标志位的影响均与INC指令相同。

它也常在循环程序中用于修改地址指针及循环次数等。

例如:

DECAX;(AX)←(AX)-1

DECBL;(BL)←(BL)-1

DECBYTEPTR[DI];以ES内容为基址,以DI内容为偏移地址单元的内容减

;1,后送回该单元

DEC指令应用举例:

例:

编写一个延时程序。

MOVCX,OFFFFH;送计数初值到CX

NEXT:

DECCX;计数值(CX内容)减1

JNZNEXT;若(CX)≠0,则转NEXT

HLT;停止

上程序延时时间可通过查表找到各条指令执行的时钟周期,后通过计算得到。

(4)求补指令NEG(negate)

指令格式为:

NEGOPRD;(OPRD)←0-(OPRD)

NEG指令的功能是对操作数求补。

即用0减去操作数内容,并将结果送回该操作数。

NEG指令对6个状态标志位都有影响,并需注意以下两点:

①执行NEG指令后,除操作数位0外,一般情况下,都会使CF为1。

②当指定的操作数为80H(-128)或位8000H(-32768),则执行NEG指令后,结果不变,但此时OF置1,其它情况下OF均置0,

NEG指令应用举例:

例:

设(DS)=6000H,(BX)=0010H,(60010H)=47H。

试析执行NEG[BX]指令的结果。

解:

执行上指令时,CPU将进行如下减法运算:

00000000

-01000111

10111001

故执行后(60010H)=B9H,相当于对-47H求补。

(5)比较指令CMP(compare)

指令格式为:

CMPOPRD1,OPRD2;(OPRD1)-(OPRD2)

CMP指令对两个操作数进行比较(相减),相减结果不送目标操作数,而根据相减的结果影响标志位。

指令对操作数的要求及对标志为的影响与SUB指令完全相同。

例如:

CMPBX,2100H;(BX)-2100H,影响标志位

CMPCL,DH;(CL)-(DH),影响标志位

CMPAX,[BX+SI+4];(AX)-((BX)+(SI)+5):

((BX)+(SI)+4)),影响

;标志位

比较指令主要用来比较两个数的大小关系。

可在指令执行后,根据标志位的状态判断两个操作数的大小,或是否相等。

判断方法如下:

·相等关系:

根据ZF状态判断。

如ZF=1,两个操作数相等。

否则,不等。

·大小关系:

分无符号数和有符号数两种情况:

(1)对两个无符号数,可据CF状态来判断。

如CF=0,则被减数大于减数;如CF=1,则减数大于被减数。

(2)对两个有符号数,需考虑两个数是同号还是异号。

①对两个同符号数,相减不会产生溢出,即OF=0。

有:

若SF=0,则被减数大于减数。

若SF=1,则减数大于被减数。

②对两个不同符号数,相减可能产生溢出,也可能不产生溢出。

若OF=0,(无溢出),则:

如被减数大于减数SF=0

如减数大于被减数SF=1

若OF=1,(有溢出),则:

如被减数大于减数SF=1(例7FH-82H=FDH)

如减数大于被减数SF=0(例82H-7FH=03H)

对上结果进行归纳,可得出判两个有符号数大小的方法是:

当OF⊕SF=0时,被减数大于减数

当OF⊕SF=1时,减数大于被减数

编程时,一般都在CMP指令后紧跟一条条件转移指令,以根据比较结果决定程序走向。

3.乘法指令

8088的乘法指令包括无符号数乘法指令(MUL)和有符号数乘法指令(IMUL)两种。

采用隐含寻址方式,源操作数由指令给出,目标操作数隐含。

当字节与字节相乘时,乘积为16位,规定存放在AX中;当字与字相乘时,乘积为32位,规定高16位存放在DX中,低16位存放在AX中。

(1)无符号数的乘法指令MUL(unsignedmutiple)

指令格式为:

MULOPRD

指令操作分两种情况:

字节相乘:

(AX)←(OPRD)×(AL)

字相乘:

(DX):

(AX)←(OPRD)×(AX)

指令中源操作数OPRD可为8位或16位寄存器操作数或存储器操作数,但不能为立即数。

例如:

MULBX;(DX):

(AX)←(AX)×(BX)

MULBYTEPTR[SI];(AX)←(AL)×((SI))

MULDL;(AX)←(AL)×(DL)

MULWORDPTR[DI];(DX):

(AX)←(AX)×((DI)+1):

((DI))

MUL指令对CF及OF标志有影响,当乘积的高半部(在字节相乘时为AH,在字相乘时为DX)不为零,则CF=OF=1,否则CF=OF=0。

对其它标志位无定义。

乘法指令执行时间较长,在某些场合下,可用左移指令来代替,以加快运行速度,待在移位指令中再作介绍。

(2)带符号数的乘法指令IMUL(signedmutiple)

指令格式为:

IMULOPRD

IMUL指令功能与MUL指令类似,仅有以下几点差别:

·两乘数都为有符号数。

·若乘积的高半部分是低半部分的扩展,则CF=OF=0;否则,CF=OF=1

·指令中给出的源操作数应在带符号数的表示范围内。

(作解释,如操作数为表达式)

IMUL指令应用举例:

例:

设(AL)=FEH,(CL)=11H,求两数的乘积。

若将两数看作无符号数,则应使用指令:

MULCL

执行后结果:

(AX)=10DEH(解释:

即0FE0H+FEH=10DEH),

且CF=OF=1(∵AH内容不为0)。

若将两数看作带符号数,则应使用指令:

IMULCL

执行后结果:

(AX)=FFDEH(解释:

相当于-2×11H=-22H,即为FFDEH),

且CF=OF=0(∵AH内容为AL内容符号位的扩展)。

4.除法指令

8088的除法指令也包括无符号除法指令(DIV)和有符号除法指令(IDIV)两种,也采用隐含寻址方式。

除数由指令给出(不能为立即数)。

除法指令要求被除数的字长必须为除数的2倍(如不够要用字位扩展指令来扩展)。

当除数为8位,则被除数为16位,规定放在AX中;当除数为16位,则被除数为32位,规定放在DX(高16位)和AX(低16位)中。

(1)无符号数的除法指令DIV(unsigneddivide)

指令格式为:

DIVOPRD

指令操作数OPRD可为8位或16位,寄存器或存储器操作数,但不可为立即数。

字节除法:

(AL)←(AX)/(OPRD)

(AH)←(AX)%(OPRD)(%为取余操作)

即AX中的16位无符号数除以OPRD的内容。

得到8位的商放AL中,8位的余数放AH中。

字除法:

(AX)←((DX):

(AX))/(OPRD)

(DX)←((DX):

(AX))%(OPRD)(%为取余操作)

即以DX和AX中的32位无符号数除以OPRD的内容。

得到16位的商放在AX中,16位的余数放在DX中。

若除法运算的结果大于寄存器可保存的最大值,即超出8位或16位无符号数可表示的范围,则在CPU内部会产生1个类型0中断(以后再讲)。

例如:

DIVBL;(AX)除以(BL),商放在AL,余数放在AH

DIVWORDPTR[SI];(DX):

(AX)除以((SI)+1):

((SI)),商放在AX,

;余数放在DX

DIV指令应用举例:

例:

用除法指令及所7FA2H÷03DDH。

程序如下:

MOVAX,7FA2H;(AX)=7FA2H

MOVBX,03DDH;(BX)=03DDH

CWD;(DX):

(AX)=00007FA2H

DIVBX;(AX)=0021H(商),(DX)=0025H(余数)

(2)有符号数的除法指令IDIV(singneddivide)

指令格式为:

IDIVOPRD

IDIV指令与DIV在功能上类似,唯操作对象和结果均为有符号数。

例如:

IDIVCX;DX和AX中的32位数除以(CX),商在AX中,余数在

;DX中

IDIVBYTEPTR[BX];(AX)除以DS段以(BX)为偏移地址单元中的内容,商

;在AX中,余数在DX中

IDIV指令执行的结果,商和余数均为带符号数,但规定余数符号与被除数相同。

以保证除法的结果为唯一(作说明,例见P.124)。

无符号除法和有符号除法对六个标志位均无影响。

5.BCD码(十进制数)运算调整指令

为实现十进制(BCD码)运算,8088提供了6条用于BCD码运算和调整指令。

均采用隐含寻址方式,隐含操作数为AL(或AL和AH)。

这些指令与加、减、乘、除指令配合,实现BCD码的算术运算。

1)加法的十进制调整指令

BCD码存放有压缩和非压缩两种形式,故加法的十进制调整也包括压缩和非压缩两种。

(1)压缩BCD码加法的十进制调整指令DAA(desimaladjustforaddition)

指令格式为

DAA

DAA指令用于对两个压缩BCD码相加之和(结果在AL中)进行调整,以产生正确的压缩BCD码运算结果。

调整方法为:

①若(AL)中低4位>9或AF=1,则(AL)←(AL)+06H,并使AF=1。

②若(AL)中高4位>9或CF=1,则(AL)←(AL)+60H,并使CF=1。

DAA指令应用举例:

例:

试编程,计算48+27=?

(要求计算结果为压缩BCD码)

程序如下:

MOVAL,48H

ADDAL,27H

DAA

上第二条指令的计算过程为:

01001000

+00100111

01101111

DAA指令调整过程为:

01101111

+00000110

01110101(注意,如调整中出现半进位或进位,不再调整)

结果:

(AL)=75H,AF=1,CF=0。

DAA指令影响除OF以外的其余5个状态标志。

(2)非压缩BCD码加法的十进制调整指令AAA(ASCIIadjustforaddition)

指令格式为:

AAA

AAA指令用于对两个非压缩BCD码数相加之和(结果在AL中)进行调整,形成一个正确的扩展BCD码,调整后,结果和的低位在AL中,高位在AH中。

调整步骤为:

①若(AL)中低4位>9或AF=1,则(AL)←(AL)+06H,(AH)+1,并使AF=1。

②屏蔽掉(AL)中的高4位,即(AL)←(AL)∧0FH。

③CF←AF

AAA指令应用举例:

例:

试编程,计算9+4=?

(要求计算结果为非压缩BCD码)

程序如下:

MOVAL,09H;BCD码数9送AL

MOVBL,04H;BCD码数4送BL

ADDAL,BL;(AL)=09H+04H=0DH

AAA;调整后,(AL)=03H(即0DH+06H)∧0FH=03H,(AH)=1,

;CF=1

AAA指令只影响AF和CF标志。

注意:

DAA和AAA指令都必须紧跟在ADD指令或ADC指令后执行,且ADD或ADC指令的执行结果都必须放在AL中。

2)减法的十进制调整指令

减法的十进制调整也分为压缩BCD码和非压缩BCD码两种。

(1)压缩BCD码减法的十进制调整指令DAS(desimaladjustforsubtraction)

指令格式为

DAS

DAS指令用于对两个压缩BCD码数相减后的结果(在AL中)进行调整。

产生正确的压缩BCD码运算结果。

调整方法如下:

①若(AL)中低4位>9或AF=1,则(AL)←(AL)-06H,并使AF=1。

②若(AL)中高4位>9或CF=1,则(AL)←(AL)-60H,并使CF=1。

DAS指令对标志位的影响与DAA指令相同。

(2)非压缩BCD码减法的十进制调整指令AAS(ASCIIadjustforsubtraction)

指令格式为

AAS

AAS指令用于对两个非压缩BCD码数相减后的结果(在AL中)进行调整。

形成一个正确的非压缩BCD码,其低位在AL中,高位在AH中,调整步骤为:

①若(AL)中低4位>9或AF=1,则(AL)←(AL)-06H,(AH)←(AH)-1,并使AF=1。

②屏蔽掉(AL)中的高4位,即(AL)←(AL)∧0FH。

③CF←AF

AAS指令对标志位的影响与AAA指令相同。

注意:

DAS和AAA指令也必须紧跟在减法指令SUB指令或SBB后执行,且SUB或SBB指令的执行结果也都必须放在AL中。

3)乘法的十进制调整指令AAM(ASCIIadjustformultiplication)

指令格式为:

AAM

AAM指令是非压缩BCD码的十进制调整指令。

对两个非压缩BCD码数相乘的结果(在AL中)进行调整,以得到正确的运算结果。

AAM指令的操作为:

(AH)←(AL)/0AH

(AL)←(AL)%0AH

即将AL寄存器的内容除以OAH,商放在AH中,余数放在AL中。

AAM指令实质上是把AL中的二进制数转换为其对应的十进制数。

对于十进制值不超过99的二进制数,只要用一条AAM指令即可实现二-十进制转换。

AAM指令影响PF、SF和ZF标志。

执行AAM指令前需先有一条MUL指令(BCD码数总看作无符号数)将两个非压缩BCD码相乘,结果放在AL中,后用AAM指令进行调整,在AX中得到正确的非压缩BCD码乘积,积的高位在AH种,低位在AL中。

AAM指令应用举例:

例:

试编程,计算7×9=?

(要求计算结果为非压缩BCD码数)

程序如下:

MOVAL,07H;非压缩BCD码数07H送AL

MOVBL,09H;非压缩BCD码数09H送BL

MULBL;两BCD码数相乘(AX)=07H×09H=003FH

AAM;(AX)=0603H(即非压缩BCD码数63),SF=0,ZF=0,

;PF=1

4)除法的十进制调整指令AAD(ASCIIadjustfordivision)

指令格式为:

AAD

AAD指令其实质是在两个非压缩BCD码相除之前,先行对被除数(在AX中)进行调整,然后再执行DIV指令。

AAD指令的操作为:

(AL)←(AH)*10+(AL)

(AH)←0

即把AX中的非压缩BCD码(十位数放在AH,个位数放在AL)调整为二进制数,并将结果置于AL中(即AAD指令可将不超过99的十进制数转换为二进制数)。

AAD指令影响PF、SF和ZF标志。

AAD指令应用举例:

例:

试编程,计算23÷4=?

(要求计算结果为非压缩BCD码数)

程序如下:

MOVAX,0203H;将0203H(非压缩BCD码数23)置于AX中

MOVBL,4;将04H(非压缩BCD码数4)置于BL中

AAD;进行调整:

(AX)=02H×0AH+03H=0017H

DIVBL;(AH)=03H,(AL)=05H,即结果商为5,余数为3

对于各种二-十进制调整指令归纳,见P.126表3-6。

3.3.3逻辑运算和移位指令

这一类指令包括逻辑运算和移位指令两大部分。

1.逻辑运算指令

8088/8086提供5条逻辑运算指令。

包括AND(逻辑“与”),OR(逻辑“或”),NOT(逻辑“非”),XOR(逻辑“异或”)及TEST(测试)指令。

这些指令均可对8位和16位的寄存器和存储器内容进行按位操作。

除NOT指令对所有的标志为均无影响外,其余指令都会使CF=OF=0,AF值不定,而对PF、SF和ZF产生影响。

(1)逻辑“与”指令AND(and)

指令格式为

ANDOPRD1,OPRD2;(OPRD1)←(OPRD1)∧(OPRD2)

AND指令把源操作数和目标操作数按位相“与”,结果送回目标操作数中。

其中源操作数可为立即数,寄存器操作数和存储器操作数,而目标操作数只能是后两者。

例如:

ANDAL,0FH;AL的内容与OFH相

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

当前位置:首页 > 经管营销

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

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