微机原理课件第6讲(电子ok)_第1页
微机原理课件第6讲(电子ok)_第2页
微机原理课件第6讲(电子ok)_第3页
微机原理课件第6讲(电子ok)_第4页
微机原理课件第6讲(电子ok)_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章8086的寻址方式和指令系统

第6讲教学目的和要求【教学目标】通过8086指令结构的讲解,使学生了解并掌握乘法、除法类指令、逻辑运算类指令和移位指令的结构、功能和使用方法。【教学重点】①乘法指令;②移位指令;【教学难点】算术运算指令和逻辑运算指令的区别。乘法指令指令含义时钟数MUL无符号数乘法70~139+EAIMUL整数乘法80~160+EAAAM乘法的ASCII调整83①MUL无符号数乘法指令MUL无符号数乘法指令

(Multiplyunsigned)格式

MULsrc。功能

将源操作数和累加器中的数都当成无符号数,然后将两数相乘,src可以是字(0~65535)和字节(0~255)。操作数要求可以是寄存器、存储单元,但不能是立即数;源操作数是存储单元时,必须在操作数前加B或W说明是字节还是字。①MUL无符号数乘法指令运算情况

源操作数是一个字节源操作数与累加器AL中的内容相乘,乘积为双倍长的16位数,高8位送到AH,低8位送AL。即

AX

AL×源。AL被乘数8位操作数乘数×8位AX乘积16位①MUL无符号数乘法指令运算情况

源操作数是一个字源操作数与累加器AX的内容相乘,结果为32位数,高位字放在DX寄存器中,低位字放在AX寄存器中。即

(DX,AX)

AX×源AX被乘数16位操作数乘数×16位AX乘积32位DX

举例MULCL ;AL乘CL,结果在AX中MULBX;AX乘BX,结果在DX:AX中MULBYTE[DI];AL乘存储器(8位),结果在AX中MULWORD[BX];AX乘存储器字,结果在DX:AX中

如果运算结果的高半部分(在AH或DX中)为零,则状态标志位(CF)=(OF)=0,否则(CF)=(OF)=1。因此,状态标志位(CF)=(OF)=1,表示AH或DX中包含着乘积的有效位。

①MUL无符号数乘法指令

举例

MOV AL,14H ;(AL)=14H--20 MOV CL,05H ;(CL)=05H--5 MUL CL ;(AX)=0064H--100

本例中结果的高半部分(AH)=0,因此,状态标志位(CF)=(OF)=0,通过检测标志,可以去除结果中的前导无效零。

有了乘法(和除法)指令,使有些运算程序的编程变得简单方便。但是必须注意,乘法指令的执行速度很慢,除法指令也是如此。①MUL无符号数乘法指令②IMUL整数乘法指令IMUL整数乘法指令

(IntegerMultiply)格式

IMULsrc。功能

将源操作数和累加器中的数都当成有符号数,然后将两数相乘,src可以是字(-32768~32767)和字节(-128~127)。操作数要求和运算情况

与MUL要求相同。

举例IMULCL ;AL乘CL,结果在AX中IMULBX;AX乘BX,结果在DX:AX中IMULBYTE[DI];AL乘存储器(8位),结果在AX中IMULWORD[BX];AX乘存储器字,结果在DX:AX中

如果运算结果的高半部分(在AH或DX中)为0或1,则状态标志位(CF)=(OF)=0,否则(CF)=(OF)=1。因此,状态标志位(CF)=(OF)=1,表示AH或DX中包含着乘积的有效位。为0,则表示高半部分是符号扩展。

②IMUL整数乘法指令正数,AH或DX为全0负数,AH或DX为全1

举例

MOV AX,04E8H;(AX)=04E8H MOV BX,4E20H;(BX)=4E20H IMUL BX ;(DX:AX)=(AX)

(BX)以上指令的执行结果为:(DX)=017FH,(AX)=4D00H,且(CF)=(OF)=1。实际上,以上指令完成带符号数+1256和+20000的乘法运算,得到乘积为+25120000。由于此时DX中结果的高半部分包含着乘积的有效数字,故状态标志位(CF)=(OF)=1。②IMUL整数乘法指令③AAM乘法的ASCII调整指令AAM乘法的ASCII调整指令(ASCIIAdjustforMultiply)格式

AAM。功能

对AL中的两个非压缩十进制数相乘的乘积进行十进制数的调整,在AX中得到正确的非压缩十进制数的乘积,高位在AH中,低位在AL中。调整的过程

把AL寄存器内容除以10,商放在AH中,余数在AL中。即:AH

AL/10所得的商;AL

AL/10所得的余数.③AAM乘法的ASCII调整指令举例

求两个非压缩十进制数08和04之乘积。解:MOVAL,08H;置初值

MOVBL,04HMULBL;AL

08与04之乘积20HAAM;

调整得AH=03H(十位),AL=02H(个位)

结果:AX=0302H,即BCD数32。

若想转换成ASCII码,需再执行

