首页 > 代码库 > 让cpu运行程序(三)

让cpu运行程序(三)

cpu的汇编程序设计

反映CPU功能的是它的指令系统,而指令系统设计得好不好,一般是反映在用这些指令编写的程序上。如果较多问题都能够用一个CPU的指令集编写的程序来处理,说明这个CPU的功能强大,反之就说明CPU的功能欠缺。

要检测我们设计的CPU是否达到了预期的目标,需要我们编写一定数量的汇编程序来对其进行测试。测试的时候,还必须将汇编程序转化成机器指令程序,不然CPU就无法识别。由此看来,学习计算机CPU设计制作,必须要学会汇编程序设计,还要能够将汇编程序翻译成机器指令程序。翻译汇编程序为机器指令程序的过程中,要知道程序出现的变量,需要安排到数据存储器的什么地方,还要将程序的存放首地址确定下来,然后确定好每一个程序标号的位置。因而,将汇编程序转化成机器指令程序,不仅仅是翻译的问题,还要进行规划,编排。所以人们将各种计算机语言翻译成机器语言的过程叫编译,其意思是说连编排带翻译。

这里我们就用上面设计的15条CPU指令系统,来编写一个能够求出64*53结果的程序。以这个程序为例,来说明汇编程序设计和编译的基本方法。作为练习,我们特意用加法来完成乘法运算,目的是运用更多的指令来编程,以便练习汇编程序设计与编译的方法。

例 3-1 编程计算64×53。

根据64*53问题所述要求,我们编写的汇编程序如下:

 1 start:        Sdal 1        ;    将1送da             2  3         Str    one        ;    放入one单元             4  5         Sub    one        ;    da置0                 6  7         Str    result    ;    result内放0             8  9         Sdal 64        ;    将64送da            10 11         Str    x        ;    da值存入x单元        12 13         Sdal 53        ;    将53送da            14 15         Str    y        ;    da值存入y单元        16 17 loop:    Lda    y        ;    y值送da                 18 19         Jz    exit        ;    da为0转到exit执行     20 21         Sub one        ;    da-1                     22 23         Str    y        ;    da值存入y单元         24 25         Lda    result    ;    da取result的值         26 27         Add    x        ;    result+x                 28 29         Str    result    ;    结果存入result         30 31         Jmp    loop        ;    转到loop执行         32 33 exit:        Out    result    ;    输出result内容         34 35         Stp            ;    停止         

汇编程序的基本单位是语句,一个语句的前面可以有标号,习惯上标号的后面要加冒号,以示与指令的区别。汇编程序中不论标号还是指令操作对象,一律使用标识符来表示。汇编程序的语句是以空格做为结束符,分号是注释符号,其后面的文字都不是程序有效内容。在汇编程序设计中,人们习惯将汇编指令的操作对象称为变量。

让cpu运行程序(三)