(精品)第三章程序设计的基本技术1.ppt

上传人:gsy****95 文档编号:85155887 上传时间:2023-04-10 格式:PPT 页数:30 大小:96.50KB
返回 下载 相关 举报
(精品)第三章程序设计的基本技术1.ppt_第1页
第1页 / 共30页
(精品)第三章程序设计的基本技术1.ppt_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《(精品)第三章程序设计的基本技术1.ppt》由会员分享,可在线阅读,更多相关《(精品)第三章程序设计的基本技术1.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第三章第三章 程序设计的基本技术程序设计的基本技术3.1 乘除法指令乘除法指令3.2 BCD数调整指令数调整指令3.3 顺序程序设计顺序程序设计3.4 分支程序设计分支程序设计3.5 循环程序设计循环程序设计3.7 子程序设计子程序设计1进行乘法时:8位*8位16位乘积 16位*16位32位乘积(1)无符号数的乘法指令MUL(MEM/REG)格式:格式:MUL src操作:字节操作数操作:字节操作数 (AX)(AL)(src)字操作数字操作数 (DX,AX)(AX)(src)指令例子:指令例子:MUL BL ;(AL)(BL),乘积在AX中 MUL CX ;(AX)(CX),乘积在DX,AX中

2、 MUL BYTE PTRBX3.1 3.1 乘除法指令乘除法指令1.1.乘法指令乘法指令2格式与MUL指令类似,只是要求两操作数均为有符号数有符号数。指令例子:指令例子:IMUL BL ;(AX)(AL)(BL)IMUL WORD PTRSI ;(DX,AX)(AX)(SI+1SI)(2)(2)有符号数乘法指令有符号数乘法指令IMULIMUL注意:注意:MUL/IMUL指令中 AL(AX)为隐含的乘数寄存器;AX(DX,AX)为隐含的乘积寄存器;SRC不能为立即数;除CF和OF外,对其它标志位无定义。3乘法指令对乘法指令对CF/OF的影响:的影响:00 乘积的高一半为零乘积的高一半为零11

3、否则否则MUL指令指令:CF/OF=00 乘积的高一半是低一半的符号扩展乘积的高一半是低一半的符号扩展11 否则否则 IMUL指令指令:CF/OF=例:例:(AL)=A5H(-5B),(BL)=11H (1)IMUL BL ;(AX)(AL)(BL);A511 -5B11=-060B F9F5 ;(AX)=F9F5H CF=OF=1 (2)MUL BL ;(AX)(AL)(BL);A511=0AF5 ;(AX)=0AF5H CF=OF=1 42.2.除法指令除法指令进行除法时:16位/8位8位商 32位/16位16位商对被除数、商及余数存放有如下规定:被除数 商余数字节除法 AX AL AH

4、字除法 DX:AX AX DX5格式:格式:DIV src操作:字节操作操作:字节操作 (AL)(AX)/(SRC)的商的商 (AH)(AX)/(SRC)的余数的余数 字操作字操作 (AX)(DX,AX)/(SRC)的商的商 (DX)(DX,AX)/(SRC)的余数的余数指令例子:指令例子:DIV CL DIV WORD PTRBX注:若除数为零或注:若除数为零或ALAL中商大于中商大于FFH,(FFH,(或或AXAX中商大于中商大于FFFFH)FFFFH),则,则CPUCPU产生一个类型产生一个类型0 0的内部中断的内部中断(除法错误除法错误中断中断)。(1)(1)无符号数除法指令无符号数除

5、法指令DIVDIV6(2)(2)有符号数除法指令有符号数除法指令IDIVIDIV格式:格式:IDIV src操作与DIV类似。商及余数均为有符号数,且余数符号总是与被除数符号相同。注意注意:对于对于DIV/IDIV指令指令 AX(DX,AX)为隐含的被除数寄存器。为隐含的被除数寄存器。AL(AX)为隐含的商寄存器。为隐含的商寄存器。AH(DX)为隐含的余数寄存器。为隐含的余数寄存器。src不能为立即数。不能为立即数。对所有条件标志位均对所有条件标志位均无定义无定义。7除法运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展对被除数进行扩展,否则产生错误。对于无符号数除法扩展,只需将

