微型计算机技术陈慈发第8讲算术运算指令_第1页
微型计算机技术陈慈发第8讲算术运算指令_第2页
微型计算机技术陈慈发第8讲算术运算指令_第3页
微型计算机技术陈慈发第8讲算术运算指令_第4页
微型计算机技术陈慈发第8讲算术运算指令_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

微机技术第八讲三峡大学覃颖0717-6390287inying@本讲课堂讲授内容:8086CPU的指令系统(算术运算指令)算术运算指令实现加、减、乘、除运算,包括无符号数和有符号数的8位和16位二进制运算以及无符号数的BCD码运算和BCD码调整。大部分指令影响标志寄存器中的状态标志位。算术运算指令8086算术运算指令共20条,其中包括:加法运算指令(3条)减法运算指令(5条)乘法运算指令(2条)除法运算指令(2条)符号扩展指令(2条)BCD码调整指令(6条)加法运算指令1、不带进位加法指令ADD格式:ADDd,s功能:(d)←

(d)+(s)说明:将目的操作数d与源操作数s相加,结果送回d中

。【例】ADDAX,2012HADD[BP+DI-6],CLADDSI,[BX]AX,BXCX,DXSP,BPSI,DIAH,ALBH,BLCH,CLDH,DL内存立即数看图说话:想一想你会构造哪些非法指令?加法运算指令1、不带进位加法指令ADD影响全部状态标志位【例】试判断在执行如下指令序列后的6个状态标志。

MOVAX,8C21HADDAX,4178H10001100001000010100000101111000+1100110110011001CF=0ZF=0PF=1SF=1AF=0OF=0加法运算指令2、带进位加法指令ADC格式:ADCd,s功能:(d)←(d)+(s)+CF说明:将目的操作数d与源操作数s和进位标志CF相加,结果送回d中。该指令主要应用于多字节数据的分段加法运算。该指令的格式及对标志的影响同ADD指令。加法运算指令2、带进位加法指令ADC【例】双字加法,设有两个32位数分别放在DX:AX和BX:CX中,求(DX:AX)+(BX:CX)=?【编程实现】ADDAX,CXADCDX,BX加法运算指令3、加1指令INC格式:INCd功能:(d)←(d)+1说明:将目的操作数d加1,结果送回d中。该指令不影响CF标志,影响其它状态标志。【例】设指令执行前CF=0,AL=FFH

在执行指令INCAL后:

AL=(),CF=(),ZF=()00H01加法运算指令3、加1指令INC容易出错:操作数是存储器操作数时,必须指定类型。INC[BX]正确实现:

或:INCWORDPTR[BX]INCBYTEPTR[BX]减法运算指令4、不带进位减法指令SUB格式:SUBd,s功能:(d)←(d)-(s)说明:将目的操作数d与源操作数s相减结果送回d中。该指令的格式及对标志的影响同ADD指令。减法运算指令5、带进位减法指令SBB格式:SBBd,s功能:(d)←(d)-(s)-CF说明:将目的操作数d与源操作数s和进位标志CF相减,结果送回d中。该指令主要应用于多字节数据的分段减法运算。该指令的格式及对标志的影响同SUB指令。减法运算指令6、减1指令DEC格式:DECd功能:(d)←(d)-1说明:将目的操作数d减1,结果送回d中。该指令不影响CF标志,影响其它状态标志。减法运算指令7、取负指令NEG格式:NEGd说明:将目的操作数d取负后送回d中。【例】设AX=00FFH,则

NEG AX

;AX=()

NEG

AL ;AL=()功能:(d)←(d)+1FF01H01H减法运算指令8、比较指令CMP格式:CMPd,s功能:(d)–(s)说明:仅将目的操作数d与源操作数s相减,结果并不送回d中。该指令只影响标志,不改变操作数。该指令常用于比较后进行条件转移的分支结构中。CMPAL,0 ;将AL与0比较JGGT0 ;如果大于0则跳转(JNGLT0 ;如果小于0则跳转)乘法运算指令9、无符号数乘法指令MUL格式:MULs功能:当s为字节数据时AX←AL×s当s为字数据时DX:AX←AX×s说明:将无符号的源操作数s与累加器相乘,结果送回AX或DX:AX中。【例】MULCL;AX←AL×CLMULBX;DX:AX←AX×BXMULBYTEPTR[BX];AX←AL×(DS:[BX])乘法运算指令9、无符号数乘法指令MUL注意:指令格式上是单操作数,但被乘数必须预先准备在默认的累加寄存器AL或AX中。对标志的影响:仅影响CF和OF,其它标志无意义。CF=0OF=0:表示乘积的高半部分为0CF=1OF=1:表示乘积的高半部分不为0乘法运算指令9、无符号数乘法指令MUL容易出错:操作数是存储器操作数时,必须指定类型。MUL[SI]正确实现:

