微机原理教案7-2_第1页
微机原理教案7-2_第2页
微机原理教案7-2_第3页
微机原理教案7-2_第4页
微机原理教案7-2_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

算术运算指令有5类指令:加法指令减法指令乘法指令除法指令十进制调整指令算术运算指令表2算术运算类指令一览表指令类型指令指令功能加法SUBd,sSBBd,sDECdNEGdCMPd,s加法(d)(d)+(s)带进位加法(d)(d)+(s)+CF加1(d)(d)+1减法ADDd,sADCd,sINCd减法(d)(d)-(s)带借位减法(d)(d)-(s)-CF减1(d)(d)-1取负(求补)(d)0-(d)比较(d)-(s)乘法MULsIMULs无符号数乘法带符号数乘法字节:(AX)(AL)*(s)字:(DX:AX)(AX)*(s)算术运算指令表2算术运算类指令一览表(续

)指令类型指令指令功能除法DIVsIDIVsCBWCWD无符号数除法带符号数除法字节扩展成字字扩展成双字字节:(AL)(AX)/(s)的商

(AH)(AX)/(s)余数字:

(AX)

(DX:AX)/(s)的商

(DX)

(DX:AX)/(s)余数AL的符号位扩展至AHAX的符号位扩展至DX十进制调整AAADAAAASDASAAMAAD加法分离BCD码调整加法组合BCD码调整减法分离BCD码调整减法组合BCD码调整乘法分离BCD码调整减法分离BCD码调整加法指令共3条:ADD加法ADC带进位加法INC加1指令加法指令ADD指令

基本格式和功能指令格式:

ADDDST,SRC执行的操作:

(DST)←(DST)+(SRC)寻址方式:

ADDmem/reg,mem/reg/data加法指令ADD指令

说明相加操作影响标志位OF、SF、ZF、AF、PF、CF。src可以为通用寄存器、存储器或立即数。dest可以是通用寄存器或存储器,但不能是立即数。src

和dest不能同时为存储器操作数。src

和dest不能使用段寄存器。可进行8位或者16位的加法,但d与s长度要相同。相加后源操作数不变。加法指令ADD指令

例子例1:指令举例:

ADDAX,0FF00HADDBytePTR[SI],13HADDAX,BX例2:错误的指令:

ADDAX,BLADD[SI+3],[BX][DI]ADDDS,DX加法指令ADC指令

基本格式和功能指令格式:

ADCDST,SRC执行的操作:

(DST)

←(DST)+(SRC)+CF寻址方式:

ADCmem/reg,mem/reg/data

加法指令ADC指令

说明与ADD指令一样,ADC同样影响6个状态标志位。其中CF在指令中参与计算,计算后根据结果重新设置CF的值。加法指令ADC指令

用途ADC指令常用在多字节数相加的场合,利用CF把低字节的进位加到高字节中去。加法指令ADC指令

•例子例:用指令实现以下两个32位数的相加运算:

107C932AH+55667788H解:

MOVAX,932AHMOVBX,107CHADDAX,7788HADCBX,5566H加法指令INC指令

基本格式和功能指令格式:

INC

dest执行的操作:

(dest)←(dest)+1寻址方式:

INCmem/reg加法指令INC指令

基本格式和功能目的操作数dest可以是8位或16位通用寄存器或存储单元,但不能为立即数。指令执行时把操作数看成是无符号数,加1后设置PF,AF,ZF,SF和OF,但特别要注意,INC指令不影响CF。加法指令INC指令

基本格式和功能例1:AL=05H,则INCAL后,AL=06H例2:AX=0FFFFH,则INCAX后,AX=?答案:AX=0000H减法指令共5条:

SUB减法

SBB带借位减

CMP比较

DEC减1指令

NEG求补指令

减法指令SUB,SBB和CMP指令

基本格式和功能指令格式:

SUB/SBB/CMPDST,SRC执行的操作:

SUB:(DST)←(DST)-(SRC)SBB:(DST)←(DST)-(SRC)-CF

CMP:(DST)-(SRC)

不保存结果,但影响各标志位

减法指令SUB,SBB和CMP指令

基本格式和功能寻址方式:

SUB(SBB,CMP)mem/reg,mem/regSUB(SBB,CMP)mem/reg,data说明:d和s不能同为存储器操作数d不能为立即数。减法指令SUB,SBB和CMP指令

一些说明这三条指令均可进行字节或字的减法运算;均影响所有6个状态标志位;SBB指令主要用于大于16位的减法,利用CF把低位部分产生的借位引入高位部分的减法中。减法指令SUB与SBB指令

例子例:写指令,完成32位减法:

12345678H-0123ABCDH参考答案:

movax,5678H

mov

bx,1234Hsubax,0ABCDH

sbb

bx,0123H减法指令CMP指令

一些说明CMP指令执行后,d与s均保持不变;CMP指令常用于判断2个数的大小;进行大小比较时,无符号数与有符号数有不同的判断依据:无符号数有符号数ZF=1d=sOFSF=0dsZF=0CF=0d>sCF=1d<sOFSF=1d<s减法指令DEC指令

基本格式和功能指令格式:

DECd执行的操作:

(d)←(d)-1影响标志位:

与INC指令一样,不影响CF标志,但影响其它5个状态标志。减法指令NEG指令

基本格式和功能指令格式:

NEGd功能:

(d)0-(d)减法指令NEG指令

说明说明:d可以是8位或16位寄存器或存储器操作数;不能是立即数或段寄存器。NEG指令影响6个状态标志位,指令执行后,CF被置1,SF、ZF、OF、PF、AF根据NEG的结果取值。减法指令NEG指令

