大综合课件微机原理上课章_第1页
大综合课件微机原理上课章_第2页
大综合课件微机原理上课章_第3页
大综合课件微机原理上课章_第4页
大综合课件微机原理上课章_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第三章程序设计3.1乘除法指令3.2BCD数调整指令3.3顺序程序设计3.4分支程序设计3.5循环程序设计进行乘法时:8位*8位→16位乘积 16位*16位→32位乘积(1)无符号数的乘法指令MUL(MEM/REG)格式:MULsrc操作:字节操作数(AX)

(AL)×(src)

字操作数(DX,AX)

(AX)×(src)指令例子:

MULBL;(AL)×(BL),乘积在AX中

MULCX;(AX)×(CX),乘积在DX,AX中

MULBYTEPTR[BX]3.1乘除法指令

1.乘法指令格式与MUL指令类似,只是要求两操作数均为有符号数。指令例子:

IMULBL;(AX)←(AL)×(BL)IMULWORDPTR[SI];(DX,AX)←(AX)×([SI+1][SI])

(2)有符号数乘法指令IMUL注意:MUL/IMUL指令中

●AL(AX)为隐含的乘数寄存器;

AX(DX,AX)为隐含的乘积寄存器;

SRC不能为立即数;

●除CF和OF外,对其它标志位无定义。乘法指令对CF/OF的影响:00乘积的高一半为零11否则MUL指令:CF/OF=00乘积的高一半是低一半的符号扩展11否则

IMUL指令:CF/OF=例:(AL)=A5H(-5B),(BL)=11H

(1)IMULBL;(AX)(AL)×(BL)

;A5×11-5B×11=-060BF9F5

;

(AX)=F9F5H

CF=OF=1(2)MULBL;(AX)(AL)×(BL)

;A5×11=0AF5

;

(AX)=0AF5H

CF=OF=1

2.除法指令进行除法时:16位/8位→8位商

32位/16位→16位商对被除数、商及余数存放有如下规定:

被除数 商 余数字节除法AX AL AH字除法 DX:AX AX DX格式:DIVsrc操作:字节操作(AL)

(AX)/(SRC)的商

(AH)

(AX)/(SRC)的余数字操作(AX)

(DX,AX)/(SRC)的商

(DX)

(DX,AX)/(SRC)的余数指令例子:

DIVCLDIVWORDPTR[BX]注:若除数为零或AL中商大于FFH,(或AX中商大于FFFFH),则CPU产生一个类型0的内部中断(除法错误中断)。(1)无符号数除法指令DIV(2)有符号数除法指令IDIV格式:IDIVsrc操作与DIV类似。商及余数均为有符号数,且余数符号总是与被除数符号相同。注意:

对于DIV/IDIV指令AX(DX,AX)为隐含的被除数寄存器。

AL(AX)为隐含的商寄存器。

AH(DX)为隐含的余数寄存器。

src不能为立即数。

对所有条件标志位均无定义。除法运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展,否则产生错误。对于无符号数除法扩展,只需将AH或DX清零即可。对有符号数而言,则是符号位的扩展。可使用下面介绍的符号扩展指令CBW和CWD关于除法操作中的字长扩展问题3.扩展指令格式:CBW;把AL的符号位复制到AHCWD;把AX的符号位复制到DX用途:用于有符号数的除法。例如:(AL)=A7H,则执行CBW后,AH的内容为FFH。例:写出34H÷25H的程序段。

MOVAL,34HMOVBL,25HCBW;AL的符号扩展到AHDIVBL;0034H÷25H,结果为

;(AH)=0FH,(AL)=01H3.2BCD数调整指令专用于对BCD码运算的结果进行调整包括:DAA、AAA、DAS、AAS、AAM、AAD均为隐含寻址,隐含的操作数为AL和AH为何要对BCD码的运算结果进行调整?

BCD码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。1)加法的十进制调整指令(1)非压缩BCD码加法调整AAA本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。AAA指令只影响AF和CF,其余标志无定义。AAA指令应紧跟在ADD或ADC指令之后。如果AL的低4位>9∨AF=1,则:

①AL←(AL)+6,(AH)←(AH)+1,AF←1②AL←((AL)∧0FH)③CF←AF否则AL←(AL)∧0FHAAA指令的操作如下:MOVAX,0806HADDAL,AHMOVAH,0AAA用AAA指令也可对字符串形式的十进制数加法进行调整,所以它又被称为加法的ASCII调正指令。MOVAL,35HADDAL,39HMOVAH,0AAAORAX,3030H

(2)压缩BCD码加法调整DAA两个压缩BCD码相加结果在AL中,通过DAA调整得到一个正确的压缩BCD码.指令操作(调整方法):若AL的低4位>9∨AF=1

则(AL)←(AL)+6,AF←1

若AL的高4位>9∨CF=1

则(AL)←(AL)+60H,CF←1除OF外,DAA指令影响所有其它标志。DAA指令应紧跟在ADD或ADC指令之后。例:

0100100048H

MOVAL,48H

+01110100

74H

MOVBL,74H10111100BCHADDAL,BL

+01100110

66H

DAA100100010122H

(进位) (进位)执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令执行加66H调整,最后结果为:(AL)=22H,CF=1,AF=1(1)非压缩BCD码减法的十进制调正指令AAS对AL中由两个非压缩的BCD码相减的结果进行调整。调整操作为:若AL的低4位>9或AF=1,则:①AL←(AL)-6,AH←(AH)-1,AF←1②AL←(AL)∧0FH③CF←AF

否则:AL←(AL)∧0FH2)减法的十进制调整指令举例:16-8=?

MOVAX,0106H0000011006MOVBL,08H-00001000

-08SUBAL,BL 11111110FEAAS-00000110

-0611111000F8

