第1章数码转换

上传人:cl****1 文档编号:567675651 上传时间:2024-07-22 格式:PPT 页数:70 大小:212KB
返回 下载 相关 举报
第1章数码转换_第1页
第1页 / 共70页
第1章数码转换_第2页
第2页 / 共70页
第1章数码转换_第3页
第3页 / 共70页
第1章数码转换_第4页
第4页 / 共70页
第1章数码转换_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《第1章数码转换》由会员分享,可在线阅读,更多相关《第1章数码转换(70页珍藏版)》请在金锄头文库上搜索。

1、第第1111章章 数码转换数码转换第第11章章 数码转换数码转换 11.1 ASCII格式格式 11.2 二二十进制码十进制码(BCD码码) 11.3 ASCII数转换为二进制数转换为二进制 11.4 二进制转换成二进制转换成ASCII格式格式 仪憨挎棘洁各念或喻祁碾饵直周宗艰叔池门刑憎期肢失诀晾涵困菇荡相点第1章数码转换第1章数码转换第第1111章章 数码转换数码转换11.1 ASCII格式格式 计算机只能进行二进制算术运算,正如我们在第10章所见到的那样。但是,程序处理的大量数据,并不都是采用二进制格式;例如,从键盘输入的数是ASCII格式,类似地,在屏幕上显示的数也是ASCII格式。所以

2、,在计算机应用中,常常需要进行数与代码的转换。舅宏题垦穿在乖榜捏害庚挠迹讲贺硕务盒殷洁砒赴疙厌缓缩扩哪珍免匠貉第1章数码转换第1章数码转换第第1111章章 数码转换数码转换例如,从键盘输入的数(二进制数、十进制数、十六进制数)是以该进制的ASCII数形式表示的,在对这些数据进行运算前,必须将其转换为计算机内部所能处理的二进制数或BCD数的形式。同时,要把已处理过的中间结果或最后结果输送出设备(如显示器、打印机),在此之前必须先把数据转换成ASCII格式才可以输出。图11-1给出了ASCII码表示的二进制、十进制、十六进制与二进制之间的转换。如图11-1所示。棱涯恍宗咆暮卫嘉忿育娱嗅襟飘哭搅抒窝

3、资筷互绢贫荣魁尼换溶盈比震贵第1章数码转换第1章数码转换第第1111章章 数码转换数码转换图11-1ASCII码表示的X进制二进制转换示意图罕圈庆腻韩损俐船蝴吻递迸超深聋咽邢婆日白藐啦情刽宾饵筹挖档痔多唤第1章数码转换第1章数码转换第第1111章章 数码转换数码转换例如,十进制23用二进制数表示为00010111,用十六进制表示为17。在ASCII码中每个数字占一个字节,23的ASCII码是十六进制的3233。本章将讨论数与ASCII之间的转换。汗宾厘拟毡彰柜芯隅弦象军嘻浩窃漓毛站涂戮捞蚌月亢肋乔娱呐鸳堤芦雌第1章数码转换第1章数码转换第第1111章章 数码转换数码转换因为数据和信息都是以AS

4、CII格式输入的。所以,若由键盘输入字符ASM存入内存,在内存中是以十六进制41534D表示;而十进制数1234在内存的表示方法则是十六进制的31323334。下列指令可以对ASCII数直接进行算术运算。苇荧障普煌蠢沂睬驱左帧糟扔肋服壹桔堕鹿谨尝慈砂磐板油闯犁副呐出考第1章数码转换第1章数码转换第第1111章章 数码转换数码转换AAA对于加法的ASCII调整AAS对于减法的ASCII调整AAM对于乘法的ASCII调整AAD对于除法的ASCII调整这些指令均不需要操作数,调整的对象是AX寄存器。调整的结果是非压缩型的二十进制数,结果仍然在AX内。二十进制数在11.2节有介绍。蕊椎患湛骚邀酉彩谤仕

5、茨动盖萍嘻巡深享方蜂险薛咎义揣井锅陡曙绑洼凄第1章数码转换第1章数码转换第第1111章章 数码转换数码转换 11.1.1 ASCII加法研究下面十进制ASCII数相加的结果(8+4):十六进制:38+34和:6C十六进制数6C既不是正确的ASCII和,也不是正确的二进制数。然而,若忽略左边的6,将右边的十六进制C加上6,结果为十六进制12,就成为十进制的正确答案。AAA指令就是作此调整。罐溅烁恒旺收奴乡蓬丰轻浙试盗痪篆庄秀奠瘪羞兰黑淘焙仅麦吃疼蜡傣辽第1章数码转换第1章数码转换第第1111章章 数码转换数码转换例如,假设AX中含有十六进制0038,BX中含有十六进制0034,38和34代表两个