ORAX,3030H除法指令指令含义时钟数DIV无符号除法80~168+EAIDIV整数除法101~190+EAAAD除法的ASCII调整60CBW把字节转换成字2CWD把字转换成双字5①DIV无符号数除法指令DIV无符号数除法指令

(Divisionunsigned)格式

DIVsrc。功能

将两个无符号数相除,被除数的长度必须是除数长度的两倍,若不够,必须扩展被除数的长度。操作数要求可以是寄存器、存储单元,但不能是立即数;源操作数是存储单元时,必须在操作数前加B或W说明是字节还是字。①DIV无符号数除法指令运算情况

源操作数是一个字节

16位被除数必须放入AX中,src为8位。

AL

AX/src字节的商

AH

AX/src字节的余数

AX16位被除数操作数8位除数AL商

AH余数

①DIV无符号数除法指令运算情况

源操作数是一个字

32位被除数必须放入(DX,AX)中,src为16位。

AX

(DX,AX)/src字的商

DX

(DX,AX)/src字的余数

DX,AX32位被除数操作数16位除数AX商

DX余数

举例MOV AX,0F05H ;(AX)=0F05HMOV DX,068AH;(DX)=068AHMOV CX,08E9H;(CX)=08E9HDIV CX ;

运算完毕后,商(AX)=BBE1H,余数(DX)=073CH①DIV无符号数除法指令

注意事项

执行DIV指令时,如果除数为0,或字节除法时AL寄存器中的商大于FFH,或字除法时AX寄存器中的商大于FFFFH,则CPU立即自动产生一个类型号为0的内部中断。

①DIV无符号数除法指令②IDIV整数除法指令IDIV整数除法指令

(IntegerDivision)格式

IDIVsrc。功能

将两个带符号数相除,被除数的长度必须是除数长度的两倍,若不够,必须用CBW或CWD扩展被除数的长度。操作数要求与运算情况

同DIV。

注意事项

执行IDIV指令时,如果除数为0,或字节除法时AL寄存器中的商超出-128~127范围,或字除法时AX寄存器中的商超出-32768~32767范围,则CPU立即自动产生一个类型号为0的内部中断。

②IDIV整数除法指令②IDIV整数除法指令

关于余数的符号

在对有符号数进行除法运算时,例如-30除以8,可以得到商为-4,余数为+2;也可以得到商为-3,余数为-6,两结果都是正确的。

对于8086,规定余数的符号和被除数的符号相同,因此第二种结果是8086执行完以后的结果。被除数扩展问题无论是无符号数还是有符号数除法时,必须满足被除数长度是除数长度的两倍。当不够时,涉及到被除数的扩展。

无符号数:被除数的扩展比较简单,添上足够的零就可以了。以下指令将AL中的一个8位无符号数扩展成为16位,存放在AX中。

MOV AL,0FBH ;(AL)=11111011B XOR AH,AH ;(AH)=00000000B

有符号数:被除数的扩展必须根据各自的符号来完成,因此,需要借助指令CBW和CWD完成。③CBW把字节转换成字指令CBW把字节转换成字指令

(ConvertBytetoWord)格式

CBW。功能

把寄存器AL中字节的符号位扩充到AH的所有位。(AH被称为AL的符号扩充),不影响标志位。扩展方法

AL为正数(AL<80H)时,即D7=0时,使AH=00H。

AL为负数(AL>=80H)时,即D7=1时,使AH=0FFH。扩展方法MOVAL,4FH ;(AL)=01001111BCBW;

由于AL<80H,或者说AL为正数时,符号位为0,AH应补0,因此(AH)=00000000BMOVAL,0F4H ;(AL)=11110100B CBW ;

由于AL>7FH,或者说AL为负数时,符号位为1,AH应补1,因此(AH)=11111111B③CBW把字节转换成字指令④CWD把字转换成双字指令CWD把字转换成双字指令

(ConvertWordtoDoubleWord)格式

CWD。功能

把寄存器AX中字的符号位扩充到DX的所有位。扩展方法

AX为正数(AX<8000H)时,即D15=0时,使DX=0000H。

AX为负数(AX>7FFFH)时,即D15=1时,使DX=0FFFFH。

CBW和CWD指令在带符号数的乘法(IMUL)和除法(IDIV)运算中十分有用,在字节或字的运算之前,将AL或AX中数据的符号位进行扩展。例如:MOV AL,MUL_BYTE;(AL)←8位被乘数(带符号数)CBW ;扩展成为16位带符号数,在AX中IMUL BX;两个16位带符号数相乘,结果在DX:AX中

CBW和CWD⑤AAD除法的ASCII调整指令AAD除法的ASCII调整指令

(ASCIIAdjustforDivision)格式

AAD。功能

在做除法之前,将AX中BCD码转换成二进制数并存入AL中。调整过程

AL←AH×10+AL;AH←00。位运算指令(12条)①逻辑运算②循环移位NOT取反ROL循环左移AND与ROR循环右移OR或RCL通过进位的循环左移XOR异或RCR通过进位的循环右移TEST测试③算术逻辑移位SHL/SAL逻辑/算术左移SHR逻辑右移SAR算术右移

