微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt

上传人:b****9 文档编号:13861094 上传时间:2022-10-14 格式:PPT 页数:145 大小:3.43MB
下载 相关 举报
微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt_第1页
第1页 / 共145页
微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt_第2页
第2页 / 共145页
微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt_第3页
第3页 / 共145页
微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt_第4页
第4页 / 共145页
微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt_第5页
第5页 / 共145页
点击查看更多>>
下载资源
资源描述

微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt

《微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt(145页珍藏版)》请在冰豆网上搜索。

微机原理-第8章汇编语言程序设计PPT格式课件下载.ppt

百位10AXMOVAH,SB;

百位10的积小于255,所以只用AL存放即可SHRAH,CL;

取十位ADDAL,AH;

百位10+十位ALMULCH;

(百位10+十位)10AXANDSB,0FH;

取个位ADDSB,AL;

(百位10+十位)10+个位SB,N2102N110N0(N210N1)10N0,程序段如下:

1.1乘除法指令,格式:

IMULREG,source;

REGREGXsourceIMULREG,source,imm;

REGsourceXimm,1.1乘除法指令,注:

符号整数乘法指令IMUL,1、双操作数乘法指令是用源操作数乘目的操作数,乘积存入目的操作数。

2、三操作数乘法指令是用源操作数乘立即数,乘积存入目的操作数。

3、要求:

其源操作数source可为寄存器或存储器操作数,目的操作数只能是16位和32位的寄存器,源、目的操作数的类型要求一致。

格式:

DIVsourceIDIVsource;

符号整数除法注意:

源操作数source可以是字、字节或双字,可为REG或MEM,不能为立即数目的操作数是隐藏的,放置被除数,可为AX或DX和AX或EDX和EAX。

2.除法指令DIV和符号整数除法指令IDIV,1.1乘除法指令,8位或16位除法指令所执行的操作如下图所示,AL,sourc8,AX,AX,sourc16,AH,DX,1.1乘除法指令,32位除法指令所执行的操作如下图所示,EAX,sourc32,EDX,可用除法运算(除10取余)将二进制数转换为BCD数,1.1乘除法指令,如,用除10取余法将8位二进制数FFH转换为BCD数255H的二进制运算如下图所示,1.1乘除法指令,方法:

“除10取余”法,例如将AL中的8位无符号二进制数转换为BCD数放入AX中,例如将AL中的8位无符号二进制数转换为BCD数放入AX中,MOVAL,0FFHMOVCL,10MOVAH,0;

将8位二进制数扩展为16位DIVCL;

商AL,余数AH(个位数)MOVCH,AH;

暂存BCD数个位MOVAH,0DIVCL;

商AL,余数AH(十位数)MOVCL,4SHLAH,CL;

BCD数十位移至高4位ORCH,AH;

BCD数十位与个位拼合MOVAH,0MOVCL,10DIVCL;

AH中余数为BCD数的百位MOVAL,CH;

BCD数十位与个位送AL,1.1乘除法指令,3.扩展指令CBW和CWD,扩展方法:

要把一个8位二进制数除以另一个8位二进制数,要有一个16位二进制数在AX中,所以做8位除以8位的除法前先要把8位被除数扩展为16位。

做16位除以16位的除法前要把16位被除数扩展为32位,做32位除以32位的除法前要把32位被除数扩展为64位。

这种扩展对于无符号数除法只需将AH或DX或EDX清0,而对符号整数除法则要通过扩展符号位来把被除数扩展。

1.1乘除法指令,指令都隐含操作数在做8位除以8位、16位除以16位、32位除以32位的符号整数除法之前,应先扩展AL或AX或EAX中的被除数。

扩展指令和符号整数除法指令仅对补码数适用。

CBW;

AL的最高位符号位扩展至AHCWD;

AX的最高位扩展至DXCWDE;

AX的最高位扩展至EAX的高16位CDQ;

EAX的最高位扩展至EDX,1.1乘除法指令,如:

有一符号字数组变量ARRAY,第1个字是被除数,第2个字是除数,接着存放商和余数,其程序段为:

MOVSI,OFFSETARRAYMOVAX,SICWDIDIVWORDPTR2SIMOV4SI,AXMOV6SI,DX,1.1乘除法指令,1.2BCD数调整指令,分析:

两个BCD数相加,其和仍应为BCD数,如不是BCD数则结果错误。

(正确)BCD数十进制数码加法器的和(错误)0000000001001910010001,00001010100001,01011511110001,0110160001,00000010,0101250001,1001如何修正?

1.2BCD数调整指令,造成此结果的原因?

产生错误的原因是8421BCD码为十进制,逢十进一,而四位二进制是逢十六进一,二者进位关系不同,当和数大于9时,8421BCD应产生进位,而十六进制还不可能产生进位。

为此,应对结果进行修正。

当运算结果小于等于9时,不需修正或加“0”,但当结果大于9时,应修正让其产生一个进位,加0110即可。

如相加结果产生了进位位,其结果必定大于9,所以,也需修正。

对BCD数使用二进制数算术运算指令进行运算,然后执行一条专用调整指令来处理BCD数的结果。

1.BCD数加法调整指令DAA和AAA,格式:

DAA功能:

将AL中的数当作两个压缩BCD数相加之和调整为正确的压缩BCD数。

调整规则:

(AL0FH)9或AF=1,则AL加6;