或:MULWORDPTR[SI]MULBYTEPTR[SI]s只能是通用寄存器或存储器操作数。MULESMULWORDPTR200H乘法运算指令10、有符号数乘法指令IMUL格式:IMULs功能:当s为字节数据时AX←AL×s当s为字数据时DX:AX←AX×s说明:将有符号的源操作数s与累加器相乘,结果送回AX或DX:AX中。【例】IMULCL;AX←AL×CLIMULBX;DX:AX←AX×BXIMULBYTEPTR[BX];AX←AL×(DS:[BX])乘法运算指令10、有符号数乘法指令IMUL指令格式上及功能操作上与MUL相同。对标志的影响:仅影响CF和OF,其它标志无意义。CF/OF=00:表示乘积的高半部分为符号位扩展。CF/OF=11:表示乘积的高半部分为有效数据。除法运算指令11、无符号数除法指令DIV格式:DIVs功能:s为字节:AL←AX/s,AH←AX%s

s为字:AX←DX:AX/s,DX←DX:AX%s说明:将被除数AX或DX:AX与无符号的源操作数s相除,商送回AL或AX,余数送回AH或DX中。【例】DIVCL;AH:AL←AX/CLDIVBX;DX:AX←DX:AX/BXDIVBYTEPTR[BX];AH:AL←AX/(DS:[BX])除法运算指令11、无符号数除法指令DIV对标志的影响:所有状态标志均无定义。商溢出错时,自动产生除法出错中断(INT0),此时商和余数都不确定。s只能是通用寄存器或存储器操作数,不能是段寄存器或立即数。除法运算指令12、有符号数除法指令IDIV格式:IDIVs功能:同DIV,只是针对有符号数。有符号数除法的余数可以为正也可以为负。例如,-17除以+5,可以是商为-3余数为-2,也可以是商为-4余数为+3。为了避免结果的不唯一性,IDIV指令规定余数的符号必须和被除数的符号相同。符号扩展指令13、字节符号扩展指令CBW格式:CBW功能:若AL7=0,AH=00000000B=00H若AL7=1,AH=11111111B=FFH说明:将AL中的8位有符号数进行符号扩展,变为同大小的16位有符号数存放在AX中。符号扩展指令不影响标志。符号扩展指令13、字节符号扩展指令CBW该指令主要用于有符号数除法指令前对被除数进行扩展以达到除法指令中对被除数位数的要求。【例】设AL和BL中有两个8位有符号数,求AL÷BL【编程实现】CBW;AX←(扩展)AL

IDIVBL;AH:AL←AX/BL

符号扩展指令14、字符号扩展指令CWD格式:CWD功能:若AX15=0,则DX=0000H若AX15=1,则DX=FFFFH说明:将AX中的16位有符号数进行符号扩展,变为同大小的32位有符号数存放在DX:AX中。符号扩展指令不影响标志。BCD码调整指令15、加法的压缩BCD码调整指令DAA格式:DAA功能:对AL中的压缩BCD码加法结果进行调整。说明:必须紧跟在ADD或ADC指令后出现。AL为隐含操作数,且为压缩BCD码。对标志的影响:除OF不确定外,其余标志均受影响。其中CF=1表示结果大于99BCD码调整指令15、加法的压缩BCD码调整指令DAA【调整算法】AL低4位>9AF=1AL←

AL+06H调整算法AL高4位>9CF=1AL←

AL+60HBCD码调整指令15、加法的压缩BCD码调整指令DAA【例】设AL=25H,BL=37H,问执行下列指令后,AL=?CF=?

ADD AL,BL DAA00100101+0011011101011100大于9+06H修正01011100+0000011001100010AL=62HCF=0BCD码调整指令15、加法的压缩BCD码调整指令DAA【例】CPU执行下列指令后,AL=?CF=?