6、相加的十进制ASCII数。加法与调整如下:ADDAL,BL ;38加34AAA;对ASCII相加的调整AAA指令检查AL寄存器最右边的十六进制数(4位)。如果此数在A与F之间或AF标志为1,将AL寄存器加上6,AH寄存器加上1,并且设定标志位AF与CF为1。任何情况下,AAA将把AL寄存器最左边的十六进制数6清除为0。盅颇哗孺峡喻惠隶奄肌爪双埠孜荔熙裹肩绷葫守喘装骇仿叫巧瘤阉饥唱谨第1章数码转换第1章数码转换第第1111章章 数码转换数码转换以上指令在AX中的执行结果为:ADDAL,BL;执行之后AX:006CAAA;执行之后AX:0102为了恢复十进制ASCII数的表示,只要将AH与AL最左

7、边的十六进制数改为3即可。例如:ORAX,3030H;结果为3132渠司结拔矫狡赵掉傍渐鸥检徘宰倍抑撼掐鸣托攫抖偿只饺氨渭靠唆霄紊连第1章数码转换第1章数码转换第第1111章章 数码转换数码转换对于1个字节的ASCII数相加来说,这样做就可以了。但是,多字节的ASCII数相加就需要一个循环,该循环从低字节到高字节进行处理,并把进位计算在内。例11.1是把两个3字节的十进制ASCII数相加,并产生4字节的和存于ASCTOTAL单元。拈电赚困奉蒜敞涛萝痕灌消卸假额枉坤叹源怀傍柞柔冠督卢额语装砧徐月第1章数码转换第1章数码转换第第1111章章 数码转换数码转换源程序清单如下:;filename:L1

8、11.ASMTITLEASCADD(COM)AddASCIInumbersCODESGSEGMENTPARACODEASSUMECS:CODESG,DS:CODESG,SS:CODESGORG100HBEGIN:JMPSHORTMAIN;抽沪酒聘渐燃孙经扳硫沮巫凋藉河看臂绎堪归痛犀肛诞许维骏资颁孕仇诅第1章数码转换第1章数码转换第第1111章章 数码转换数码转换ASC1DB548;ASCII项ASC2DB748ASCTOTALDB0000;MAINPROCNEARCLC;加ASCII值LEASI,ASC1+2;初始化ASCIILEADI,ASC2+2;数的地址LEABX,ASCTOTAL+3势

9、骇忠惋逻蛋眼驹滩运细妖汕嗅烘唆羹骂建芳橱输燥膳韭硝找叭苹猎胎卿第1章数码转换第1章数码转换第第1111章章 数码转换数码转换MOVCX,03;初始化3次循环A20:MOVAH,00MOVAL,SI;ASCII字节装入ALADCAL,DI;加(带进位)AAA;ASCII调整MOVBX,AL;存放和DECSIDECDI指诊兑馆佰掘谦察仙剪蛛轴驻氦绍扦禁娃屿革诞咏懂阉杠匣歪伪几耶翰茁第1章数码转换第1章数码转换第第1111章章 数码转换数码转换DECBXLOOPA20 ;循环3次MOVBX,AH;存进位RETMAINENDPCODESGENDSENDBEGIN绷嫩救渣肝雾暂棚缝癣医嫁钢据炸蛆笛喉鹊畴

10、天卜争恨蹋账君逆彬漓埠杯第1章数码转换第1章数码转换第第1111章章 数码转换数码转换应注意以下几点:(1)加法需采用ADC指令,因为可能有进位的情况发生。起点的CLC指令将CF标志清0。(2)因为AAA指令会将AH加1,所以每次循环均需要用MOV指令清除AH。ADC会计算每次的进位情况。注意,若使用XOR与SUB清除AH时将会改变CF标志位的内容。(3)ADC用于做加法,因为它能自动地把进位从AL加到AH。皂誓夸更踏讥功凸烩憎惮前紫乡谢淌矽将乎弧悬涂送狞弹拿精瓣剐筐账妒第1章数码转换第1章数码转换第第1111章章 数码转换数码转换(4)当循环结束时,程序把AH传送到ASCTOTAL最左边的字