(AL0F0H)90H或CF=1,则AL加60H.,1.2BCD数调整指令,

(1)压缩BCD数加法调整,注意:

该指令操作数隐含为AL,即只能对AL中的操作数据进行调整。

导致压缩BCD数的加减指令只能针对字节运算。

对结果调整时要用到CF和AF两个标志位,所以调整指令应紧跟BCD数加法指令DAA指令会影响标志如:

MOVAX,3456HADDAL,AH;

AL8AH,AF0,CF0DAA;

AL90H,1.2BCD数调整指令,例1求两个字变量W1和W2中压缩BCD数之和,存入字节变量SUM中。

如:

8931+5678=14609,程序段如下:

W1DW8931HW2DW5678HSUMDB3DUP(0)MOVAL,BYTEPTRW1;

AL31HADDAL,BYTEPTRW2;

31+78=A9H,ALA9H,CF=0,AF=0DAA;

AL09H,CF=1MOVSUM,AL;

存个位和十位MOVAL,BYTEPTRW1+1;

AL89HADCAL,BYTEPTRW2+1;

89+56+CF=ALE0H,CF=0,AF=1DAA;

AL46H,CF=1MOVSUM+1,AL;

存百位和千位MOVSUM+2,0;

处理向万位的进位RCLSUM+2,1,1.2BCD数调整指令,格式:

AAA功能:

将AL中的数当作两个非压缩BCD数相加之和进行调整,得到正确的非压缩BCD数送AX。

(AL0FH)9或AF=1,则(AL+6)0FHAL,AH+1AH;

否则,AL0FHAL,AH不变.,

(2)非压缩BCD数加法调整,1.2BCD数调整指令,注意:

同DAA指令,AAA指令的操作数也隐含为AL,且要紧跟加法指令。

导致非压缩BCD数的加减指令只能针对字节运算。

AAA调整后的存放规律可理解为调整后的个位数送AL,十位数(即进位)加到AH中,故执行该指令前应注意AH是否清0。

如:

将两个BCD数的ASCII码相加,得到和的ASCII码:

MOVAL,35H;

5ADDAL,39H;

9,AL=6EHMOVAH,0AAA;

AX=0104HORAX,3030H;

AX=3134H即14,1.2BCD数调整指令,例2求两个字变量W1和W2中非压缩BCD数之和,存入字节变量SUM中。

89+67=156,程序段如下:

W1DW0809HW2DW0607HSUMDB3DUP(0)MOVAX,W1;

AX0809HADDAL,BYTEPTRW2;

AL10H,AF=1AAA;

AX0906HMOVSUM,AL;

存个位MOVAL,AHADDAL,BYTEPTRW2+1;

AL0FH,AF=0MOVAH,0AAA;

AL05H,AH=01HMOVWORDPTRSUM+1,AX;

存十位和百位,1.2BCD数调整指令,格式:

DAS功能:

将AL中的数当作两个压缩BCD数相减之差进行调整,得到正确的压缩BCD数。

(AL0FH)9或AF=1,则AL减6;

(AL0F0H)90H或CF=1,则AL减60H.,如:

MOVAX,5643HSUBAL,AH;

AL=DEH,有借位DAS;

AL=78H,保持借位,即134-56,2.BCD数减法调整指令DAS和AAS,

(1)压缩BCD数减法调整,1.2BCD数调整指令,格式:

AAS功能:

将AL中的数当作两个非压缩BCD数相减之差进行调整,得到正确的非压缩BCD数送AX。

(AL0FH)9或AF=1,则(AL-6)0FHAL,AH-1AH;

否则,AL0FHAL,AH不变.,如:

MOVAX,0806HSUBAL,07H;

AX=08FFHAAS;

AX=0709H,

(2)非压缩BCD数减法调整,1.2BCD数调整指令,格式:

AAM功能:

将AL中小于64H的二进制数变换为非压缩BCD数送AX调整规则:

AL/0AHAH(十位),ALMOD0AHAL(个位),如:

MOVAL,63HAAM;

AX=0909H,3.非压缩BCD数乘除法调整指令AAM和AAD,

(1)乘法调整,1.2BCD数调整指令,例3字变量W和字节变量B分别存放着两个非压缩BCD数,编写求两数之积,并将它存储到JJ字节变量中的程序。

程序段如下:

WDW0307HBDB9JJDB3DUP(0)MOVAL,BYTEPTRW;

AL=07HMULB;

AX=003FHAAM;

AX=0603HMOVWORDPTRJJ,AXMOVAL,BYTEPTRW+1;

AL=03HMULB;

AX=001BHAAM;

AX=0207HADDAL,JJ+1;

07H+06H=0DH,即AL=0DHAAA;

进位直接加入AH!

AX=0303HMOVWORDPTRJJ+1,AX,1.2BCD数调整指令,格式:

AAD功能:

将AX中的两位非压缩BCD数变换成二进制数集中放在AL中。

MOVAX,0906HMOVDL,06HAAD;

AX=0060HDIVDL;

AL=10H,AH=0MOVDL,AH;

存余数AAM;

AX=0106H,

(2)除法调整,注:

此指令可对被除数进行预调整加、减和乘法调整在相应运算操作之后进行,而除法的调整在除法操作之前进行,1.2BCD数调整指令,例3.4字变量W和字节变量B中分别存放着两个非压缩BCD

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1