差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
自己设计一款cpu [2018/09/18 17:46]
group003 [让CPU运行软件程序]
自己设计一款cpu [2018/09/19 16:18] (当前版本)
group003 [让CPU运行软件程序]
行 428: 行 428:
      ​stp; ​   //停止      ​stp; ​   //停止
 </​code>​ </​code>​
-===设计用于检验汇编程序===+===设计用于检验汇编程序=== 
 +我们用该CPU的指令系统编写一个能够求出8!(8的阶乘)的汇编程序
 <code c> <code c>
 start: sdal 1   ;​将1送到累加器da的低8位 start: sdal 1   ;​将1送到累加器da的低8位
行 446: 行 447:
  stp  ​ ;​停止CPU运行   stp  ​ ;​停止CPU运行
 </​code>​ </​code>​
 +===用表来编译汇编程序===
 +现在程序的编译一般都有专门的汇编器,这里我们以人工绘表的方式来编译,这种程序编译表格是最基本的编译工具。\\
 +{{::​自己设计cpu_编译表.png|}}\\
 +左边“地址”一栏是程序存储器或数据存储器的地址编号,“标号”和“汇编程序”两栏是汇编程序,“二进制编码”一栏是二进制数的机器指令,“编译”一栏是十六进制的机器指令,“数据”一栏是数据变量的位置分配。最后两栏是该设计中的CPU指令和编码。\\
 +这个汇编程序使用了3个16位的数据变量 one、result、x。它们在存储器中的位置被安排在1,2,3号存储单元。\\
 +程序计数器pc的初始值是0,我们将标号start定位0号存储单元,依次往下排可以得到loop标注5号存储单元,exit是13号存储单元。\\
 +二进制编译一栏是对指令操作码和操作数的译码。左面5位是对应指令的编码,如sdal 编码是00100,右面的11位数是对应操作数的编码,其编码依据指令格式来确定。如果操作数是变量型操作数即one,result,x,则对应变量的存储单元地址1,2,3。如果操作数是立即数,则直接使用立即数本身。\\
 +====仿真检验CPU设计====