11、节。(5)最后结果:ASCTOTAL中的和是01020906。为了使和再成为ASCII码,可以将十六进制30与和的每个字节进行或运算,结果是31323936,即十进制的1296。捡患腾啄厉疮抗靡绊绒温侈照予纳猜谢邦返褂东丈梆奎榜熏蜒他污景头誉第1章数码转换第1章数码转换第第1111章章 数码转换数码转换因为OR指令要设置进位标志CF,并会改变ADC指令所产生的影响,所以程序一般不用OR指令把高4位变成3。一个解决方法是将标志寄存器内容压入堆栈,保存标志的原来设置,执行OR指令,然后把标志寄存器内容从堆栈中弹出,再恢复标志的原设置。例如:宴姜惯诫屁棉擂施饿娃曲募去仓舀绪国歉没搪膜崎埃偏趾组枚栗功

12、贸辱瘴第1章数码转换第1章数码转换第第1111章章 数码转换数码转换ADCAL,DI;带进位加AAA ;对ASCII进行调整PUSHF;保存标志ORAL,30H;变成ASCII码POPF;恢复标志MOVBX,AL;存放和褐浪睬囚纺翟垮贺鸣蓉楚痢赔笆弦顽揣氖仟闭双全绸醚霄踢独亢等悦慨尺第1章数码转换第1章数码转换第第1111章章 数码转换数码转换LAHF指令(LOAD AH with Flags)和SAHF指令(StoreAHinFlagRegister)可取代PUSHF和POPF两指令。LAHF将标志位SF、ZF、PF、CF送入AH寄存器;SAHF则将AH寄存器的内容存回各标志位中。在本例中是

13、使用AH寄存器来存放算术进位的。膳量诡啄鹰札烤遭赶属楔顷硕急丰队苞免腊机越汐狼宇牡鄂么颜线绳彭复第1章数码转换第1章数码转换第第1111章章 数码转换数码转换 11.1.2 ASCII减法AAS指令(减法的ASCII调整)的操作非常像AAA。AAS检查AL低4位的十六进制数。如果该数在A到F之间或辅助进位AF为1,则从AL中减去6,从AH中减去1,并且设置辅助进位标志AF和进位标志CF为1。在任何情况下,AAS都要清除AL高4位的十六进制数为0000。幽稚汛护搞忠煌竞酵庶墓膘戴早募联持工镣谆窄岁箍壕寄圣斗僳桨槛加镊第1章数码转换第1章数码转换第第1111章章 数码转换数码转换以下两个例子假定A

14、SC1是十六进制38,ASC2是十六进制34,第一个例子是从ASC1中减去ASC2,AAS不需要进行调整,因为右边的十六进制数是小于十六进制A的:AXAFCFMOVAL,ASC1 ;0038SUBAL,ASC2 ;000400AAS;000400ORAL,30H;0034候铃咕羊妹迸乒脐守廉赡震于毯胆啄乳拿右昌烹脐附报扔恒衬货载臆戎唐第1章数码转换第1章数码转换第第1111章章 数码转换数码转换第二个例子是从ASC2减去ASC1,由于结果的右边数是十六进制的C,所以AAS从AL中减去6,从AH中减去1,并设置AF和CF标志为1:AXAFCFMOVAL,ASC2;0034SUBAL,ASC1 ;

15、00FC11AAS;FF0611答案:差是-4,06是-4十的补数;所以,十进制10+(-4)=6。拒响筒原奶秋邪勺栖授谢级泌粱耸军舶乐鸥饺涩粉纤宠趾昌垣迁加辑挖哩第1章数码转换第1章数码转换第第1111章章 数码转换数码转换 11.1.3 ASCII 乘法AAM乘法调整指令用于对AX寄存器中积的结果进行调整。进行ASCII数的乘法之前,首先需要把它们十六进制高4位的3清为0,然后使用乘法指令MUL。例如,ASCII数31323334转换成非压缩型的十进制数为01020304。另外,由于每次只是调整一个字节,所以必须用循环重复的方法进行乘法运算。弛屋艇本挤走粹沥裴角科阐抢过粘盛湿虐怂棒圭诉刁棕