∧00001111

∧0F0000100008结果为:(AL)=08H,(AH)=0,CF=AF=1(2)压缩BCD码减法的十进制调正指令DAS对AL中由两个压缩BCD码相减的结果进行调整。调整操作为:若AL的低4位>9∨AF=1,则:

AL←(AL)-6,且AF←1

若AL的高4位>9∨CF=1,则:

AL←(AL)-60H,且CF←1

DAS对OF无定义,但影响其余标志位。DAS指令要求跟在减法指令之后。MOVAX,5634HSUBAL,AHDAS

3)乘法的十进制调正指令AAM

对AX中由两个非压缩BCD码相乘的结果进行调整。调整操作为:(AL)/0AH,(AH)←商,(AL)←余数隐含的操作寄存器为AL和AH;AAM跟在MUL指令之后使用;影响标志位PF、SF、ZF,其它无定义;用AAM可实现≤99的二-十进制转换。例1:按十进制乘法计算7×8=?程序段如下:

MOV AL,07H ;(AL)=07H MOV CL,08H ;(CL)=08H MUL CL ;(AX)=0038H AAM ;(AH)=05H,(AL)=06H

所得结果为非压缩的BCD码。例2:把3AH转换成等值的十进制数。

MOVAL,3AH;58AAM;(AH)=05H,(AL)=08H4)除法的十进制调正指令AAD对非压缩BCD除法运算进行调整。调整操作为:(AL)←(AH)×0AH+(AL)

AH←0隐含的操作寄存器为AH,AL;AAD要在DIV指令之前使用;影响标志位PF、SF、ZF,其它无定义;用AAD可实现≤99的十-二进制转换。例1:按十进制乘法计算55÷7=?

程序段如下:

MOV AX,0505H ;(AX)=55BCD MOV CL,07H ;(CL)=7 AAD ;(AX)=0037H DIV CL ;(AH)=6,(AL)=7

所得结果为非压缩的BCD码(商7余6)。例2:把73转换成等值的二进制数。

MOVAX,0703H;(AX)=73BCDAAD;(AX)=0049H例3.1已知字变量w1和W2分别存放着两个压缩BCD数,编写求两数之和,并将其和送到SUM字节变量中的程序。

stacksegmentstack‘stack’dw32dup(?)stackendsdatasegmentW1DW8931HW2DW5678HSUMDB3DUP(0)dataendscodesegmentbeginprocfarassumess:stack,cs:code,ds:datapushdssubax,axpushaxmovax,datamovds,axMOVAL,BYTEPTRW1ADDAL,BYTEPTRW2DAAMOVSUM,ALMOVAL,BYTEPTRW1+1

ADCAL,BYTEPTRW2+1

DAAMOVSUM+1,ALMOVSUM+2,0RCLSUM+2,1

retbeginendpcodeendsendbegin3.3顺序程序设计3.4分支程序设计3.5循环程序设计3.3顺序程序设计例3.5编程计算(W1-(W2*W3+W4-5000))/W5toW6。式中Wi=1~6)均为符号字变量。

stacksegmentstack‘stack’dw32dup(0)stackendsdatasegmentW1DW15000W2DW500W3DW800W4DW30000W5DW4000W6DW2DUP(0)dataendscodesegmentstartprocfarassumess:stack,cs:code,ds:dataSUBBX,5000SBBCX,0MOVAX,W1CWDSUBAX,BXSBBDX,CXIDIVW5MOVW6,AXMOVW6+2,DXretstartendpcodeends endstart

pushdssubax,axpushaxmovax,datamovds,axMOVAX,W2IMULW3MOVBX,AXMOVCX,DXMOVAX,W4CWDADDBX,AXADCCX,DX3.4分支程序设计无条件转移指令条件转移指令分支程序设计举例转移指令的实质:改变IP(或CS)的内容。

所有转移指令不会影响标志位。

分为无条件转移和条件转移两种。(1)无条件转移指令-JMP本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。条件转移指令可实现程序的条件分支。条件转移指令根据标志位的状态来决定是否进行分支转移。格式:

JXXlabel ;xx为条件名称缩写指令的转移范围为-128~+127字节。(2)条件转移指令-JXX①根据单个标志位设置的条件转移指令JB/JC;低于,或CF=1,则转移JNB/JNC/JAE;高于或等于,或CF=0,则转移JP/JPE;奇偶标志PF=1(偶),则转移JNP/JPO;奇偶标志PF=0(奇),则转移JZ/JE;结果为零(ZF=1),则转移JNZ/JNE;结果不为零(ZF=0),则转移JS;SF=1,则转移JNS;SF=0,则转移JO

;OF=1,则转移JNO

;OF=0,则转移这类指令主要用来判断两个数的大小。判断无符号数的大小JA高于则转移条件为:CF=0∧ZF=0,即A>BJNA/JBE低于或等于则转移条件为:CF=1∨ZF=1,即A≤B②根据组合条件设置的条件转移指令JG;大于则转移(A>B)条件为:(SF⊕OF=0)∧ZF=0JGE;大于或等于则转移(A≥B)条件为:(SF⊕OF=0)∨ZF=1JLE;小于或等于则转移(A≤B)条件为:(SF⊕OF=1)∨ZF=1JL;小于则转移(A<B)条件为:(SF⊕OF=1)∧ZF=0判断有符号数的大小(3)分支程序设计举例

例1:以十六进制数形式显示BX中的内容。

MOV BX,1234H MOV CH,4 ;CH做循环计数器ROT: MOV CL,4 ;CL做移位计数器 ROL BX,CL ;将最高4位移到低4位

MOV AL,BL AND AL,0FH ;取出低4位 ADD AL,30H ;转换为ASCII码

温馨提示

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

评论

0/150

提交评论