上海大学 计算机学院
《计算机组成原理实验》报告九
姓名: 学号: 教师: 时间: 机位 : 报告成绩:
实验名称: 建立汇编指令系统
一、实验目的:1.建立一个含中文助记符的汇编指令系统。
2.用建立的指令系统编制一段程序,并运行之。
二、实验原理:1.编制汇编指令:
在实验三的“举例”中我们编制了一条微指令,它实现“A+W的结果右移一位后的值输出到OUT”,本质上它是编制了这个微指令对应的24个控制信号的电平;实验四的任务3中,我们修改机器指令E8,使其成为“输出A+W的结果左移一位后的值到OUT”指令,它本质上是编制了μEM中从E8开始的连续4个地址中的24bit值,即连续的四条微指令;实验六的背景知识2使我们知道:“汇编指令是表达机器指令功能的指令助记符,二者的对应关系由编制的汇编指令表确定”。按步完成这三个编制过程,就定义好一条全新的汇编指令,进一步也可以定义一个汇编指令系统——指令集。
汇编环境CP226考虑到了教学上定义汇编指令系统的需求,提供了完成这三个编制任务的集成环境,只要按规定的格式送入编制的符号,系统就会生成相应的汇编指令或汇编指令系统。
2. 汇编表文件:
这个文件的后缀为 .DAT,它是一个二维表格式文件,其每一行对应一条指令,这个表共有3列,如图1。第一列是指令的汇编助记符,宽度为20个半角字符。第二列是指令的16进制编码形式(机器指令),在实验箱系统就是指令的微程序在μEM中的起始地址,宽度为8个半角字符。第3列是这条指令的字节数,宽度为1个半角字符,这是本表的重要汇编信息,也是设立本表的原因之一。
这个文件的主要作用是:当编译(汇编)源程序时,查此表把汇编指令翻译成机器指令。即这就是汇编表。
构造这个表文件时也不能带标题行。利用已有.DAT文件做为模板来构建新指令系统比较方便。具体操作见实验提示。
3. 微程序型指令文件:
这个文件的后缀为 .MIC,它也是一个二维表格式的文件,其每一行对应一条微指令,这个表共有11列(字段),每一列都定义好了属性和宽度,例如:图2是指令集insfile1.MIC的格式,这个指令集的全部内容见指导书103页到110页。
这个表的主要作用是:当系统调用此文件时把其第4列“微程序”的内容送入其第3列“微
地址”指定的μEM(微程序存储器)单元。即初始化μEM。表的第一列为指令的汇编助记符,内容与表1的第1列一致。5到11列是对本行微指令的说明,内容可以省略。
构造这个表文件时不能带标题行。利用已有.MIC文件做为模板来构建新指令系统比较方便。具体操作见实验提示。
4. 指令的机器码文件:
这个文件的后缀为 .MAC, 也是一个二维表格式文件,每一行对应一条指令,表共有5列,如图3。第1列是汇编助记符,宽度14,与表1的第1列一致。第2列是机器码1,它是指令的微程序在μEM中起始地址的二进制表示,其最后两位是对R0~R3的选择,所以与表2的第3列一致,宽度为15。第3列是机器码2,是指令带的立即数或存储器地址。第4列是机器码3,是指令带的第二个存储器地址,宽度2。第5列是注释,宽度100,用于对指令进行说明。实验箱默认的指令系统insfile1没有机器码3,其此表的具体内容见指导书101页和102页。
这个文件的主要作用是:解释汇编表的机器码细节,所以当编译源程序中的多字节指令时,可能要查此表。
构造这个表文件时也不能带标题行。利用已有.MAC文件做为模板来构建新指令系统比较方便。具体操作见实验提示。
三、实验内容:1.编制一个汇编指令系统,包含下例助记符:
① 输入 A,#*; ② A-W A,#*; ③跳到 *;④ 输出A;⑤延时
2. 用所编制的指令系统,写出源程序,完成OUT寄存器交替显示55,22,和55-22的值。交替频率为可以清晰辨识即可。
四、实验步骤:1.打开CP226程序。
2.在下拉菜单中选择:文件→打开指令系统/微程序。
3.在出现的对话窗中选择目录 c:\\ program files\\CP226计算机组成原理\\data\\。
4.在data目录中选择文件insfile1(.mic; .dat 或 .mac )并打开。 5.在源程序窗口按照显示出的文件格式打入自己编制的符号,删除原来程序的多余符号,存储新编制的文件到D盘。
DAT文件:
输入 A,#* 04 2 A-W A,#* 08 2
跳到 * 0C 2 输出 10 1 延时 14 1
MIC文件:
_FATCH_ T0 00 CBFFFF 01 FFFFFF 02 FFFFFF 03 FFFFFF 输入 A,#* T1 04 C7FFF7 A-W A,#* 跳到 * 输出 延时 MAC文件:
_FATCH_ 输入 A,#* A-W A,#* 跳到 * T0 05 CBFFFF 06 FFFFFF 07 FFFFFF T2 08 C7FFEF T1 09 FFFE91 T0 0A CBFFFF 0B FFFFFF T1 0C C6FFFF T0 0D CBFFFF 0E FFFFFF 0F FFFFFF T1 10 FFDF9F T0 11 CBFFFF 12 FFFFFF 13 FFFFFF T0 14 FFFFFF 15 FFFFFF 16 FFFFFF 17 FFFFFF 18 FFFFFF 19 FFFFFF 1A FFFFFF 1B FFFFFF 1C FFFFFF 1D FFFFFF 1E FFFFFF 1F CBFFFF
000000xx 000001xx 000010xx 000011xx 000100xx 000101xx 000110xx
输出 000111xx 延时 001000xx
6.调入之前编写好的文件“1.mic”,路径在自己定义的D盘内。 7.编写主程序,程序如下:
LOOP:输入 A,#55H 输出 延时
输入 A,#22H 输出 延时
输入 A,#55H A-W A,#22H 输出 延时
跳到 LOOP END
8.打开实验箱电源,进行编译和下载。 9.全速运行,观察运行情况并记录数据。 10.关闭软件以及实验箱电源。
五、实验现象:OUT反复显示 22、33和55。
六、数据记录、分析与处理:实验结果和预期的一样。
七、实验结论:实验现象和内存系统的基本原理的推论相一致。 八、建议:暂无。
九、体会:通过本次实验,与前面的一些实验我感觉又有了一定的难度,本次实验要求我们
自己动手自定义了一个指令系统,从而进一步熟悉掌握了汇编指令系统。实验内容基本不是很难,除了延时指令,其余都是根据所需指令的要求从原来的指令系统中找到类似指令,修改名字再重新编排地址。重点是格式的对齐,即使是在原文件基础上修改仍是容易出错,本次实验我就在空格的问题上纠结了好久,终于找到了错误的原因。总之,本次实验使我受益匪浅。
十、思考题:为什么汇编指令中可以用“中文符号”?
答:因为汇编指令都是助记符,计算机通过将汇编指令翻译成对应的机器指令来进
行运行处理。因此,不管用的是英文、中文还是日文,最后都是翻译成为机器语言。使用时依照约定好的语法规则对应使用即可。