位操作指令是对8位或16位的寄存器或存储单元中的内容按位进行操作。逻辑运算指令命令含义时钟数NOT取反3~16+EAAND与3~17+EAOR或3~16+EAXOR异或3~17+EATEST测试3~11+EA①NOT取反指令NOT取反指令

(LogicalNot)格式

NOTdst。功能

dst←dst取反,执行完后不影响标志位。操作数要求①可以是8位或16位寄存器、存储器。②对于存储器操作,需指明是字还是字节。②AND逻辑与指令AND逻辑与指令

(LogicalAND)格式

ANDdst,src。src可以是立即数。功能

dst←dst∧src,执行完后影响标志位。主要用于使操作数的某些位保留(和“1”相与),而使某些位清除(和“0”相与)。操作数要求①可以是8位或16位寄存器、存储器,不能同时为men。②对于存储器操作,需指明是字还是字节。③OR逻辑或指令OR逻辑或指令

(LogicalOR)格式

ORdst,src。src可以是立即数。功能

dst←dst∨src,执行完后影响标志位。主要用于使操作数的某些位保留(和“0”相或),而使某些位置1(和“0”相或)。操作数要求①可以是8位或16位寄存器、存储器,不能同时为men。②对于存储器操作,需指明是字还是字节。AND,OR,NOT举例举例

MOVAL,35H;AL=0011,0101BANDAL,0FH;

∧0000,1111B,得AL=05HORAL,70H;

0111,0000B,得AL=75HNOTAL;

取反得1000,1010B,即AL=8AH④XOR异或指令XOR异或指令

(ExclusiveOR)格式

XORdst,src。src可以是立即数。功能

dst←dst⊕src,执行完后影响标志位。主要用于使操作数的某些位保留(和“0”相异或),而使某些位取反(和“1”相异或)。操作数要求

①可以是8位或16位reg、men,不能同时为men。

②对于存储器操作,需指明是字还是字节。⑤TEST测试指令TEST测试指令

(Test)格式

TESTdst,src。src可以是立即数。功能

dst∧src,执行完后影响标志位。但是与完后的结果不回送。主要用于对某些位数据的检测,编程时,其后往往紧跟条件转移指令。操作数要求①可以是8位或16位寄存器、存储器,不能同时为men。②对于存储器操作,需指明是字还是字节。逻辑运算指令总结

除了NOT指令外,其他指令都影响状态标志位。这些指令将根据各自逻辑运算的结果影响SF、ZF和PF状态标志位,同时将CF和OF置“0”,但AF的值不确定。

算术逻辑移位指令命令含义时钟数SHL/SAL逻辑/算术左移2~20+EA+4*位SHR逻辑右移2~20+EA+4*位SAR算术右移2~20+EA+4*位①SHL/SAL逻辑算术左移指令SHL/SAL逻辑算术左移指令

(ShiftLogic/ArithmeticLeft)格式

SHL/SALdst,1/CL。功能

将寄存器或存储器中的目的操作数的各位左移,每移一次,最低有效位LSB补0,而最高有效位MSB进入标志位CF。MSBLSB……0CF①SHL/SAL逻辑算术左移指令举例MOVAH,06H;AH=06H=00000110BSALAH,1;将AH的内容左移1次,AH=

00001100BMOVCL,03HSHLDI,CL;将DI的内容左移3次SALBYTEPTR[BX];将内存单元的字节左移1位

左移一次,相当于乘以2,仅移位一次时,可以直接用立即数表示,否则,移位次数必须送入CL中。②SHR逻辑右移指令SHR逻辑右移指令

(ShiftLogicRight)格式

SHRdst,1/CL。功能

各位进行右移。每移一次,低位进入CF,最高位补0。MSBLSB……0CF②SHR逻辑右移指令说明

若目的操作数为无符号数,每右移一次,目的操作数除以2,余数被丢掉。举例用右移的方法作除法133/8=16…5。解:MOVAL,10000101B;AL=133MOVCL,03H;CL=移位次数SHRAL,CL;右移3次指令执行后,AL=10H=16,余数5被丢失。标志位CF、AF不定。③SAR算术右移指令SAR算术右移指令

(ShiftArithmeticRight)格式

SARdst,1/CL。功能

各位进行右移。每移一次,低位进入CF,最高位保持不变。所谓算术和逻辑的区别就是在右移时,是补符号位还是零。MSBLSB……CF③SAR算术右移指令说明

若目的操作数为带符号数,每右移一次,目的操作数除以2,余数被丢掉。举例用右移的方法作除法-128/8=-16。解:

MOVAL,10000000B;AL=-128

MOVCL,03H;CL=移位次数

SHRAL,CL;右移3次指令执行后,AL=1111,0000B=0F0H=-16。循环移位指令命令含义时钟数ROL循环左移2~20+EA+4*位ROR循环右移2~20+EA+4*位RCL通过进位的循环左移2~20+EA+4*位RCR通过进位的循环右移2~20+EA+4*位①R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论