计算机接口技术教案5.docx
- 文档编号:5729520
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:34
- 大小:30.79KB
计算机接口技术教案5.docx
《计算机接口技术教案5.docx》由会员分享,可在线阅读,更多相关《计算机接口技术教案5.docx(34页珍藏版)》请在冰豆网上搜索。
计算机接口技术教案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相
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 接口 技术 教案