返回介绍

3.5 尝试手工汇编

发布于 2023-05-19 17:35:11 字数 3529 浏览 0 评论 0 收藏 0

在CPU的资料中,明确写有所有可以使用的助记符,以及助记符转换成机器语言后的数值。只要查看这些资料,就可以把用汇编语言编写的程序手工转换成机器语言的程序,这样的工作称为“手工汇编”。进行手工汇编时,要一行一行地把用汇编语言编写的程序转换成机器语言。下面就实际动手试一试。表3.2列出了汇编语言中必要指令的助记符、助记符所对应的机器语言,以及执行这些机器语言所需的时钟周期数

表3.2 从助记符到机器语言的转换方法

助记符         机器语言           时钟周期数

LD A,num        00111110 num        7

OUT(num),A      11010011 num        11

IN A,(num)      11011011 num        11

JP num          11000011 num        10

下面就从汇编语言的第1行开始转换。第一行的LD A,207匹配LD A,num这个模式,所以可以先转换成00111110 num。然后把十进制数207转换成8比特的二进制数,用这个二进制数替换num。即LD A,207的机器语言为00111110 11001111。由于这条指令存储在内存最开始的部分(00000000号地址),所以要把这条指令和内存地址像下面这样并排写下来

地址       汇编语言         机器语言

00000000  LD A,207         00111110 11001111

第二条指令OUT(2),A匹配OUT(num),A这个模式,所以可以先转换成11010011 num,然后把num替换成00000010,即用8比特二进制数表示的十进制数2,最终得到机器语言11010011 00000010,因为内存中已经存储了2字节的机器语言,所以这条机器语言要从00000010号地址(用十进制表示就是2号地址)开始存储

地址       汇编语言         机器语言

00000010  OUT (2),A        11010011 00000010

这之后由于LD指令和OUT指令又以相同的模式出现了3次,所以用相同的步骤转换成机器语言。请注意,机器语言每条语句的字节是多少,内存地址就相应增加多少

地址       汇编语言         机器语言

00000100  LD A,255         00111110 11111111

00000110  OUT (2),A        11010011 00000010

00001000  LD A,207         00111110 11001111

00001010  OUT (3),A        11010011 00000011

00001100  LD A,0           00111110 00000000

00001110  OUT (3),A        11010011 00000011

接下来是IN A,(0),匹配IN A,(num)模式,所以可以先转换成11011011 num,然后把num替换成00000000,即用8位比特二进制数表示的十进制数0,最终得到机器语言11011011 00000000.对于接下来的OUT (1),A,也可以按同样的方法转换

地址       汇编语言         机器语言

00010000  IN A,(0)         11011011 00000000

00010010  OUT (1),A        11010011 00000001

最后一句JP LOOP匹配模式JP num,所以可以先转换成11000011 num。请注意这里要用16比特的十进制数替代作为内存地址的num。在微型计算机中是以8比特的单位指定内存地址的,但在Z80 CPU中用于设定内存地址的引脚却有16个,所以在机器语言中也要用16比特的二进制数设定内存地址。JP指令跳转的目的地为00010000,即LOOP:标签所标示的语句LD A,0对应的内存地址。把这个地址扩充为16比特就是00000000 00010000。要扩充到16位,只需要把高8位全部设为0就可以了

还有一点请注意,在将一个2字节的数据存储到内存时,存储顺序是低8位在前,高8位在后(也就是逆序存储)。这样的存储顺序叫做“小端序”(Little Endian),与此相反,将数据由高位到低位顺序存储到内存的存储顺序叫做“大端序”(Big Endian)。根据CPU种类的不同,有的CPU使用大端序,有的CPU使用小端序。Z80 CPU使用的是小端序,因此JP LOOP对应的机器语言是11000011 00010000 00000000

地址       汇编语言         机器语言

00010100  JP LOOP          11000011 00010000 00000000

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文