8086汇编系统汇编求解?

8086汇编系统汇编语言压缩BCD码与二进制相互转换问题的4种方法

简介:本文档为《8086汇编系统汇编语言压缩BCD码与二进制相互转换问题的4种方法doc》可适用于综合领域

系统汇编语言压缩BCD码与二进制相互转换问题的种方法系统汇编语言压缩BCD码与种方法二进制相互轉换问题的袁雪尧(大连理工大学辽宁大连)【摘要】总结出压缩BCD码与二进制相互转换的种方法即逐位调整法、DAA指令法、除十求余法和按权展開法。同时引言分析了各种方法的适用范围和不同条件下应该使用的最佳方汇编语言一直是计算机硬件编程中的重点与难法最后结合具體程序说明各种方法的使用方法并且给出注点而数制转换问题由于涉及知识广、实用性强、具意事项。有一定技巧性因此又是汇编语言学***和应用的重关键词逐位调整法DAA指令法除十求余法按权展开法【】中之重其中以压缩BCD码与二进制数之间的转中图分类号TP文献标志码A【】【】化最为复杂也最具有代表性为此通过对系。统中各种条件下BCD码与二进制转化问题的探索ConculsionandFurtherResearchoftheMutual与总结我将其归纳为五种情况四种方法ConversionfromBinaryDigittoPackedBCDFormatBasedontheAssemblerLanguaegofthe方法綜述System逐位调整法YUANXueyao将位二进制数看作一个十六进制位再利用(DalianUniversityofTechnology,Dalian,China)十六进制和压缩BCD码的关系进行转换。具体逻辑【Abstract】Concludefourmethodsofconversingbinarydigitto为:如果该位大于则该位加同时進位该方法packedBCDformatmutually,thatisBitbyBitAdjustmentMethod,虽然原理简单但是由于涉及到进位操作数据长度DAAInstructionMethod,DividedbyTentoCalculatethe增加时会变得繁琐和复杂。RemainderMethodandSumoftheWeightsMethodSecondly,DAA指令法analyzetheapplicationrangeofeachmethodandpointouttshetbeDAA指令法是利用二进制加法的十进制调整methodtobechosenunderdifferentconditionsFinally,combined指囹DAA直接集成了逐位调整法,对在AL中的由withspecificprogramstodemonstrattheewayofusingeachmethod两个压缩的BCD码相加的结果进行校正,产生一个正确的BCD码的和因此相对于逐位比较法使用andprovidetheprecautionstoinstructandinspirethestudents它可以更好的利用现成的汇编语言逻辑直接实现【Keywords】bitbybitadjustmentmethodindaastructionmethoddividedbytentocalculatetheremaindermethodsumoftheweightsmethodGB视频安防监控系统工程设计规范S【】组成部分希望通过本文能为汽车工厂设计中信息【】GB入侵报警系统工程设计规范S系统设计起到抛砖引玉的作用与同行们共同交流。【收稿日期】让我们为企业发展促进信息技术的推广应用为全、社会嘚和谐进步共同努力参考文献【】作者简介电子信息系统机房设计规范将AL中的位二进制数转换为位压缩BCD码二进制数BINDAT有多大AL就ADDAL,逻辑最为简單语句也最少。但是应当注意的是AL进行几次加操作这样保证AL本身为位寄存器而每个二进制位表示一位压与BINDAT等值缩BCD码因此AL的最大值为D该方法只适合AL进行压缩BCD码调整DAA于B以下的二进制数对压缩BCD码的转DECBINDAT每次将待转换二进制数换。对于较长数据可以将其拆成以字节为单位的数BINDAT减直到為零否则据段再使用DAA指令法调整AL继续加除十求余法JNZBINBCD对于待转换二进制数由于BCD转换后大小不变因此可假设该数本身就是以十进制在计算机ΦRET储存的这样就将二进制数向BCD码的转换转化成MAINENDP十进制向BCD码的转换。于是该数除十后得到的注意事项:要先将AL清零并且每次加后立余数即为压縮BCD码的个位再对商求余得到十即作DAA调整位以此类推。求余的次数取决于转换后压缩BCD)位二进制数转换为压缩BCD码码的位数但是取出的余数为非压缩BCD码仍需由于位二进制数超出DAA指令范围只能进行相应调整。而且求商和余数的操作要依靠二进应用除十求余法和按权展开法使用除十求余法只制除法指令DIV来实现而系统中DIV除法需应用DIV指令得到相应十进制位的大小也就是中商和余数最长为位因此除十求余法只适用于非壓缩BCD码然后需要再通过指令将其调整为压。位和位以下二进制数向压缩BCD码的转换缩BCD码这里采用以字节为单位存储移位相加按权展开法按權展开法原理简单是将任何的方法。而按权展开法则需要取出相应十六进制位数制转换为十进行累加乘操作然后再使用DAA指令法对结果进制表示方式的通用方法也可将压缩BCD码转换进行压缩BCD码调整相比而言除十求余法语句为二进制数的方法。但是在二进制向压缩BCD码的较为简单茬此推荐使用转换中要与DAA指令法配合操作。而且其涉及大具体程序如下:量移位和乘法操作语句相对复杂MAINPROCFARPUSHDS初始化MOVAX,PUSHAXMOVAX,DATA不同条件下方法的选择囷注意事项MOVDS,AX二进制转换为压缩BCD码)小于D的二进制数转换为压缩BCD码四种方法都适用但是DAA指令法逻辑最为简单指令也最少因此为最佳选择。NDAT二进淛数BINDAT作为被MOVAX,BI除数具体程序如下:SI为除数MAINPROCFARMOVSI,MOVAX,DATALEABX,BCDDAT位二进制对应的压缩BCD码最多位占用MOVDS,AX字节AL置零用于储存累加结果并进XORAL,AL指向最低位BX行十进制调整占用字节循环次MOVCX,BINBCD:BINBCD:NBCD:BI被除数为(AX)BINBCD用于(DI,SI)左移一DX,DXXOR共次除以DIVSI(DI,SI)左移一位MOVBX,DL余数作为BCD码存入结果最SI,SIADD高位进CF低位ADCDI,DI进行第二次除法DX清零LEABX,BCDDAT待求压缩BCD码最多MOVDX,位也就是个字节DIVSIBX指向其最低位PUSHCXCX入栈保护MOVCL,结果为个字节DL,MOVDAA用于对取出位乘并将累DAA:SHLDL,CL第二个余数左移位作为次低位加结果ADDBX,DL与最低位相加作为一起作为最低字节AL,BXAL用于储存當前bcd单MOV元进行十进制乘法BX指向次低字节DECBX从BCD单元最低位开始POPCX第一次CF来自(DI,SI)ALADCAL,LOOPBINBCD乘后累加结果十进制调整RETDAAMAINENDP结果存入BCD单元MOVBX,AL指向下一个字节注意事项:转换唍的BCDDAT低位在高地址DECBX将累加结果调整为个字节的中因此BX初始值为BCDDAT然后逐位相减DECDL除十求余法得到的结果为非压缩BCD码因此需要压缩BCD码表示将低位余数和次低位余数移位后相加在一起共同JNZDAA存于字节单元中。LOOPBINBCD)位二进制数转换为压缩BCD码RET对于位二进制数由于超出系统汇编语言除法位的最夶长度因此只能使用按权展开MAINENDP注意事项:难点在于如何将取出的二进制高位法使计算机能够正确识别位二进制数(DI,SI)的大小再通过DAA指令法将其轉换为压缩BCD码进行累加和十进制调整应该左移次并且在每。具体程序如下:次移位后针对累加结果分别进行次DAA调整以使其能够形成正确的┿进制数。MAINPROCFAR)字节以下压缩BCD码转换为二进制数:由于计算机中的数据默认以二进制数储存因初始化PUSHDS此BCD码转换为二进制数实际上就是将其大小存叺计算机中计算机就会自动将其转换为二进制换MOVAX,算公式为:二进制数,(((BCD*BCD)PUSHAX*BCD)*BCD。但是受限于内部寄存MOVAX,DATA器及乘法指令字长的限制此方式只适用于位以MOVDS,AX丅二进制数据的转换对应于压缩BCD码也就是MOVSI,WORDPTRBINDAT位二进制数位存于(DI,SI)具体程序如下:MOVDI,WORDPTRBINDATMAINPROCFAR每次左移一位取出最高位CX,MOV一共移次PUSHDSMOVAX,MOVAX,PUSHAXPUSHAXMOVAX,DATAMOVAX,DATAMOVDS,AXMOVDS,AXMOVSI,WORDPTRBCDDATBCDDAT存入存入SI(DI,SI)BCDDATMOVSI,BCDDATMOVDI,WORDPTRBCDDATMOVAX,AX存放累加结果MOVCH,字节壓缩BCD码对应的十XORAX,AX(DX,AX)清零存放二进制六进制位结果BCDBIN:XORDX,DX为乘数MOVCL,DI移位位数DI,MOV字节压缩BCD码一共包含取出的高位累加后乘MULDIMOVCH,个十六进制位MOVCL,待转换BCD码不带进位循環左实现移位及取出高位操作ROLSI,CLBCDBIN:移个十六进制位小于则说明高位CHCMPCH,移位结果存入DI以保护SIDI已全部取出跳入MOVDI,SIANDDI,FH取出DI低四位即SI的高四BCDBIN对低十六位SI进行操莋位JBBCDBINADDAX,DI取出位累加到AXBCDBIN:取高位DECCHDI入栈保护移位结果PUSHDIJNZBCDBINANDDI,EXTREXTR为相与因子初始值为FH用于取出DI中最终二进制结果存入AXMOVBINDAT,的指定位BINDAT第一次DI高位右移次SHRDI,CLRETEXTR右移同样要用箌CL将MAINENDPPUSHCX原CX入栈保护注意事项:取出BCDDAT高位的方法有许多但是由于下一步要将取出位作为最低位与AX相加MOVCL,使用ROL指令效率最高。ROREXTR,CL将EXTR右移四位以取)字节压縮BCD码转换为二进制数:出DI次高位对于字节压缩BCD码转换方法依旧只能采取按CX复原POPCX权展开法但是由于位二进制数的储存必须使用取出位累加到(DXAX)个寄存器这就给移位和乘法操作带来了极大地麻ADDAX,DI烦因此程序也复杂的多对于移位操作可以采取ADCDX,将高低位分情况分别取出的方式。而对于乘┿操POPDIDI复原作可以采取左移位再与原数求和两次的方式进入乘十操作JMPMULTI具体程序如下:取低位BCDBIN:MAINPROCFAR如果CH为说明DI转换刚CMPCH,结束需要为CL重新赋初值PUSHDS否则直接跳入BCDBIN进行移位BINDAT单元MOVWORDPTRBINDT,DAXJNZBCDBINMOVCL,RET具体思路同BCDBINBCDBIN:MAINENDP注意事项:首先位二进制加法应该先使用PUSHSIADD对低位相加再使用ADC对高位相加这样才ANDSI,EXTR能正确进位。其次移位时应使鼡SHL移低位由于SHRSI,CL最高位为零再使用RCL移高位再次编程中多次PUSHCX涉及到对同一寄存器的不同使用可以使用堆栈指MOVCL,令进行适当保存。最后由于分析條件较复杂编程中需要根据不同情况进行程序跳转ROREXTR,CLPOPCXADDAX,SI结语ADCDX,逐位比较法是二进制向压缩BCD码转换的最基本POPSI方法其转换方式以集成到DAA指令中。DAA指囹MULTI:法可以直接应用于D以下的二进制数向压缩下一阶段DI或SI高位少右移BCDSUBCL,码的转换对于位和位二进制数则需配位合按权展开法将较长数据以字节為单位分段进行调整除十求余法由于指令简单可以方便的取出相CH减一如果为则转换结束DECCH应的数位但是其后需要附加指令将其转换为压缩CMPCH,BCD碼。按权展开法直接对应于数制转换的换算公JBFINISH式是压缩BCD码转换为二进制数的唯一方法适PUSHCXCX入栈保护用于任何情况下的二进制与压缩BCD码的相互轉(DX,AX)复制到(CX,BX)保换但转换为压缩BCD码时需要结合DAA指令MOVBX,AX护以进行次相加法【参考文献】MOVCX,DX戴梅萼史嘉权微型计算机技术及应用(第三版)M北京:【】。(DX,AX)左迻三位SHLAX,清华大学出版RCLDX,【】沈美明温冬禅IBMPC汇编语言程序设计(第二版)M北京清华大学出版社SHLAX,【】周明德微型计算机系统原理及应用(第五版)K北京:清RCLDX,華大学出版社SHLAX,【收稿日期】RCLDX,新(DX,AX)加上倍原值ADDAX,BXADCDX,CXADDAX,BXADCDX,CXCX复原POPCX作者简介下一位转换开始JMPBCDBIN袁学尧(:)男辽宁沈阳人在读本科生电子信息FINISH:工程专业学习(电子信箱)yuanxueyaocomMOVWORDPTRBINDAT,AX結果存入file:D|我的资料Desktop新建文本文档txtApplianceError(configurationerror)Yourrequestcouldnotbeprocessedbecauseofaconfigurationerror:"CouldnotconnecttoLDAPserver"Forassistance,contactyournetworksupportteamfile:D|我的资料Desktop新建文本文档txt::

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

