微机原理第8章汇编语言程序设计.ppt
《微机原理第8章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《微机原理第8章汇编语言程序设计.ppt(145页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1微型计算机机原理及应用2程序设计的基本技术1 12 23 35 5顺序程序设计顺序程序设计分支程序设计分支程序设计循环程序设计循环程序设计子程序设计子程序设计4 4串处理程序设计串处理程序设计3注意:注意:本书有关汇编语言程序设计只限于本书有关汇编语言程序设计只限于DOSDOS环境下的实地址方式,该方式下字长为环境下的实地址方式,该方式下字长为1616位。位。顺序程序是最简单的程序,它的执行顺序顺序程序是最简单的程序,它的执行顺序和程序中指令的顺序完全一致和程序中指令的顺序完全一致1 1 1 1 顺序程序设计顺序程序设计顺序程序设计顺序程序设计4 格式:格式:MUL source IMUL
2、source ;符号整数乘法;符号整数乘法1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令1.1.乘法指令乘法指令MULMUL和符号整数乘法指令和符号整数乘法指令IMULIMUL1 1、源操作数、源操作数 sourcesource可以是字节、字或双字,可为可以是字节、字或双字,可为 寄存器或存储器操作数,寄存器或存储器操作数,不能为立即数。不能为立即数。2 2、目的操作数是隐藏的,为被乘数,目的操作数是隐藏的,为被乘数,放于放于ALAL、AXAX或或 EAX EAX,视,视sourcesource的类型属性决定是的类型属性决定是ALAL、AXAX还是还是EAXEAX3
3、3、在乘法指令之前必须将目的操作数送、在乘法指令之前必须将目的操作数送AL(AL(字节乘字节乘)或或AX(AX(字乘字乘)或或EAXEAX(双字乘)。(双字乘)。5乘积的放法:乘积的放法:8 8位或位或1616位乘法指令所执行的操作是位乘法指令所执行的操作是ALAL或或AXAX乘以乘以sourcesource,乘积放回到乘积放回到AXAX或或DXDX和和AXAX,如下图所示,如下图所示ALsourc8AXAXsourc16AXDX1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令63232位乘法指令所执行的操作是位乘法指令所执行的操作是EAXEAX乘以乘以sourceso
4、urce,乘积放回到乘积放回到EDXEDX和和EAXEAX,如下图所示,如下图所示EAXsourc32EAXEDX注意:乘法指令对标志位注意:乘法指令对标志位CFCF和和OFOF有影响,对其余标有影响,对其余标 志位的影响不确定。志位的影响不确定。1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令7例如例如:将将AXAX中的中的3 3位位BCDBCD数转换为二进制数数转换为二进制数存入字节变量存入字节变量SBSB中。中。M0V CH,10M0V CH,10MOV CL,4MOV CL,4MOV SB,AL MOV SB,AL ;暂存十位和个位;暂存十位和个位MOV AL,
5、AH MOV AL,AH ;百位存入百位存入ALAL中中MUL CH MUL CH ;百位;百位1010AXAXMOV AH,SB MOV AH,SB ;百位百位1010的积小于的积小于255255,所以只用,所以只用ALAL存放即可存放即可SHR AH,CL SHR AH,CL ;取十位;取十位ADD AL,AH ADD AL,AH ;百位;百位10+10+十位十位ALALMUL CH MUL CH ;(;(百位百位10+10+十位十位)10 10 AXAXAND SB,0FH AND SB,0FH;取个位;取个位ADD SB,AL ADD SB,AL ;(百位百位10+10+十位十位)10
6、+10+个位个位SBSB N2102N110N0(N210N1)10N0程序段如下:程序段如下:1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令8 格式:格式:IMUL REG,source;REGREG X sourceREG X source IMUL REG,source,immREG,source,imm;REGsource X REGsource X immimm1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令注:符号整数乘法指令注:符号整数乘法指令IMULIMUL1 1、双操作数乘法指令是用源操作数乘目的操作数,、双操作数乘法指令是用
7、源操作数乘目的操作数,乘积存入目的操作数。乘积存入目的操作数。2 2、三操作数乘法指令是用源操作数乘立即数,乘积、三操作数乘法指令是用源操作数乘立即数,乘积 存入目的操作数。存入目的操作数。3 3、要求:要求:其源操作数其源操作数 sourcesource可为寄存器或存储器可为寄存器或存储器 操作数,目的操作数只能是操作数,目的操作数只能是1616位和位和3232位的寄存位的寄存 器,源、目的操作数的类型器,源、目的操作数的类型要求一致。要求一致。9 格式:格式:DIV source IDIV source ;符号整数除法;符号整数除法注意:注意:l源操作数源操作数sourcesource可以
8、是字、字节或双字,可为可以是字、字节或双字,可为 REG REG或或MEMMEM,不能为立即数不能为立即数l目的操作数是隐藏的,放置被除数,可为目的操作数是隐藏的,放置被除数,可为AXAX或或DXDX 和和AXAX或或EDXEDX和和EAXEAX。2.2.除法指令除法指令DIVDIV和符号整数除法指令和符号整数除法指令IDIVIDIV1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令108 8位或位或1616位除法指令所执行的操作如下图所示位除法指令所执行的操作如下图所示ALsourc8AXAXsourc16AXDXAHDX1.1 1.1 1.1 1.1 乘除法指令乘除法
9、指令乘除法指令乘除法指令113232位除法指令所执行的操作如下图所示位除法指令所执行的操作如下图所示EAXsourc32EAXEDXEDXl 可用除法运算(除可用除法运算(除1010取余)将二进制数转换为取余)将二进制数转换为BCDBCD数数1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令12如,用除如,用除1010取余法将取余法将8 8位二进制数位二进制数FFHFFH转换为转换为BCDBCD数数255H255H的二进制运算如下图所示的二进制运算如下图所示1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令方法:“除除1010取余取余”法法例如将例如
10、将ALAL中的中的8 8位无符号位无符号二进制数转换为二进制数转换为BCDBCD数数放入放入AXAX中中13例如将例如将ALAL中的中的8 8位无符号位无符号二进制数转换为二进制数转换为BCDBCD数数放入放入AXAX中中MOV AL,0FFHMOV AL,0FFHMOV CL,10MOV CL,10MOV AH,0 MOV AH,0 ;将将8 8位二进制数扩展为位二进制数扩展为1616位位DIV CL DIV CL ;商商ALAL,余数,余数AHAH(个位数)(个位数)MOV CH,AH MOV CH,AH ;暂存;暂存BCDBCD数个位数个位MOV AH,0 MOV AH,0 DIV CL
11、 DIV CL ;商商ALAL,余数,余数AHAH(十位数)(十位数)MOV CL,4MOV CL,4SHL AH,CL SHL AH,CL ;BCDBCD数十位移至高数十位移至高4 4位位OR CH,AH OR CH,AH ;BCD;BCD数十位与个位拼合数十位与个位拼合MOV AH,0MOV AH,0MOV CL,10MOV CL,10DIV CL DIV CL ;AH;AH中余数为中余数为BCDBCD数的百位数的百位MOV AL,CHMOV AL,CH ;BCDBCD数十位与个位送数十位与个位送ALAL1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令14 3.3.
12、扩展指令扩展指令CBWCBW和和CWDCWD扩展方法:扩展方法:要把一个要把一个8 8位二进制数除以另一个位二进制数除以另一个8 8位二进制数位二进制数,要有要有一个一个1616位二进制数在位二进制数在AXAX中,所以做中,所以做8 8位除以位除以8 8位的除位的除法前先要把法前先要把8 8位被除数扩展为位被除数扩展为1616位。做位。做1616位除以位除以1616位位的除法前要把的除法前要把1616位被除数扩展为位被除数扩展为3232位位,做做3232位除以位除以3232位的除法前要把位的除法前要把3232位被除数扩展为位被除数扩展为6464位。这种扩展位。这种扩展对于对于无符号数除法只需将
13、无符号数除法只需将AHAH或或DXDX或或EDXEDX清清0 0,而,而对符对符号整数除法则要通过扩展符号位来把被除数扩展号整数除法则要通过扩展符号位来把被除数扩展。1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令15l 指令都隐含操作数指令都隐含操作数l 在做在做8 8位除以位除以8 8位、位、1616位除以位除以1616位、位、3232位除以位除以3232位位的的符号整数符号整数除法之前,应先扩展除法之前,应先扩展ALAL或或AXAX或或EAXEAX中的被中的被除数。除数。l 扩展指令和符号整数除法指令仅对扩展指令和符号整数除法指令仅对补码数补码数适用。适用。格式:
14、格式:CBW ;ALAL的最高位符号位扩展至的最高位符号位扩展至AHAH CWD ;AXAX的最高位扩展至的最高位扩展至DXDX CWDE ;AX;AX的最高位扩展至的最高位扩展至EAXEAX的高的高1616位位 CDQ ;EAX;EAX的最高位扩展至的最高位扩展至EDXEDX1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令16如:有一符号字数组变量如:有一符号字数组变量ARRAYARRAY,第,第1 1个字是被除数个字是被除数,第第2 2个字是除数,接着存放商和余数,其程序段为:个字是除数,接着存放商和余数,其程序段为:MOV SIMOV SI,OFFSET ARRA
15、YOFFSET ARRAYMOV AXMOV AX,SISICWDCWDIDIV WORD PTR 2IDIV WORD PTR 2SISIMOV 4MOV 4SISI,AXAXMOV 6MOV 6SISI,DXDX1.1 1.1 1.1 1.1 乘除法指令乘除法指令乘除法指令乘除法指令171.2 BCD1.2 BCD1.2 BCD1.2 BCD数调整指令数调整指令数调整指令数调整指令分析:分析:两个两个 BCDBCD数相加,其和仍应为数相加,其和仍应为BCDBCD数,如不是数,如不是 BCDBCD数则结果数则结果错误。错误。(正确)正确)BCDBCD数数 十进制数码十进制数码 加法器的和(错
16、误)加法器的和(错误)0000 0 0000 0000 0 0000 1001 9 1001 1001 9 1001 0001 0001,0000 10 10100000 10 1010 0001 0001,0101 15 11110101 15 1111 0001 0001,0110 16 0001,00000110 16 0001,0000 0010 0010,0101 25 0001,10010101 25 0001,1001如何修正?如何修正?181.2 BCD1.2 BCD1.2 BCD1.2 BCD数调整指令数调整指令数调整指令数调整指令造成此结果的原因?造成此结果的原因?产生错误
17、的原因是产生错误的原因是 8421BCD8421BCD码为十进制,逢十进一,码为十进制,逢十进一,而四而四位二进制是逢十六进一,二者进位关系不同,位二进制是逢十六进一,二者进位关系不同,当和数大于当和数大于 9 9 时,时,8421BCD8421BCD应产生进位,而十六进制还不可能产生进位。为应产生进位,而十六进制还不可能产生进位。为此,应对结果进行修正。当运算结果小于等于此,应对结果进行修正。当运算结果小于等于 9 9 时,不需修时,不需修正或加正或加“0”0”,但当结果大于,但当结果大于 9 9 时,应修正让其产生一个进位,时,应修正让其产生一个进位,加加01100110即可。即可。如相加
18、结果产生了进位位,其结果必定大于如相加结果产生了进位位,其结果必定大于 9 9,所以,所以,也也需修正。需修正。对对BCDBCD数使用二进制数算术运算指令进行运算,然后执行一数使用二进制数算术运算指令进行运算,然后执行一条专用调整指令来处理条专用调整指令来处理BCDBCD数的结果。数的结果。19 1.BCD1.BCD数加法调整指令数加法调整指令DAADAA和和AAAAAA格式:格式:DAA功能:功能:将将ALAL中的数当作两个压缩中的数当作两个压缩BCDBCD数数相加之和调整为相加之和调整为 正确的压缩正确的压缩BCDBCD数。数。调整规则调整规则:(AL(AL0FH)90FH)9或或AF=1
19、AF=1,则,则ALAL加加6;6;(ALAL0F0H)90H0F0H)90H或或CF=1CF=1,则则ALAL加加60H.60H.1.2 BCD1.2 BCD1.2 BCD1.2 BCD数调整指令数调整指令数调整指令数调整指令(1 1)压缩)压缩BCDBCD数加法调整数加法调整20 注意:注意:l该指令操作数隐含为该指令操作数隐含为AL,AL,即只能对即只能对ALAL中的操作数据进行调中的操作数据进行调整。导致压缩整。导致压缩BCDBCD数的加减指令只能针对数的加减指令只能针对字节字节运算。运算。l对结果调整时要用到对结果调整时要用到CFCF和和AFAF两个标志位,所以调整指令应两个标志位,
20、所以调整指令应紧跟紧跟BCDBCD数加法指令数加法指令lDAADAA指令会影响标志指令会影响标志如如:MOV AX:MOV AX,3456H3456H ADD ALADD AL,AH AH;ALAL8AH,AF8AH,AF0,CF0,CF0 0 DAA DAA ;ALAL90H90H 0011 0100 0101 0110 1000 1010 0110 1001 00001.2 BCD1.2 BCD1.2 BCD1.2 BCD数调整指令数调整指令数调整指令数调整指令21例例1 1 求两个字变量求两个字变量W1W1和和W2W2中压缩中压缩BCDBCD数之和,存入字节变量数之和,存入字节变量SUM
21、SUM中。中。如:如:8931+5678=14609 8931+5678=14609,程序段如下:,程序段如下:W1 DW 8931HW1 DW 8931HW2 DW 5678HW2 DW 5678HSUM DB 3 DUP(0)SUM DB 3 DUP(0)MOV AL,BYTE PTR W1 MOV AL,BYTE PTR W1 ;ALAL31H31H ADDADD AL,BYTE PTR W2AL,BYTE PTR W2 ;31+78=A9H,AL;31+78=A9H,ALA9H,CF=0,AF=0A9H,CF=0,AF=0 DAADAA ;ALAL09H,CF=109H,CF=1 MO
22、V SUM,AL MOV SUM,AL ;存个位和十位;存个位和十位 MOV AL,BYTE PTR W1+1 MOV AL,BYTE PTR W1+1 ;ALAL89H89H ADC ADC AL,BYTE PTR W2+1 AL,BYTE PTR W2+1 ;89+56+CF=AL;89+56+CF=ALE0H,CF=0,AF=1E0H,CF=0,AF=1 DAADAA ;ALAL46H,CF=146H,CF=1 MOV SUM+1,AL MOV SUM+1,AL ;存百位和千位;存百位和千位 MOV SUM+2,0 MOV SUM+2,0 ;处理向万位的进位处理向万位的进位 RCL SU
23、M+2,1 RCL SUM+2,11.2 BCD1.2 BCD1.2 BCD1.2 BCD数调整指令数调整指令数调整指令数调整指令22 格式:格式:AAA功能:功能:将将ALAL中的数当作两个非压缩中的数当作两个非压缩BCDBCD数数相加之和相加之和 进行调整,得到正确的非压缩进行调整,得到正确的非压缩BCDBCD数数送送AXAX 。调整规则调整规则:(AL(AL0FH)90FH)9或或AF=1,AF=1,则则(AL+6)(AL+6)0FHAL,0FHAL,AH+1AHAH+1AH ;否则,否则,ALAL0FH AL 0FH AL,AHAH不变不变.(2 2)非压缩)非压缩BCDBCD数加法调
24、整数加法调整1.2 BCD1.2 BCD1.2 BCD1.2 BCD数调整指令数调整指令数调整指令数调整指令23注意:注意:l同同DAADAA指令,指令,AAAAAA指令的操作数也隐含为指令的操作数也隐含为AL,AL,且要紧跟加法指且要紧跟加法指令。导致非压缩令。导致非压缩BCDBCD数的加减指令只能针对字节运算。数的加减指令只能针对字节运算。lAAAAAA调整后的存放规律可调整后的存放规律可理解理解为调整后的个位数送为调整后的个位数送AL,AL,十位十位数数(即进位即进位)加到加到AHAH中,中,故执行该指令前应注意故执行该指令前应注意AHAH是否清是否清0 0。如:将两个如:将两个BCDB
25、CD数的数的ASCIIASCII码相加,得到和的码相加,得到和的ASCIIASCII码:码:MOV ALMOV AL,35H35H ;5 5 ADD ALADD AL,39H39H ;9 9,AL=6EH,AL=6EH MOV AHMOV AH,0 0 AAA AAA ;AX=0104HAX=0104H OR AX,3030HOR AX,3030H ;AX=3134H ;AX=3134H 即即14141.2 BCD1.2 BCD1.2 BCD1.2 BCD数调整指令数调整指令数调整指令数调整指令24例例2 2 求两个字变量求两个字变量W1W1和和W2W2中非压缩中非压缩BCDBCD数之和,存入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 程序设计
限制150内