MOVAL,68H

ADD AL,89H DAA01101000+100010011111

0001AF=1+66H修正1111

0001+01100110101010111AL=57HCF=1大于9CF=1BCD码调整指令15、加法的压缩BCD码调整指令DAA【例】设AX和BX中存放着两个4位的压缩BCD码,求两数之和,并将和放在AX中。【错误编程1】ADDAX,BXDAA【错误编程2】ADDAL,BLDAAADCAH,BHDAA【正确实现】ADDAL,BLDAAADCAL,BHDAAXCHGAL,AHXCHGAL,AHBCD码调整指令16、加法的非压缩BCD码调整指令AAA格式:AAA功能:对AL中的非压缩BCD码加法结果进行调整。说明:必须紧跟在ADD或ADC指令后出现。AL/AH为隐含操作数,且为非压缩BCD码。对标志的影响:影响AF、CF,其余标志不受影响。BCD码调整指令16、加法的非压缩BCD码调整指令AAA【调整算法】如果:AL低4位>9或AF=1,则执行:AL

AL+06HAH←

AH+1AL

ALAND0FHAF=CF=1否则执行:AL

ALAND0FHAF=CF=0BCD码调整指令16、加法的非压缩BCD码调整指令AAA【例】设AX=0339H,BL=36H,问执行下列指令后,AX=(),CF=()

ADD AL,BL AAA0405H1【答】AL←AL+BL=39H+36H=6FH由于AL低四位1111>9,所以AAA执行如下调整:AL←AL+06H=6FH+06H=75HAH←AH+1=03H+01H=04HAL←ALAND0FH=75HAND0FH=05HAF=CF=1BCD码调整指令17、减法的压缩BCD码调整指令DAS格式:DAS功能:对AL中的压缩BCD码减法结果进行调整。说明:必须紧跟在SUB或SBB指令后出现。AL为隐含操作数,且为压缩BCD码。对标志的影响:除OF不确定外,其余标志均受影响。其中CF=1表示结果小于0BCD码调整指令17、减法的压缩BCD码调整指令DAS【调整算法】AL低4位>9AF=1AL←

AL-06H调整算法AL高4位>9CF=1AL←

AL-60HBCD码调整指令17、减法的压缩BCD码调整指令DAS【例】CPU执行下列指令后,AL=?CF=?

MOVAL,34H

SUB AL,89H DAS00110100-100010011010

1011大于9且AF=1-66H修正1010

1011-01100110

01000101AL=45HCF=1大于9且CF=1BCD码调整指令18、减法的非压缩BCD码调整指令AAS格式:AAS功能:对AL中的非压缩BCD码减法结果进行调整。说明:必须紧跟在SUB或SBB指令后出现。AL/AH为隐含操作数,且为非压缩BCD码。对标志的影响:影响AF、CF,其余标志不受影响。BCD码调整指令18、减法的非压缩BCD码调整指令AAS【调整算法】如果:AL低4位>9或AF=1,则执行:AL

AL-06HAH←

AH-1AL

ALAND0FHAF=CF=1否则执行:AL

ALAND0FHAF=CF=0BCD码调整指令18、减法的非压缩BCD码调整指令AAS【例】设AX=0531H,BL=09H,问执行下列指令后,AX=(),CF=()

SUB AL,BL AAS0402H1【答】AL←AL-BL=31H-09H=28H由于AF=1,所以AAA执行如下调整:AL←AL-06H=28H-06H=22HAH←AH-1=05H-01H=04HAL←ALAND0FH=22HAND0FH=02HAF=CF=1BCD码调整指令19、乘法的非压缩BCD码调整指令AAM格式:AAM功能:将AX中的内容调整为两位非压缩BCD码。说明:必须紧跟在MUL指令后出现。AX为隐含操作数,且只适用于字节乘后的调整。【例】MOVAX,0705HMULAH;AX←AL×AH=23HAAM;调整后AX=0305HBCD码调整指令20、除法的非压缩BCD码调整指令AAD格式:AAD功能:将AX中两位非压缩BCD码调整成二进制数。说明:必须出现在DIV指令之前。AX为隐含操作数,且只适用于非压缩BCD码的调整。【例】MOVAX,0205HMOVBL,04HAAD;AX=19HDIV

温馨提示

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

评论

0/150

提交评论