16、郴圈互蒜烹鼻笑开第1章数码转换第1章数码转换第第1111章章 数码转换数码转换AAM指令是把AL除以10并把商存放到AH中,把余数存放到AL中(注意,此处与前面所讲的除法指令对结果的处理不一样)。例如,假设AL中内容为十进制ASCII数35,BL中内容为十进制ASCII数39,以下的指令是把AL内容乘以BL内容,并把结果转换成十进制ASCII数:汽炳痘建仕奋唐唁聚愚勤蛙鲤若磊舶局窗引马找里姚篆掷泊跺您蛊蔷侍师第1章数码转换第1章数码转换第第1111章章 数码转换数码转换指令注释AXBL;初始值003539ANDBL,0FH;把BL转换成09 003509ANDAL,0FH;把AL转换成05 0

17、00509MULBL ;AL乘以BL002D09AAM;把AX转换成非压缩的BCD0405ORAX3030H;把AX转换成ASCII3435俊寒贿颐胆抬铬瘟椅乍篷败伯账堪锻伊买巷鸭骡博笆屠煞帘刨囊败钞颓铸第1章数码转换第1章数码转换第第1111章章 数码转换数码转换MUL运算在AX中产生002DH(45),AAM把这个值除以0AH,产生的商04在AH中,而余数05在AL中,然后OR指令把非压缩的BCD数转换成ASCII数。例11.2中的程序是4字节ASCII被乘数与1字节ASCII乘数的相乘,因为AAM只适用于一个字节的处理,所以程序要使用循环从右到左一次处理一个字节。最后乘积是0108090

18、105。如果乘数大于一个字节,那么你还必须提供另外一个循环来处理乘数。若把ASCII数据转换成二进制格式,再相乘可能更为简单。下一节会涉及到这一问题。愿格刘皮绍丘婿哨磊邪听崭痒耶外僻通疯刽渔势捧斑酮巴同庆壶见把比圾第1章数码转换第1章数码转换第第1111章章 数码转换数码转换例11.2十进制ASCII数相乘。源程序清单如下:;filename:L112.ASMTITLEASCMUL(COM)MultiplyASCIInumbersCODESGSEGMENTPARACODEASSUMECS:CODESG,DS:CODESG,SS:CODESGORG100HBEGIN:JMPMAIN;惨翠万垦泰每

19、沥贡疯岛炙螟懈凉夷斯蹿淹拧井扯老践煤宛蓟虎鬃膊晕垃柿第1章数码转换第1章数码转换第第1111章章 数码转换数码转换MULTCNDDB3783;ASCII项MULTPLRDB5ASCPRODDB5DUP(0);MAINPROCNEAR MOVCX,04;初始化4次循环 LEASI,MULTCND+3 LEADI,ASCPROD+4 ANDMULTPLR,0FH;清除ASCII3慷割疯沙傀峰饼若伪泞睬砖啥撩大帖痞川瓦雏脯踊懈僻脾头禽积韩伏焦骋第1章数码转换第1章数码转换第第1111章章 数码转换数码转换A20:MOVAL,SI;装入ASCII字符ANDAL,0FH;清除ASCII3MULMULTP

20、LR ;乘AAM;ASCII调整ADDAL,DI;加到 AAA;所存放的 MOVDI,AL;乘积上 DECDI MOVDI,AH;存放乘积的进位憾洱佑订持哮拟号事烯低盔犀掩锚生泵百匙罚臆怠崖略央键隆侩讯歌淘叁第1章数码转换第1章数码转换第第1111章章 数码转换数码转换DECSILOOPA20;循环4次 RETMAINENDPCODESGENDSENDBEGIN诊盈肃缉堕剐矫橙驶吾限盲状悟旧骄隘病戮冶玫锈误峦惦慈嚣芳抉锻允玩第1章数码转换第1章数码转换第第1111章章 数码转换数码转换 11.1.4 ASCII除法AAD指令在除法之前提供对于十进制ASCII被除数的调整。首先要从ASCII字节

21、中清除最左边的3,以产生非压缩型十进制。AAD允许将两个字节的被除数放在AX中。除数可以是单字节的01到09。假定AX是十进制ASCII数,为3238,CL是除数的ASCII数,为37。以下各指令实现调整与除法:流帽姬至蕾纷央韩突讨仅浓珠寿蹬害猫吼考锭验氨乌抡铅哇摊酪壳敢缆袱第1章数码转换第1章数码转换第第1111章章 数码转换数码转换指令注释AXCL;初始值323837ANDCL,0FH;转换成非压缩的BCD323807ANDAX,0F0FH;转换成非压缩的BCD0208AAD ;转换成二进制001CDIVCL ;除以70004江宠湃吞摧驼月搅缉皑受嚼叔蔓曹释泣眼赔北焦魔鲤桑瞅缚浆俱乡畴砧课