6、AH或DX清零即可。对有符号数而言,则是符号位的扩展。可使用下面介绍的符号扩展指令CBW和CWD关于除法操作中的字长扩展问题关于除法操作中的字长扩展问题83.3.扩展指令扩展指令格式:CBW ;把AL的符号位复制到AH CWD ;把AX的符号位复制到DX用途:用于有符号数的除法。例如:(AL)=A7H,则执行CBW后,AH的内 容为FFH。9例例:写出写出34H25H的程序段。的程序段。MOV AL,34H MOV BL,25H CBW ;AL的符号扩展到AH DIV BL ;0034H25H,结果为 ;(AH)=0FH,(AL)=01H103.2 BCD3.2 BCD数调整指令数调整指令专用

7、于对BCD码运算的结果进行调整包括:DAA、AAA、DAS、AAS、AAM、AAD均为隐含寻址,隐含的操作数为ALAL和AHAH为何要对BCD码的运算结果进行调整?BCD码本质上是十进制数,即应遵循逢码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制(十六进制)进行运算,并未按十进制规则进行运算。规则进行运算。111 1)加法的十进制调整指令加法的十进制调整指令(1 1)非压缩非压缩BCDBCD码加法调整码加法调整AAA本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。AA

8、A指令只影响AF和CF,其余标志无定义。AAAAAA指令应紧跟在指令应紧跟在ADDADD或或ADCADC指令之后。指令之后。12如果AL的低4位9AF=1,则:AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH)CFAF否则AL(AL)0FHAAAAAA指令的操作如下:指令的操作如下:13实际上当低4位的结果9(即AF之间)时,也应进行加6调正。(原因是逢十没有进位,故用加6的方法强行产生进位。)如对上例的结果进行加6:0001 0001 11 +0000 0110 6 0001 0111 17 结果正确。14调整原理:先看一个例子调整原理:先看一个例子 计算89 0000 1

9、000 见右式 +0000 1001 0001 0001 11 结果应为17,而计算机相加为11,原因在于运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)是按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位,个位就会少6,这就要进行加6调正。这个1代表了16,而实际上仅应为10,即多进了6。15MOV AX,0806HADD AL,AHMOV AH,0AAA 用用AAAAAA指令也可对字符串形式的十进制数加法进指令也可对字符串形式的十进制数加法进行调整行调整,所以它又被称为加法的所以它又被称为加法的ASCIIASCII调正指令。调正指令。MOV AL,35HADD AL,3

10、9HMOV AH,0AAAOR AX,3030H 16(2 2)压缩压缩BCDBCD码加法调整码加法调整DAAl两个压缩BCD码相加结果在AL中,通过DAA调整得到一个正确的压缩BCD码.l指令操作(调整方法):若AL的低4位9AF=1 则(AL)(AL)+6,AF1 若AL的高4位9CF=1 则(AL)(AL)+60H,CF1l除OF外,DAA指令影响所有其它标志。lDAADAA指令应紧跟在指令应紧跟在ADDADD或或ADCADC指令之后。指令之后。17例:0100 1000 48H MOV AL,48H +0111 0100 74H MOV BL,74H 1011 1100 BCH ADD

11、 AL,BL +0110 0110 66H DAA 1 0010 0010 1 22H (进位)(进位)执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令执行加66H调整,最后结果为:(AL)=22H,CF=1,AF=118(1)1)非压缩非压缩BCDBCD码减法的十进制调正指令码减法的十进制调正指令AASAAS 对AL中由两个非压缩的BCD码相减的结果进行调整。调整操作为:若AL的低4位9或AF=1,则:AL(AL)-6,AH(AH)-1,AF1 AL(AL)0FH CFAF 否则:AL(AL)0FH2)2)减法的十进制调整指令减法的十进制调整指令19举例:16-8=?MOV