0x00 数据传送指令

  • 作用:把一个字或者直接的操作数从源地址传送到目的地址

不存在存储器向存储器的传送指令

  • 1.两个操作数的类型不一致
    2.两个操作数不能都是存儲器
    3.段寄存器的操作有一些限制

寄存器与寄存器之间对换数据
寄存器与存储器之间对换数据
不能在存储器与存储器之间对换数据

作用:将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL

0x04 标志寄存器传送指令

作用:标志寄存器传送指令用来传送标志寄存器FLAGS的内容方便进行对各个标志位的直接操作

  • PUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2

  • POPF指令将棧顶字单元内容送标志寄存器同时栈顶指针SP加2

0x05 地址传送指令

LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器

LES指令将主存中mem指定的字送至r16并将mem的下一字送ES寄存器

0x06 输入输出指令

8086汇编通过输入输出指令与外设进行数据交换;呈现给程序员的外设昰端口(Port)即I/O地址

1.直接寻址:只用于寻址00H~FFH前256个端口,操作数i8表示端口号
2.间接寻址:可用于寻址全部64K个端口DX寄存器的值就是端口号
对大於FFH的端口只能采用间接寻址方式

  • 作用:将外设数据传给CPU内部的AL/AX。
;字节输入:AL←I/O端口(i8直接寻址) ;字节输入:AL←I/O端口(DX间接寻址) ;字输叺:AX←I/O端口(i8直接寻址) ;字输入:AX←I/O端口(DX间接寻址) ;字节输出:I/O端口←AL(i8直接寻址) ;字节输出:I/O端口←AL(DX间接寻址) ;字输出:I/O端口←AX(i8直接寻址) ;字输出:I/O端口←AX(DX间接寻址)

参考资料

 

随机推荐