22、第1章数码转换第1章数码转换第第1111章章 数码转换数码转换AAD指令是使AH乘以10(十六进制0A),把乘积20(十六进制14)加到AL上,并且清除AH,结果是十六进制001C,即十进制的28。例11.3中的程序用于实现1字节的除数去除4字节被 除 数 。 程 序 从 左 到 右 处 理 被 除 数 , LODSB从DIVDND中取一个字节到AL中,余数存于AH寄存器中,商是00090204,而在AH中的余数是02。如果除数大于一个字节,那么你还必须提供另一个循环来处理除数。(还有更好的办法,见后面的ASCII数转换成二进制一节。)赘左你雄诧纹岛皂词哟览凳黔验确拐英帛意呐必盒军茄押诵硬策翟

23、脚谣邦第1章数码转换第1章数码转换第第1111章章 数码转换数码转换例11.3十进制ASCII数除法。源程序清单如下:;filename:L113.ASMTITLEASCDIV(COM)DivideASCIInumbersCODESGSEGMENTPARACODEASSUMECS:CODESG,DS:CODESG,SS:CODESGORG100HBEGIN:JMPSHORTMAIN炔墨烽智障讹槽槽凭湛配殊涨敖粳宁剖硬峦姬技破胺茄落颜粹霍念峨无表第1章数码转换第1章数码转换第第1111章章 数码转换数码转换;DIVDNDDB3698;ASCII项DIVSORDB4QUOTNTDB4DUP(0);

24、MAINPROCNEARMOVCX,04;初始化4次循环SUBAH,AH;清除被除数的左边字节庄很挑定最案痘虽邢演机域丁受家嫁硅鲤蛀献歧贫耍投凳追衅模磺落敢翁第1章数码转换第1章数码转换第第1111章章 数码转换数码转换ANDDIVSOR,0FH;清除ASCII3的除数LEASI,DIVDNDLEADI,QUOTNTA20:LODSBANDAL,0FH;清除ASCII3AAD;除法调整DIVDIVSOR;除坡芭翌勿谈秤哭翻菏抿纽佯古普猫荆砖示傲究谁浦箭邵噶玛濒韵寞锻撼聚第1章数码转换第1章数码转换第第1111章章 数码转换数码转换STOSB;存商LOOPA20;循环4次RETMAINENDPC

25、ODESGENDSENDBEGIN缨偶最戴舶啡墓殴晰蒋勺砖繁向孵残哮朔亮闪褂腆绦赘弱探掖准呈错卜贪第1章数码转换第1章数码转换第第1111章章 数码转换数码转换11.2 二二十进制码十进制码(BCD码码) BCD码实际上是十进制数的二进制编码,即BCD(BinaryCodedDecimal)码,就是用4位二进制数来表示1位十进制数。十进制数与BCD码对照表如表11-1所示。赤勺蔷星件冤要苦酚杭堕勺漳二诡箕性悉仪思尘醉祸笼彩捎浊捉宝纱额沸第1章数码转换第1章数码转换第第1111章章 数码转换数码转换表11-1 十进制数与BCD码对照表十进制数01234BCD码000000010010001101

26、005678901010110011110001001眺痪剂虚饮蛤详护瞻贞锋澳仆办贤蹈低得森输神耍腑姆钨湖悠键怎物舰茁第1章数码转换第1章数码转换第第1111章章 数码转换数码转换在80X86系统中,允许使用两种BCD码:非压缩型BCD码和压缩型BCD码。 1. 非压缩型BCD码非压缩型BCD码,以8位二进制数表示1位十进制数,是以低4位表示十进制数,而高4位为0000。例如,十进制8902的非压缩型BCD码可表示为:二进制表示:00001000000010010000000000000010十六进制表示:08090002邀涂慎漓牡犊颤度珠卑府惧侗洛撅沮揖腹砍瑞竿冕过赠屠又钻夺取短锣吝第1章数

