引言
如果要处理一个与数相关的问题,不管是中间的、还是最终的结果我们都
希望能直观地在显示器上显示出来。数字计算机中的数据存储方式是由“0”和“1”组成的二进制码串根据不同的需要,我们往往要求数据的显示形式不一样如二进制、十进制、十六进制、八进制等等然而在汇编语言中实现数据的显示没有类似高级语言中的输出格式命令那么方便对每个数的显示一般都需要逐位地转换成ASCII码才能调用系统显示功能完成显示其中按不同的数制要求还要先完成数制间的转换。下面我们来探讨一个数如何编程让它分别按二进制、十进制、十六进制的数制形式显示在显示器上。
二、编程思路与算法
以一个16位二进制机器整数为例,它的二进制表示范围是01111111111111111B十进制的范围是065535(无符号数)-32768
+32767有符号数);十六进制表示范围是0000FFFFH。为方便说明
假设此数放在BX寄存器中下面介绍按不同进制形式显示的编程思路和算法。
按二进制形式显示
二进制只有“0”和“1”两个数字它们的ASCII码分别是30H31H
要逐位判断是“0”还是“1然后转换成对应的ASCII码即可。
实际编程时对于BX中的十六位二进制数可设置一个循环次数为16
循环体用向左的移位指令通过CPU标志寄存器中的CF标志由高位到低
位逐位判断、逐位取ASCII码值、逐位显示。当然也可以先将十六个数位都转
换成一个ASCII码串放入内存缓冲区后再按字符串方式显示要注意2种方法
在显示时系统调用的功能号不同。
按十进制形式显示
首先要完成二进制到十进制数的转换一般采用“除10取余”法来完成
大致过程如下将待转换的数BX除以10得到第一个商和余数
第一个余数就是所求的十进制数的个位再用第一个商除以10得到第二个商
和余数此第二个余数就是所求十进制数的十位……重复这一过程直至商为
0此时的余数就是所求十进制数的最高位。
      在内存中分配一缓冲区用来存放以上分离出来的十进制数的每一位汇编语言要什么基础,
后再逐个转换成ASCII转换成ASCII码的过程很简单就是给每个十进制
位加上30H即可最后送显示器输出。从转换的过程可以看出先分离出来的
是十进制数的低位要后显示后分离出来的是十进制数的高位应该先显示。
因此在编程时我们可以利用堆栈操作中“先进后出、后进先出”的特性当分离出各十进制位时依次入栈要逐个转换成ASCII显示时依次出栈。
按十六进制形式显示
十六进制与二进制有很好的对应关系4位二进制数和1位十六进制数
存在一一对应关系),显示时只需将原二进制数BX4位分成一组
按组求对应的ASCII码送显示器即可。
ASCII码与十六进制数字的对应关系为30H~39H对应数字0~941H~46H对应数字A~F从数字9AASCII码间隔了7H这一点在转换时要特别注意。为使一个十六进制数能按高位到低位依次显示实际编程中我们对先BX中的数每次循环左移一组4位二进制),然后屏蔽掉当前高12对当前余下的41位十六进制数求其ASCII要判断它是0~9还是A~F是前者则加30H得对应的ASCII后者则要加37H才行最后送显示器输出。以上步骤重复4就可以完成BX中数以4位十六进制的
形式显示出来。
三、汇编语言源程序实例
假设要将BX寄存器中的数分别按无符号二进制、十进制和十六进制显示在
屏幕上下面给出实现的汇编源程序均为子程序方式为了简明略去现场的
保护与恢复操作。
按二进制形式
DISPBXB PROC NEAR
MOV CX,16
LP:ROL BX,1
JC D1
MOV DL,30H
JMP OUTP
D1:MOV DL,31H
OUTP:MOV AH,2
INT 21H
LOOP LP
MOV DL,’B’;显示字母“B
MOV AH,2
INT 21H
RET
DISPBXB ENDP
(BX)=7FFFH则输出格式为0111111111111111B后面的大写
字母B表示二进制形式显示结果固定为十六位。
      按十进制形式
      DISPBXD  PROC  NEAR
      MOV SI,10
      XOR CX,CX
      MOV AX,BX
      NEXT:MOV DX,0
      DIV SI
      PUSH DX
      INC CX
      CMP AX,0;商为0则完成转换
      JNZ NEXT
      OUTP:POP DX
      ADD DL,30H
      MOV AH,2
      INT 21H
      LOOP OUTP
RET
      DISPBXD ENDP
此程序在转换和显示时的循环控制方式和二进制形式的例子不一样即显示
结果的位数是不固定的。若BX=7FFFH=32767,则显示结果为532767
BX=00FFH=255则显示结果为3255与十进制的有效位数相
同。
      按十六进制形式
      DISPBXH PROC NEAR
MOV CL,4
MOV CH,4
NEXT:ROL BX, CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL OUTP
ADD AL,07H;A~F要多加7
OUTP:MOV DL,AL
MOV AH,02H
INT 21H
DEC CH
CMP CH,0
JA NEXT
MOV DL,’H’显示字母“H
MOV AH,2
INT 21H
RET
DISPBXH ENDP
此程序的显示格式固定为4最后加上字母“H”表示为十六进制形式。设

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。