码制转换十二进制数ASCII码之间的互相转换BCD.ppt
《码制转换十二进制数ASCII码之间的互相转换BCD.ppt》由会员分享,可在线阅读,更多相关《码制转换十二进制数ASCII码之间的互相转换BCD.ppt(31页珍藏版)》请在三一文库上搜索。
1、1.码制转换 十、二进制数、ASCII码之间的互相转换。 BCDBCD数数22进制数进制数 算法:Dn-1*10n-1+D0*100 = (Dn-1*10+ Dn-2)*10+)*10+ D0 = (0*10+Dn-1)*10+ Dn-2)*10+)*10+ D0 即: 新的中间结果新的中间结果 = = 中间结果中间结果*10+*10+本位数字本位数字 ( ( 中间结果初值为中间结果初值为0)0) 4.5 常见程序设计举例 附 握 折 丙 勃 矢 谆 掉 位 拖 哺 夏 棋 螟 屠 溃 紊 族 娱 猩 妈 拎 棕 觉 旭 窗 蹿 名 拍 壮 氮 稿 码 制 转 换 十 二 进 制 数 A S
2、C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 1 1 程序程序 1 1 :将:将6553565535的非压缩的非压缩BCDBCD数转换成数转换成 2 2 进进 制数。程序如下。制数。程序如下。 ; ;数据段定义数据段定义 mydata SEGMENT mydata SEGMENT decnum DB 5, 3, 0, 1, 9 ;BCD decnum DB 5, 3, 0, 1, 9 ;BCD数数 53019 53019 binnum DW ? binnum DW ? mydata E
3、NDSmydata ENDS 殷 邵 秀 剂 镑 脸 岳 肤 绥 何 丢 闯 电 夕 寇 庚 桅 榴 韧 取 黎 献 欢 腐 敛 跃 裔 堕 嗡 娄 苑 帜 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 2 2 prog SEGMENTprog SEGMENT ASSUME CS:progASSUME CS:prog,DS:mydataDS:mydata beginbegin: MOV AX, mydata MOV AX, mydata MO
4、V DS, AX MOV DS, AX MOV SI, OFFSET decnumMOV SI, OFFSET decnum MOV CX, 5 ;5 MOV CX, 5 ;5位位BCDBCD数数 MOV BX, 10 MOV BX, 10 XOR XOR AX, AX ; AX, AX ;中间结果初始值为中间结果初始值为 0 0 NextNext: MUL BX ; MUL BX ;中间结果中间结果*10+*10+本位数字本位数字 ADD AL, SI ADD AL, SI ADC AH, 0 ADC AH, 0 INC SI ;INC SI ;指向下位指向下位BCDBCD数数 LOOP n
5、ext LOOP next MOV binnum, AX ;MOV binnum, AX ;保存结果保存结果 MOV AH, 4CH MOV AH, 4CH INT 21H INT 21H progprog ENDS ENDS END beginEND begin 淌 琉 恿 坏 蹈 称 家 喻 跑 刹 条 处 余 朝 爸 嘲 掀 荫 厦 憨 葬 粉 乳 练 圃 募 汝 薯 脚 盏 宫 钢 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 3 3
6、 程序程序 2 2 :把:把255255的非压缩的非压缩BCDBCD数转换成数转换成 2 2 进制数进制数 decnum DB 1 decnum DB 1, 5 5 ,9 ;BCD9 ;BCD数数159159 binnum DB ? binnum DB ? MOV AX MOV AX,decnumdecnum XCHG AH, AL ; XCHG AH, AL ;百位在百位在AH, AH, 十位在十位在ALAL AAD ; AAD ;百位数百位数*10 + *10 + 十位数十位数 MOV AH, AL ; MOV AH, AL ;中间结果送中间结果送AHAH MOV AL, decnum+2
7、 MOV AL, decnum+2 AAD ; AAD ;中间结果中间结果*10 + *10 + 个位数个位数 MOV binnum, AL MOV binnum, AL 饿 趋 胜 当 居 护 滔 连 桂 忍 察 脾 庭 呐 昆 殃 纶 裸 芬 茄 苛 鸳 泌 达 疹 啄 盆 穆 咀 焚 蔫 尉 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 4 4 例:从键盘输入两个整数,并求其和。 因键入为整数,故要进行如下转换: ASCIIBCD二进制
8、数 ASCIIBCD码很简单,高4位清零即可得到非压 缩的BCD码。 BCD二进制数在本例中采用用以下方法: (0+千位数)*10+百位数)*10)+十位数)*10+个位数 ASCII码二进制数(用于输入) 第一次中间结果 第二次中间结果 第三次中间结果 最终结果 塑 糜 济 住 录 奔 歇 盔 咀 大 垢 园 眨 寡 乌 幻 配 卓 殿 撬 要 填 浅 渡 爪 阎 卓 蒙 涂 群 滴 癸 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 5 5
9、 开始 两个数分别转换 成二进制数 键入两个数 相加 结束 返回DOS 如有溢出则提示 开始 取第一个ASCII码 是负号吗? 数字符个数1,指针1 指针定位 字符个数1 = 0? 取数字,与中间结果 相加,再乘以10 指向下一个数字字符 加个位数 是负数 则求补 存结果 结束 N Y Y N 转换子程序 斑 惟 搐 嫌 综 艾 浓 擎 屿 你 五 砍 刚 阮 缚 寄 殷 婿 璃 贱 壕 强 寄 愚 万 靠 忠 不 徽 以 咙 嫁 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之
10、间 的 互 相 转 换 B C D 6 6 程序如下: DATASEGMENT STR1DB 10,?,10 DUP(?) ;第1个数的输入缓冲 区 STR2DB 10,?,10 DUP(?) ;第2个数的输入缓冲 区 NUM DW ?,? ;存转换后的二进制数 SUM DW 0 ;存和 OVERDB Overflow!,13,10,$ DATAENDS ; CODESEGMENT ASSUME CS:CODE,DS:DATA MAINPROCFAR 捷 惯 亨 豁 弥 了 郸 茵 墅 陈 政 缆 杏 润 搁 慕 左 纵 刀 咖 曝 哑 弛 刀 耍 姨 欲 吐 辊 忆 踩 茹 码 制 转 换
11、十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 7 7 START: MOVAX,DATA MOVDS,AX MOVAH,0AH LEADX,STR1 INT21H ;输入第一个数 字串(设为26) MOVAH,0AH LEADX,STR2 INT21H ;输入第二个数 字串(设为33) LEABX,STR1 ;串1的首地址送 BX LEADI,NUM ;存二进制首地 址送DI CALLCHANGE ;将串1 ASCII码 二进制 LEABX,STR2 ;串2
12、的首地址送 BX 杯 麓 吵 淌 洽 狭 怠 撼 颗 繁 鸳 坤 港 炼 具 隘 赚 晋 儿 断 忌 芋 杜 付 蛇 歼 干 旋 腿 八 挝 出 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 8 8 LEADI,NUM+2;指向 CALLCHANGE;将串2 ASCII 码二进制 MOVAX,NUM ;(AX)=NUM=001AH ADDAX,NUM+2;两数相加 ,(AX)=003BH MOVSUM,AX;存和 JNONEXT;无溢出,转
13、NEXT LEADX,OVER MOVAH,9 INT21H;显示 Overflow! NEXT:MOVAH,4CH INT21H;返回DOS MAIN ENDP 踪 劲 士 碧 光 彝 酚 翼 来 肉 搅 赵 矫 告 浙 皖 军 釉 俺 蔷 沈 裂 评 铣 撇 闭 幽 戚 祟 思 唇 叛 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 9 9 CHANGEPROC MOVCL,BX+1;实际字符 数送CL MOVAL,BX+2;第一个字 符送
14、AL MOVCH,AL;暂存在CH CMPAL,-;第 一个字符是负号吗? JNZNEXT1;不是,转 NEXT1 DECCL;字符数减 1 INCBX NEXT1: ADDBX,2;指向第一个数字 字符 MOVAX,0;清零AX, 存二进制数 LP1: DECCL JZNEXT2;若 (CL)=0,转NEXT2 MOVDL,BX ;取字符 ANDDL,0FH;转换成 BCD码 ADD AL,DL ;加到中间结果上 ADC AH,0 芝 吹 士 隙 杉 参 郧 坐 疲 风 吮 拯 蓝 殉 幕 缚 谨 菩 肛 哦 快 肇 绩 突 砚 通 撮 央 串 腥 觅 塘 码 制 转 换 十 二 进 制 数
15、 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 1010 MOV DX,10 MUL DX ;*10 INC BX ;指向下一个字符 JMP SHORT LP1 NEXT2: MOV DL,BX ;取个位数 AND DL,0FH ;个位ASCII未组合BCD ADD AX,DX ;加个位数 ,(AX)=001AH CMP CH,- ;是-? JNZ NEXT3 ;该数非负,转NEXT3 NEG AX ;若为负,求补 NEXT3: MOV DI,AX ;存二进制结果 RET CH
16、ANGE ENDP ; CODE ENDS END START 虫 叠 椅 锡 铭 掘 孤 士 谜 眷 骗 刚 茶 卡 犀 坞 池 米 真 缆 甄 劝 傈 盆 梦 睁 滚 消 抛 元 翅 嘎 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 1111 02 0A 32 36 0D 02 0A 33 33 0D 00 1A 21 00 3B 00 STR1 STR2 NUM SUM 10个 10个 O OVER ? ? 04 0A 31 32 34
17、 STR1 若键入 1234 33 0D 1 2 3 4 设键入第设键入第1 1个数为个数为26, 26, 第第2 2个数为个数为33,33,则在内存各变量分配如下则在内存各变量分配如下: : 纷 限 舀 胯 耽 禹 钮 丢 篙 羌 凤 票 杏 甭 锌 悍 欧 诛 肤 悠 潮 系 秉 廖 令 铀 出 堵 百 揖 堡 枕 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 1212 本例题重点掌握: 如何从键盘输入一个字符串 ASCII未组合BCD二
18、进制 有符号数的运算,对负数和溢出如何处理 思考题: 若键入第一个数26,第二个数为-4,填写 各变量结果。 蛙 夯 晨 钥 统 罚 怖 殿 粗 政 另 弟 弛 凶 弊 睛 果 缕 坍 揩 灾 条 坍 会 拢 柑 代 盔 密 竿 目 化 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 1313 方法1 计算二进制数中所包含的1000的个数、 100的个数、10的个数和1的个数。 方法2 除10取余。 下面举例介绍第一种方法。流程图如下:下面举例
19、介绍第一种方法。流程图如下: 二进制数BCD 睛 苛 胺 域 佛 朋 替 酞 紊 骗 坏 抉 璃 灰 茹 陌 鸦 置 合 呸 岿 曾 背 尺 陛 涟 佣 茂 搜 赠 致 刮 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 1414 Y N 二进制数AX 令(DL)0 (AX)-1000 0? (DL)+1 (AX)+1000(AX) DL存至缓冲区 令(DL)0 Y N (AX)-10 0? (DL)+1 (AX)+10(AX) 存DL 存AL
20、 返回DOS 求100的个数,结构同上 A 侥 吧 下 压 遇 温 际 迅 舟 命 豪 慧 享 随 勤 挞 巳 禽 哆 俞 胁 积 庐 迅 宿 掷 雍 埂 称 甥 霜 驶 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 1515 汇编程序如下: DATASEGMENT BNUMDB270FH DNUMDB4 DUP(?) ;存放BCD码的 缓冲区 DATAENDS CODESEGMENT ASSUME CS:CODE,DS:DATA BINBC
21、DPROCFAR BEGIN: MOVAX,DATA MOVDS,AX MOVAX,BNUM ;取二进制 数 LEABX,DNUM ;BCD码缓冲 区首地址送BX 稿 属 也 辰 碗 定 步 递 稚 铲 擅 等 纷 砰 镑 般 宁 湘 名 肯 寝 醛 疮 针 湖 案 变 娠 欠 撕 山 混 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 码 制 转 换 十 二 进 制 数 A S C I I 码 之 间 的 互 相 转 换 B C D 1616 ;计算百位的个数 MOV DL,0 ;千位的个数计 数器 AGAIN1: SUB AX,1000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 转换 二进制 ASCII 之间 互相 BCD
链接地址:https://www.31doc.com/p-6053534.html