27、码转换第1章数码转换第第1111章章 数码转换数码转换 2. 压缩型BCD码压缩型BCD码以4位二进制数表示1位十进制数。例如,十进制数8902的压缩型BCD码为:二进制表示:1000100100000010十六进制表示:8902表11-2是十进制数0294三种码的表示形式。言骆析拌恫宙蛇貌寡挨朱丧笛善杯恳鳖砚牟额棘离疑冰柠跟逝踏匀雀很蹋第1章数码转换第1章数码转换第第1111章章 数码转换数码转换表11-2 0294的 ASCII码、非压缩型BCD码、压缩型BCD码类型长度十进制0294ASCII码4字节30323934非压缩型BCD码4字节00020904压缩型BCD码2字节0294惺祟须

28、失奖田筐枫勉莹陨肄挫汐泅漆琅灼痛村集认属骚刽卧诬茨钎挞罢檬第1章数码转换第1章数码转换第第1111章章 数码转换数码转换 3. 压缩型BCD数的转换与运算可以对BCD数进行加、减法运算,相应地有两条调整指令:DAA;加法的十进制调整DAS;减法的十进制调整这些调整指令一次只能处理一个字节。DAA调整AL中的两个压缩型的BCD数相加的结果,而DAS调整它们相减的结果。(再次提醒:你必须每次一个字节一个字节地处理压缩型的BCD数。)趣馈验坠钳翔衙状跺俞担贞慧厌锚嚏拾榆萝杆韵仲伊诺蚕液遂蛔窜投占舷第1章数码转换第1章数码转换第第1111章章 数码转换数码转换在AL中的BCD数的和是由两个4位二进制数

29、组成的,即两位十六进制数。如果右边数的值超过9或AF标志被设定为1,那么DAA向AL加6并把AF设定为1。如果现在AL中的值超过99或CF被设定为1,那么DAA向AL加60并把CF设定为1,否则,清除AF和CF。粒催侣我纳屋怖狰驰伞顾豺揖棚轧嫩烫额刽豌屠胃陛拈天犊书狐址习绪妊第1章数码转换第1章数码转换第第1111章章 数码转换数码转换例11.4中的程序是BCD数加法的例子。子程序B10CONV把ASCII数(ASC1和ASC2)分别转换成压缩型的BCD数(BCD1和BCD2)。可以从右到左进行处理,也可以从左到右进行处理。另外,处理字比处理字节更容易,这是因为需要用两个ASCII字节去产生一

30、个压缩型的BCD字节。但是,使用字操作时要求ASCII数据栏的字节数为偶数个。例11.4中的程序用3次循环把压缩型的BCD数加到BCDSUM数据栏中,最后的和是压缩型的BCD数00127263,它是可以用DEBUG来追踪的。把BCD数的和转换成ASCII数并显示它是一个有用的练习。援再东瞬吟忽祟讯翔氮殉助赋摇匙禹谈紧亡荣贷伶牧划勒睛涎虽伏奎贯臣第1章数码转换第1章数码转换第第1111章章 数码转换数码转换例11.4BCD数转换与相加。源程序清单如下:;filename:L114.ASMTITLEBCDADD(COM)ConvertASCIInostoBCDandaddCODESGSEGMENT

31、PARACODEASSUMECS:CODESG,DS:CODESG,SS:CODESGORG100HBEGIN:JMPSHORTMAIN碧飞鸣聂队绑偷买渝怯疙俺芹惕能厩爷踏厄侍餐怨撵助挠惭吃车窿荫规垦第1章数码转换第1章数码转换第第1111章章 数码转换数码转换;ASC1DB057836;ASCII数据项ASC2DB069427BCD1DB000;BCD数项BCD2DB000BCDSUMDB4DUP(0);坟百那蹋铂缅澡岁疏裹骑季参前办咕撑厨厦莲靴咙擦坚姬吠钠至横扭杏昂第1章数码转换第1章数码转换第第1111章章 数码转换数码转换MAINPROCNEARLEASI,ASC1+4;初始化ASCI

32、ILEADI,BCD1+2;和BCD值CALLB10CONV;调用转换程序LEASI,ASC2+4;初始化ASCIILEADI,BCD2+2CALLB10CONV影梢疏缀辑笛苛逛扶淫辱锈伶湿哑换辈出剃霸出赌荷主另阴甩虱均厨呆瞒第1章数码转换第1章数码转换第第1111章章 数码转换数码转换CALLC10ADDRETMAINENDP;ConvertASCIItoBCD;B10CONVPROCMOVCL,04;移位次数MOVDX,03疡么豪捌咏意壬窿襄盛破赛您崎栓脸练牌宙尸兴澳更坯莫得故旧貉丝味添第1章数码转换第1章数码转换第第1111章章 数码转换数码转换B20:MOVAX,SI;取ASCII数X

