返回介绍

3.4 追踪程序的运行过程

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

用汇编语言编写的程序是不能直接运行的,必须先转换成机器语言。机器语言是唯一一种CPU能直接理解的编程语言。从汇编语言到机器语言的转换方法稍后介绍,这里先看一下代码清单3.3,里面列出了事先转换出来的机器语言以及对应的汇编语言。1条汇编语言的指令所对应的机器语言由多个字节构成。而且,同样的汇编语言中的1条指令,有的指令对应1个字节的机器语言,有的指令则对应多个字节的机器语言。汇编语言中的1条指令能转换成多少条机器语言取决于指令的种类及操作数的个数。代码清单3.3中第一个内存地址是00000000(0号地址),下一个地址是00000010(2号地址)中间隔了2个地址,这说明如果从0号地址开始存储一条2字节的机器语言,那么下一条机器语言就从2号地址开始存储

下面就一边看代码清单3.3,一边跟随着CPU解释、执行机器语言程序吧。在这里,我们假设机器语言的程序是像代码清单3.3那样被存储在内存中的

一旦重置了CPU,00000000就会被自动存储到PC寄存器中,这意味着接下来CPU将要从00000000号地址读出程序。首先CPU会从00000000号地址读出指令00111110,判断出这是一条由2个字节构成的指令,于是接下来会从下一个地址(即00000001,1号地址,代码清单3.3中并没有标记出该地址本身)读出数据11001111,把这两个数据汇集到一起解释、执行。执行的指令是把数值207写入寄存器A,用汇编语言表示的话就是“LD A,207”,这时,由于刚刚从内存读出了一条2字节的指令(占用两个内存地址),所以PC寄存器的值要增加2,并接着从00000010号地址读出指令,解释并执行。

接下来的流程与此类似,通过反复执行“读取指令”“解释、执行指令”“更新PC寄存器的值”这3个操作,程序就能运行起来了。一旦执行完最后一行的JP LOOP所对应的机器语言,PC寄存器的值就会被设为标签LOOP:对应的地址00010000,这样就可以循环执行同样的操作。请重点观察PC寄存器是如何控制程序流程的

代码清单3.3 汇编语言与机器语言的对应关系

地址      机器语言                标签    操作码     操作数

00000000  00111110 11001111                   LD         A,207

00000010  11010011 00000010                   OUT        (2),A

00000100  00111110 11111111                   LD         A,255

00000110  11010011 00000010                   OUT        (2),A

00001000  00111110 11001111                   LD         A,207

00001010  11010011 00000011                   OUT        (3),A

00001100  00111110 00000000                   LD         A,0

00001110  11010011 00000011                   OUT        (3),A

00010000  11011011 00000000           LOOP:   IN         A,(0)

00010010  11010011 00000001                    OUT        (1),A

00010100  11000011 00010000 00000000           JP         LOOP

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

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

发布评论

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