当前位置:鱼C工作室 >汇编语言 > 查看文章

直接定址表02 – 零基础入门学习汇编语言73

第十六章:直接定址表02

 

让编程改变世界

Change the world by program


 

直接定址表

 

这一节课,我们将讨论用“查表”的方法编写相关程序的技巧。

任务:编写子程序,以十六进制的形式在屏幕中间显示给定的byte 型数据。

 

小小分析

 

一个字节需要用两个十六进制数码来表示,所以,子程序需要在屏幕上显示两个ASCII 字符。

我们当然要用“0”、“1”、“2”、“3”、“4”、“5” 、“6” 、“7” 、“8” 、“9” 、“A”、“B”、“C”、“D”、“E”、“F”这16个字符来显示十六进制数码。

我们可以将一个byte的高4位和低4 位分开,分别用它们的值得到对应的数码字符。比如 2Bh ,我们可以得到高4 位的值为2,低4 位的值为11。

那么我们如何用这两个数值得到对应的数码字符“2”和“B”呢?我知道,我们一看就知道是 2和 B ,但CPU 是 SB, 它不懂,它只懂 1 和 0。

 

最简单的办法就是一个一个地比较,如下:

如果数值为 0,则显示“0”;

如果数值为 1,则显示“1”;

:

如果数值为15,则显示“F”;

 

我们可以看出,这样做,程序中要使用多条比较、转移指令。程序将比较长,混乱。

显然,我们希望能够在数值0~15和字符“0 ~ F”之间找到一种映射关系。这样我们用0~15间的任何数值,都可以通过这种映射关系直接得到“0”~“F”中对应的字符。

 

数值0~9和字符“0”~“9”之间的映射:

数值 + 30h = 对应字符的ASCII值:

0+30h = “0”的ASCII值

1+30h = “1”的ASCII值

:

 

但是,10~15和“A”~“F”之间的映射关系是:

数值+37h=对应字符的ASCII值:

10+37h=“A”的ASCII值

11+37h=“B”的ASCII值

12+37h=“C”的ASCII值

:

 

可见,我们是利用数值和字符之间的这种原本存在的映射关系,通过高 4 位和低4 位值得到对应的字符码。但我们发现一个问题……

但是由于映射关系的不同,我们在程序中必须进行一些比较,对于大于 9 的数值,我们要用不同的计算方法。

这样做,虽然使程序得到了简化。但是,如果我们希望用更简捷的算法,就要考虑用同一种映射关系从数值得到字符码。

所以,我们就不能利用0~9和“0”~“9” 之间与 10~15 和 “A” ~“F ” 之间原有的映射关系。因为他们有两个映射关系,不满足我们的条件。

 

具体的做法是,我们建立一张表,表中依次存储字符“0”~“F”,我们可以通过数值0~15直接查找到对应的字符。

 

子程序实现代码:相关代码下载

 

分页阅读: 1 2 下一页
为您推荐

报歉!评论已关闭.