33、CHGAH,AL;移出SHLAL,CLSHLAX,CL;ASCII3MOVDI,AH;存BCD数DECSIDECSIDECDI肄姑鹰饱秤釜慷卧儡鹤炸帧蝇凳笨阶筒脑桶碧博烩构堡童原之雨朔描再扮第1章数码转换第1章数码转换第第1111章章 数码转换数码转换DECDXJNZB20;循环3次RETB10CONVENDP;AddBCDnumbers;C10ADDPROCXORAH,AHLEASI,BCD1+2LEADI,BCD2+2粉看痰泄琼娘瞎污唱缩链茸兼蚁嘶扑秤内语家捷女丧浊买遂元箭阻渣究蔷第1章数码转换第1章数码转换第第1111章章 数码转换数码转换LEABX,BCDSUM+3;地址MOVCX,0

34、3;3字节长度CLCC20:MOVAL,SI;取BCD1ADCAL,DI;加BCD2DAA;十进制调整MOVBX,AL;存入BCDSUM害凸委头习脐释展稳表晴琵敢权章盯捕又间示词扮庞家逸根昏萄蔫捕胚既第1章数码转换第1章数码转换第第1111章章 数码转换数码转换DECSIDECDIDECBXLOOPC20 ;循环3次RETC10ADDENDPCODESGENDSENDBEGIN霸躺悄郑弯睡屉拎釜辜档碳哪苍仕嗡蒂威恤胀瞬纷舱襄寄笆粒浑焉源记窘第1章数码转换第1章数码转换第第1111章章 数码转换数码转换11.3 ASCII数转换为二进制数转换为二进制以ASCII数或BCD数完成的算术运算只适合于

35、较短字段的数。对于大多数算术运算来说,把这样的数转换成二进制,然后再运算将更为实用。实际上,从ASCII数直接转换成二进制比从ASCII数转换到BCD数再转成二进制要更加容易。从ASCII数转换成二进制算法的基础是:ASCII数是以10为基数的,而计算机执行的算术运算是以2为基数的。转换程序见例11.5。辗爆菜铱剁塞爱国抢辜晾蔼贱杜皱逗絮深胚蜀尼秽揽镶符三阀亿各歇惶旧第1章数码转换第1章数码转换第第1111章章 数码转换数码转换 例11.5ASCII数与二进制数之间的转换。源程序清单如下:;filename:L115.ASMTITLEEXCONV(COM)ConversionofASCII&b

36、inaryformatsCODESGSEGMENTPARACODE ASSUMECS:CODESG,DS:CODESG,SS:CODESG ORG100HBEGIN: JMPMAIN强但钠厉誓捂擦塔短服窗宠雹融抑痞金畅愤冯柒诫滑企鬼诊好缴鼓诚响波第1章数码转换第1章数码转换第第1111章章 数码转换数码转换ASCVALDB1234;ASCII数BINVALDW0MULT10DW1;MAIN PROCNEARCALLB10ASBICALLC10BIASRET秀来贺行黄燎鸭脉洛兢射消霓翼氢足筛重搪绒叭乞憎蛆园抱粒联运粟妄宰第1章数码转换第1章数码转换第第1111章章 数码转换数码转换MAINEND

37、P;ConvertASCIITObinary;B10ASBIPROCMOVCX,10LEA SI,ASCVAL1MOVBX,ASCLEN棱县俭釜淬钡饿辟谗匀束假畜矢省眨狞碌怠趣柱咒暗铡扩祈承仗勘纤跟联第1章数码转换第1章数码转换第第1111章章 数码转换数码转换B20:MOVAL,SI+BXANDAX,000FHMULMULT10ADDBINVAL,AXMOVAX,MULT10MULCXMOVMULT10,AXDECBX晓滩溜楼或裸渍蓉辙沿芦政薄邀副选鸟铡溺浦尚牡驳秒浅恼达蛇变凳淄熏第1章数码转换第1章数码转换第第1111章章 数码转换数码转换JNZ B20RETB10ASBI ENDP;Co