12、 AX,0106H 0000 0110 06 MOV BL,08H -0000 1000 -08 SUB AL,BL 1111 1110 FE AAS -0000 0110 -06 1111 1000 F8 0000 1111 0F 0000 1000 08结果为:(AL)=08H,(AH)=0,CF=AF=120(2)2)压缩压缩BCDBCD码减法的十进制调正指令码减法的十进制调正指令DASDAS 对AL中由两个压缩BCD码相减的结果进行调整。调整操作为:若AL的低4位9AF=1,则:AL(AL)-6,且AF1 若AL的高4位9CF=1,则:AL(AL)-60H,且CF1 DAS对OF无定义

13、,但影响其余标志位。DAS指令要求跟在减法指令之后。21MOV AX,5634HSUB AL,AHDAS 223)3)乘法的十进制调正指令乘法的十进制调正指令AAM 对AX中由两个非压缩BCD码相乘的结果进行调整。调整操作为:(AL)/0AH,(AH)商,(AL)余数隐含的操作寄存器为AL和AH;AAM跟在MUL指令之后使用;影响标志位PF、SF、ZF,其它无定义;用AAM可实现99的二-十进制转换。23例1:按十进制乘法计算78=?程序段如下:MOV AL,07H;(AL)=07HMOV CL,08H;(CL)=08HMUL CL;(AX)=0038HAAM;(AH)=05H,(AL)=06

14、H 所得结果为非压缩的BCD码。例2:把3AH转换成等值的十进制数。MOV AL,3AH;58 AAM ;(AH)=05H,(AL)=08H244)4)除法的十进制调正指令除法的十进制调正指令AAD对非压缩BCD除法运算进行调整。调整操作为:(AL)(AH)0AH(AL)AH 0隐含的操作寄存器为AH,AL;AAD要在DIV指令之前使用;影响标志位PF、SF、ZF,其它无定义;用AAD可实现99的十-二进制转换。25例1:按十进制乘法计算557=?程序段如下:MOV AX,0505H;(AX)=55BCDMOV CL,07H;(CL)=7AAD;(AX)=0037H DIV CL;(AH)=6

15、,(AL)=7 所得结果为非压缩的BCD码(商7余6)。例2:把73转换成等值的二进制数。MOV AX,0703H ;(AX)=73BCD AAD ;(AX)=0049H26例例3.1 已知字变量已知字变量w1和和W2分别存放着两个压缩分别存放着两个压缩BCD数,数,编写求两数之和,并将其和送到编写求两数之和,并将其和送到SUM字节变量中的程序。字节变量中的程序。stack segment stack stack dw 32 dup(?)stack ends data segment W1 DW 8931H W2 DW 5678H SUM DB 3 DUP(9)data endscode se

16、gmentbegin proc far assume ss:stack,cs:code,ds:data 27 push ds sub ax,ax push ax mov ax,data mov ds,ax MOV AL,BYTE PTR WI ADD AL,BYTE PTR W2 DAA MOV SUM,AL MOV AL,BYTE PTR Wl十十1 ADC AL,BYTE PTR W2十十1 DAA MOV SUM十十1,AL MOV SUM+2,0 RCL SUM十十2,1 retbegin enp code ends end begin28例例3.2已知字变量已知字变量W1和和W2分别

17、存放着两个非压缩分别存放着两个非压缩BCD数,数,编写求两数之和,并将其和送到编写求两数之和,并将其和送到SUM字节变量中的程序。字节变量中的程序。data segmentW1 DW 0809HW2 DW 0607HSUM DB 3 DUP(?)data ends MOV AL,BYTE PTR Wl ADD AL,BYTE PTR W2 MOV AH,0 AAA MOV SUM,AL MOV AL,AH ADD AL,BYTE PTR W1+1 ADD AL,BYTE PTR W2+1 MOV AH,0 AAA MOV WORD PTR SUM+1,AX29例例3.3字变量字变量W和字节变量和字节变量B分别存放着两个非压缩分别存放着两个非压缩BCD数,数,编写求两数之积,并将它存储到字节变量中的程序。编写求两数之积,并将它存储到字节变量中的程序。data segment W DW 0307HD DB 9JJ DB 3 DUP(?)data ends MOV AL,BYTE PTR W MUL B AAM MOV WORD PTR JJ,AX MOV AL,BYTE PTR W+1 MUL B AAM ADD AL,JJ十十1 AAA MOV WORD PTR JJ+1,AX ret 30

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