模块 7 实现十六进制数向十进制数的转换
使用时,需将 7 个文件分别汇编,连接的方法为:
zcx+1+2+3+4+6+7
按“b”键根据提示输入字符或数字,按“q”键退出。
设计方案
(1)设计思路
本程序共由七个模块组成,其中 zcx 为主模块,调用模块 1 和模块 6,模块 1
又调用模块 2、3、4 和 5 四个模块。
模块 2 实现小写字母向大写字母的转换,主要利用小写字母的 ASCII 码值比
大写字母大 20H 的关系。
模块 3 实现大写字母向小写字母的转换,方法和模块 2 类似。
模块 4 实现二进制数向十六进制数的转换,用循环左移指令 ROL 每次移动 4
位,取出 移 到 最低 的 4 位 , 利 用十六进 制 数 所对应的 ASCII 码比其本 身 大
30H(0~9)或 37H(A~Z)的关系,将低 4 位转换成对应的 ASSCII 码,再调用
DOS 系统功能调用 2 号(显示字符)功能,将转换后的字符显示出来,如此循环
四次。
模块 6 实现十六进制数向二进制数的转换,第一步:实现十六进制数的输入
和对应二进制数的转换。利用 DOS 系统功能调用中的 1 号输入字符的功能,接收
输入的十六进制数,将其转换成对应的二进制数(若是 0~9 之间的数直接屏蔽高
4 位,若是 A~F 之间的数在屏蔽高 4 位后还要加 9)。 BX 中存放的是二进制数
的结果,利用算术左移指令每次将 BX 左移 4 位,然后与下一次转换后的数相加。
如此循环 4 次,得到对应的二进制数。第二步:实现显示转换后的二进制数。利
用 ROL 和 RCL 指令,从最高位起循环取出每位二进制数,将其转换成对应的
ASCII 码,调用 DOS 系统功能调用中 2 号(显示字符)功能显示。
模块 7 实现十六进制数向十进制数的转换。实现此功能分两步,第一步是实
现十六进制向二进制的转换,第二步是实现二进制向十进制的转换。第一步比较
容易实现,而第二步比较复杂。第二步的实现方法是将要转换的二进制数预先放
到 AX 寄存器中,判断 AX 中的数的符号,若是负数,则将负号送入输出缓冲区,
并求 AX 的绝对值;若 AX 中的数位正数,则不做处理,此时 AX 中即为无符号
二进制数。然后将无符号二进制转换成十进制数,将 AX 除以 10,得到第一个商
和第一个余数,第一个余数就是所求十进制数的个位;将第一个商除以 10,得到
第二个商和余数,第二个余数就是所求十进制数的十位数,重复以上操作,一直