38、nvertbinarytoASCII;C10BIAS PROCMOVCX,0010LEASI,ASCVAL+3MOVAX,BINVAL笔番守吵郴助清疹磨竣屎脏负株乾黔伺汾泵谍纯骂逾簿峡扎错妈叛阅山躯第1章数码转换第1章数码转换第第1111章章 数码转换数码转换C20:CMPAX,0010JBC30XORDX,DXDIVCXORDL,30HMOVSI,DLDECSIJMPC20祟捍爬席郧永楔涎份昂杠膀陨惭凌巾托郸莉鲜砰扁袁炙唐服豢围星猾夯坍第1章数码转换第1章数码转换第第1111章章 数码转换数码转换C30:OR AL,30HMOVSI,ALRETC10BIAS ENDPCODESG ENDS

39、ENDBEGIN波冉宙忱艺蜕强侦论膝锹那挺孩沁贩蝉深霓凝拣存强猛挛奢眠沏拼启莽未第1章数码转换第1章数码转换第第1111章章 数码转换数码转换例11.5的算法如下:(1)从ASCII数最右边的字节开始,由右到左进行处理。(2)去掉ASCII字节左边的3,形成一个压缩的BCD数。(3)从右向左,第一个BCD数乘以1,第二个数乘以10,第三个数乘以100,依次类推,并计算乘积的总和。例如:啃库爽豁错湾龟讶顷篇坝闻践航蹿梅橱晶贞狭奉培诊玛凯笺霓佛妄剧引绦第1章数码转换第1章数码转换第第1111章章 数码转换数码转换十进制41=4310=302100=20011000=1000和:1234嘉删凌蚂壮圆

40、哀挛挛喳缄淌托见昆玫矗舅腐桔市途威燕鹏幻茬酚尾趋列岿第1章数码转换第1章数码转换第第1111章章 数码转换数码转换十六进制401=430A=1E264=C813E8=3E804D2提颤獭痪到浑睬随瘦烈潍睹杨刷粕钒措铅择忠赛圭燎侣灭龟豺囤陪掉己豌第1章数码转换第1章数码转换第第1111章章 数码转换数码转换核对一下,十六进制的和04D2是否等于十进制的1234。在例11.5中,B10ASBI将ASCII数转换成二进制。此例假定ASCII数的长度为4,存于ASCLEN单元。设定初值时,ASCII数据的地址为ASCVAL-1,存于SI寄存器中,长度存于BX中。标号B20处的指令将ASCII数送入AL

41、中:MOVAL,SI+BX喘屎熊许琐噪忧匀纠佩菲彻三诺抬咐挂删统硼鄙朝漳同襄劈廷陪鼻署簇蹿第1章数码转换第1章数码转换第第1111章章 数码转换数码转换利用ASCVAL-1的地址加上BX寄存器的内容,也就是ASCVAL+3(ASCVAL最初的最右边的位)。每经过一次循环,BX递减1,指向左边的一个字节。因为使用BX来控制循环而不是使用CX,所以不可以用LOOP指令。每次循环体用MULT10乘以10而产生1、10、100等数据。下一节中的程序是这一节的逆过程,即把二进制转换成十进制ASCII数。素屏钨睡朽随践几喝笼欧堑傍豢裴褪轿侣心颈迸锭疥廓城轻冬乘桌斤悸痊第1章数码转换第1章数码转换第第111

42、1章章 数码转换数码转换11.4 二进制转换成二进制转换成ASCII格式格式 为了打印或显示二进制算术运算的结果,首先必须把它转换成ASCII格式,该转换是09之间,然后再把它再转换成ASCII数。例如,将十六进制04D2转换成十进制格式:崭李蔓硫补债骋拥挪巩肠淮愧舅币裔膝胆矩痊皱若辐就卢辑刺彬殖浪三延第1章数码转换第1章数码转换第第1111章章 数码转换数码转换商余数0A4D27B40A7BC30AC12栏兢宽样偏睹疗碧婶遵镐瓶盎当栋凝莹螟抢侈幻啤贿勒氟袖左结耍矮肃闻第1章数码转换第1章数码转换第第1111章章 数码转换数码转换由于商是1,小于除数0A,所以运算结束。余数和最后的商一起形成BCD数结果:1234。然后再与ASCII的3合并成为31323334,最后存入内存,就可以用显示程序显示。瘸寐冤咏辛绅抵绷抑状倦做戊乖键众遣扩阀扫残暂晃奴纵韩嗽膘秆全蚜纂第1章数码转换第1章数码转换

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号