版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——算术运算指令一、算术运算指令算术运算中的溢出问题以8位二进制数的加法为例,两个8位数相加时有4种状况:二进制运算对应的十进制运算数据作为无符号数Case1:无符号数和有符号数均不溢出00001000+0001111000100110结果:26H(38)CF=0,OF=0Case2:无符号数溢出,有符号数不溢出00001000+11111101100000101结果:5CF=1,OF=0Case3:无符号数不溢出,有符号数溢出00001000+0111110110000101结果:-123(补码)CF=0,OF=1Case4:无符号数和有符号数均溢出10001000+11110111101111111结果:127CF=1,OF=18+3038未超出8位无符号二进制数表示范围8+253261超出8位无符号二进制数表示范围8+125133未超出8位无符号二进制数表示范围136+247383超出8位无符号二进制数表示范围数据作为有符号数+8+(+30)+38未超出8位有符号二进制数表示范围+8+(-3)+5未超出8位有符号二进制数表示范围+8+(+125)+133超出8位有符号二进制数表示范围-120+(-9)-129超出8位有符号二进制数表示范围上面四种状况说明,算术运算溢出的判别是比较繁杂的,不能只用一个标志位来判别。算术运算溢出是一种出错状态,在运算过程中应当避免。1加法运算指令ADDCL,20H;CL←(CL)+20HADDAX,SI;AX←(AX)+(SI)ADD[BX+2],AL;(BX+2)←((BX)+2)+(AL)ADDDX,[BX+SI];DX←(DX)+((BX)+(SI))ADDAX,CL;错误!操作数类型应一致ADD[SI],[BX];错误!不允许两个操作数都是存储器ADDDS,AX;错误!不允许把段寄放器作为操作数加法指令对全部6个状态标志位都会产生影响。试分析以下两条指令执行后的状态:MOVAL,7EHADDAL,5BH分析:我们用手工的方法来模拟以上两条指令的执行,如下01111110+01011011110110011
根据运算过程可得出各状态标志位的值:(Ci表示第i位的进位)C3=1,所以AF=1;C7=0,所以CF=0;C7⊕C6=1,所以OF=1;
结果中1的个数为奇数,所以PF=0;结果的bit7=1,所以SF=1;结果不为零,所以ZF=0。
其中CF=0意味着若操作数是无符号数,则结果没有产生溢出;而OF=1意味着若操作数是有符号数,则运算结果溢出。事实上,根据运算结果AL=D9H>7FH(8位有符号数的最大值)和D9H<FFH(8位无符号数的最大值)也可得到一致结果。②带进位的加法指令ADC
设CF=1,写出以下指令执行后的结果。MOVAL,7EHADCAL,86H
指令执行后:AL=7EH+ABH+1=2AH,且CF=1。
求两个32位无符号数0107A379H与10067E4FH二者之和。MOVDX,0107H;第一个数高16位传送到DXMOVAX,0A379H;第一个数低16位传送到AXMOVBX,1006H;其次个数高16位传送到BXMOVCX,7E4FH;其次个数低16位传送到CXADDAX,CX;低16位相加,进位在CF中ADCDX,BX;高16位相加,并加上低16位的进位相加的最终结果为:110E21C8H。2减法运算指令
②带借位的减法指令SBB
x、y、z均为32位数,分别存放在地址为X、Y、Z的三个存储单元中,用指令序列实现w=x+y+24-z,结果放在W单元中。
解:由于x、y、z均为32位数,所以我们用两个16位寄放器完成32位运算。程序段如下:MOVAX,X
MOVDX,X+2;DX:AX←xADDAX,Y
ADCDX,Y+2;DX:AX←x+yADDAX,24
ADCDX,0;DX:AX←x+y+24SUBAX,Z
SBBDX,Z+2;DX:AX←x+y+24-zMOVW,AX
MOVW+2,DX;32位结果存入W单元⑤求补指令NEG
若AL=47H,则执行NEGAL后,AL=B9H,CF=1。本例中,结果B9H为(-47H)的补码。
NEG指令对六个状态标志位均有影响。但要注意以下两点:
(1)执行NEG指令后,一般状况下都会使CF为1。由于用零减去某个操作数,自然会产生借位,而减法的CF值正是反映无符号数运算中的借位状况。除非给定的操作数为零才会使CF为0。
2
(2)若操作数的值为80H(-128)或为8000H(-32768),则执行NEG指令后,其结果仍为80H或8000H,但OF置1,其它状况下OF均置0。3乘法运算指令①无符号数乘法指令MULMULDL;AX←(AL)×(DL)MULBX;DX:AX←(AX)×(BX)MULBYTEPTR[SI];AX←(AL)×((SI))MULW0RDPTR[DI];DX:AX←(AX)×((DI)+1):(DI))MUL10;错误!源操作数不能为马上数MULAL,BL;错误!目的操作数无需写出②有符号数乘法指令IMUL设AL=FEH,CL=11H,求AL的内容与CL的内容的乘积。解:若将两个寄放器中内容看做无符号数,则应使用指令:MULCL,指令执行后:AX=10DEH,因AH中的结果不为零,故CF=0F=l。若将两个寄放器中内容看作有符号数,则应使用指令:IMULCL,指令执行后:AX=FFDEH=-34。因AH的内容是AL的符号扩展,故CF=0F=0。4BCD码运算调整指令①BCD码的加法运算调整指令AAA/DAA(1)非压缩BCD码的加法调整指令AAA用十进制计算9+4MOVAL,09H;AL←9MOVBL,04H;BL←4ADDAL,BL;AL=(AL)+(BL)=0DHAAA;AL=(0DH+06H)∧0FH=03H;AH←AH+1;CF←1(2)压缩BCD码的加法调整指令DAA用十进制计算48+27,程序段如下:MOVAL,48HADDAL,27HDAA其中,ADD指令的运算过程为:01001000?001001110110111148+27应等于75,但ADD指令运算的结果为6FH,结果不正确。执行DAA指令时,因低4位>9,故进行加6调整:01101111?0000011001110101可以看出,调整后:AL=(75)BCD,AF=1,CF=0,结果正确。②BCD码的减法运算调整指令AAS/DAS(1)非压缩的BCD码减法运算调整指令AAS3
用十进制计算16-8
MOVAX,0106H;AX←非压缩BCD数16MOVBL,08H;BL←非压缩BCD数8SUBAL,BL;AL←(AL)-(BL)AAS;BCD码减法调整,AL=8
程序中SUB指令和AAS指令的具体操作如下:
指令操作0000011006
SUBAL,BL-00001000-0811111110FEAAS-00000110-0611111000F8∧00001111∧0F0000100008
最终结果为:AL=08H,AH=0,CF=AF=1(2)压缩的BCD码减法运算调整指令DAS③BCD码的乘法运算调整指令AAM
按十进制乘法计算7×8,程序段如下:MOVAL,07H;AL←07HMOVCL,08H;CL←08H
MULCL;AX=0038H(56的二进制数表示)AAM;AH=05H,AL=06H
AX=0506H为正确的非压缩的BCD码结果。
AAM的操作实质上是把AL中的二进制数转换为十进制数,所以对于不超过99的二进制数,用一条AAM指令即可实现二进制数到十进制数的转换。把3AH转换成等值的十进制数。MOVAL,3AHAAM
结果:AX=0508H,即与3AH等值的十进制数为58。④BCD码的除法运算调整指令AAD
按十进制除法计算55÷7,程序段如下:MOVAX,0505H;AX=55BCDMOVCL,07H;CL=7AAD;AX=0037HDIVCL;AH=6,AL=7
所得结果为非压缩的BCD码(商7余6)。例2:把73转换成等值的二进制数。MOVAX,0703H;AX=73BCDAAD;AX=0049H
所得结果49H为十进制数73的二进制数表示。
二、规律运算指令
4
把AH和AL中的非压缩BCD码组合成压缩的BCD码,放到AL中。MOVCL,4;移位次数SHLAH,CL;将AH中的BCD码左移4位ORAL,AH;AH与AL的内容拼接在一起用不同的指令将AX寄放器清零。指令优缺点速度快、指令短;会影响标志位不影响标志位;指令长影响标志位;指令长速度快、指令短;会影响标志位指令多、执行时间长;会影响标志位方法1XORAX,AX方法2MOVAX,0方法3ANDAX,0方法4SUBAX,AX方法5MOVCL,8SHLAX,CL1移位指令把AX中的16位无符号数乘以10。把一个数乘10可写成:10x=8x+2x=2x+2x,用左移指令实现乘10运算的程序段如下:SHLAX,1;AX←2xMOVBX,AX;BX←2xSHLAX,1;AX←4xSHLAX,1;AX←8xADDAX,BX;AX←8x+2x=10x将AL中的两位压缩BCD数转换成ASCII码送入BL和BH,AL的内容保持不变。MOVBL,AL;先转换BCD数的个位数ANDBL,0FH;高4位清零ADDBL,30H;个位数的ASCII码在BL中MOVCL,4;再转换BCD数的十位数RORAL,CL;把高4位移到低4位MOVBH,ALANDBH,0FHADDBH,30H;十位数的ASCII码在BH中RORAL,CL;恢复AL原来的内容三、串操作指令将2000H:1200H地址开始的200个字节传送到6000H:2000H开始的存储单元中。程序段如下:MOVAX,2000HMOVDS,AX;设置源串段地址MOVAX,6000HMOVES,AX;设置目的串段地址MOVSI,1200H;设置源串偏移地址MOVDI,2000H;设置目的串偏移地址MOVCX,100;串长度送CXCLD;DF←0,方向为从低地址到高地址REPMOVSB;每次传送一个字节,并自动修改地址指针及CX内容;若修改后CX≠0就重复执行5
31把6000H:1200H开始的100个字节存储单元全部设置为55H。MOVAX,6000H
MOVES,AX;ES←目
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度教育培训机构师资培训合作合同
- 2024年度直播带货合作分成协议
- 船舶制造行业人才招聘服务合同二零二四
- 2024年度市场营销与策划合同
- 二零二四年度塑胶制品喷漆承包合同
- 常州2024年度火灾报警系统安装与维护合同
- 第六章2024年度影视制作与发行合同
- 二零二四年度瓶盖模具购销合同说明书(2024版)
- 二零二四年度技术开发合同:人工智能语音助手研发与推广合作协议
- 2024年度货物买卖合同with售后服务与质保条款
- 注册消防工程师2021年继续教育石油化工试题
- 药品质量检查原始记录
- 《通过练习学习有机反应机理》福山透三氢剑魔汉化
- DB43-T 2237-2021油茶嫁接苗与实生苗形态鉴别及检测
- 信息化建设项目监理工作总结报告
- 球罐喷淋管安装施工方案
- GB/T 6792-2009客车骨架应力和形变测量方法
- GB/T 31989-2015高压电力用户用电安全
- GRS-化学品管理手册
- GB 2721-2015食品安全国家标准食用盐
- 电气第一种第二种工作票专题培训课件
评论
0/150
提交评论