•例子例:设AL=00000100=+4,则执行指令

NEGAL

后,AL=11111100=[-4]补乘法指令共两条指令

MUL无符号数乘法

IMUL有符号数乘法乘法指令MUL指令

基本格式和功能指令格式:

MUL

s功能:字节乘法:(AX)(AL)*(s)字乘法:(DX:AX)(AX)*(s)

乘法指令MUL指令

•说明说明:此指令为无符号数乘法指令,不能用于有符号数相乘,否则结果可能错误。影响标志位情况:若运算结果的高位字节或高位字有效,即AH0或DX0,则将CF和OF同时置1,其他位任意。S可为8/16位通用寄存器或存储器操作数,不允许为立即数。乘法指令MUL指令

例子例1:计算两个无符号数12H×56H,请写出指令序列。解:

MOVAL,12HMOVBL,56HMULBL乘法指令MUL指令

例子例2:计算两个无符号数1234H×5678H,请写出指令序列。解:

MOVAX,1234HMOVBX,5678HMULBX乘法指令IMUL指令

基本格式和功能指令格式:

IMUL

s功能&说明:具体功能与MUL指令类似;但此指令为有符号数相乘指令,它完成两个带符号的8/16位二进制数乘的功能。寻址方式要求、标志位影响均与MUL指令相同。乘法指令IMUL指令

例子例:计算两个有符号数0F2H×56H,请写出指令序列。解:

MOVAL,0F2HMOVBL,56HIMULBL注意:程序运行后AX中的内容不是514CH,也不是04B4H,而是0FB4CH除法指令共4条相关指令DIV无符号数除法IDIV有符号数除法CBW符号扩展,字节扩展为字CWD符号扩展,字扩展为双字除法指令DIV和IDIV指令

基本格式和功能指令格式:

DIVS

IDIVS执行的操作:字节字(AL)(AX)/(S)的商(AH)(AX)/(S)的余数(AX)(DX:AX)/(S)的商(DX)(DX:AX)/(S)的余数除法指令DIV和IDIV指令

说明与标志位的关系:除法指令对标志位的影响不确定,而且这些影响没有意义。寻址方式:

DIVmem/regIDIVmem/reg

S可以是8/16位的通用寄存器或存储器操作数,但不能为立即数或段寄存器。除法指令DIV和IDIV指令

说明DIV用于无符号数除法,IDIV用于有符号数除法。除法是字还是字节除法,由S的宽度决定。若除法运算所得的商数超出累加器的容量,则系统将其当作除数为0处理,自动产生类型0中断,CPU转去执行类型0中断服务程序作适当处理,此时所得商数和余数均无效。除法指令DIV和

IDIV指令

例子例:进行无符号数除法:20017,写出指令。解:

MOVAX,00C8HMOVBL,11HDIVBL除法指令DIV和IDIV指令

例子例:进行有符号数除法:(-3200)(+269),写出指令。解:

MOVAX,0C80HNEGAX;MOVAX,F380H也可以

MOVDX,0FFFFH;用CWD指令更准确

MOVBX,010DHIDIVBX除法指令•符号扩展指令CBW和CWD指令

基本格式和功能格式:

CBW

CWD功能:CBW:将AL中的符号位扩展到AHCWD:将AX中的符号位扩展到DX除法指令•符号扩展指令CBW和CWD指令

说明除法指令的被除数的数据宽度应该是除数的2倍。当被除数宽度不够时,必须进行扩展,例如:要用存放在AX中的数65535除以存放BX中的数256,需要把AX中的被除数扩展为32位,为此,只要(DX)←0即可。但有符号数除法,情况更复杂一些,扩展时必须考虑符号。有符号数的最高位是符号位,扩展时,只需用其填充扩展累加器的高位即可。十进制调整指令共六条:AAA分离BCD码的加法十进制调整DAA组合BCD码的加法十进制调整AAS分离BCD码的减法十进制调整DAS组合BCD码的减法十进制调整AAM乘法的十进制调整(分离BCD码)AAD除法的十进制调整(分离BCD码)十进制调整指令DAA指令

基本格式和功能格式:

DAA功能:进行组合BCD码加法调整。十进制调整指令DAA指令

说明DAA指令对AL中的组合型BCD码(1个字节2个码)进行调整(仅对AL进行调整)当AL中的运算结果出现非法码或产生半进位或进位时,DAA自动加6修正。DAA必须紧跟在ADD或ADC指令之后使用。DAA指令影响SF、ZF、AF、PF、CF,而OF的值任意。十进制调整指令DAA指令

例子例:设AX=6698H,BX=2877H,它们均为组合型BCD码。请写出能正确实现AX+BX的指令序列。(运算结果放回AX中。)解:

ADDAL,BL;低字节相加

DAA;低字节调整

MOVCL,ALMOVAL,AHADCAL,BH;高字节相加

DAA;高字节调整

MOVAH,ALMOVAL,CL十进制调整指令DAS指令

基本格式和功能格式:

DAS功能:进行组合BCD码减法调整。除了是对减法进行修正外,其余均与DAA指令类似。

十进制调整指令AAA和AAS指令

基本格式和功能格式:

AAAAAS功能:对AL中的分离BCD码加法/减法运算的结果进行二——十进制修正。十进制调整指令AAA和AAS指令

说明AAA和AAS指令负责把AL中的结果调整为正确的分离型BCD码,

AL中高四位清零,调整后结果仍保留在AL中;低四位如果向高四位有进/借位(AF=1),则传递到AH中。十进制调整指令AAM指令

基本格式和功能格式:

AAM功能:对AL中的乘

温馨提示

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

评论

0/150

提交评论