介绍
本实验是将CSAPP家庭作业后面的几个问题组合成实验作业。在实验中,我们需要修改处理器的HCL描述来增加新的指令、修改循环策略等,修改后的处理器能够被模拟,并通过运行自动化测试检测。
在本实验中,我们需要掌握Y86相关汇编语言的操作、以及对于Y86 HCL描述,并且对于流水线、程序的优化有一定的了解。
实验准备
下载实验包:archlab-handout.tar
(1)相关实验包可以到以下地址下载,里面还包含详细的答案,原始tar在CSAPP Lab original tar 文件夹下https://github.com/Davon-Feng/CSAPP-Labs。本文解答的内容在yzf-archlab_handout文件夹中
https://github.com/Davon-Feng/CSAPP-Labs/tree/master/yzf-archlab-handout(2)载入tar文件后,需要运用
tar xvf archlab-handout.tar
将文件解压。里面包含README, Makefile, sim.tar, archlab.ps, archlab.pdf, and simguide.pdf.(3)然后运用tar命令解压sim.tar文件,进入sim文件夹执行以下命令
unix > cd sim unix > make clean ; make
在make过程中遇到以下问题:(1).usr/bin/ld: cannot find -lfl (2).make: bison:命令未找到 (3) .make: flex:命令未找到
对于第(1)个问题,运用sudo apt-get install libfl.so解决
对于第(2、3)个问题,运用sudo apt-get install bison flex解决
2.学习和掌握《深入理解计算机系统》第二版中第4章、第五章
Part A
该实验中的任务为在sim/misc
文件夹中,运用Y86指令撰写并且模拟example.c文件中的三个函数的功能。并且运用YAS进行编译,运用YIS进行运行。Y86汇编程序的编写规则见CSAPP书本的P237页,Y86程序
本博主实现代码文件,见之前链接下载文件中sim/misc文件夹下的如下所示文件
相关编译运行代码如下
unix > ./yas A-sum.ys
unix > ./yis A-sum.yo
- 对下面的链接Sample linked list数据进行操作,实现sum_list()函数的功能
# Sample linked list 实验数据
.align 4
ele1:
.long 0x00a
.long ele2
.long 0x0b0
.long ele3
ele3:
.long 0
ele2:
.long 0xc00
/* linked list element */ 链表的定义
typedef struct ELE {
int val;
struct ELE *next;
} *list_ptr;
对于该实验要求作出的解答如下:
# 函数执行开始地址为0
.pos 0
init: irmovl Stack, %esp
irmovl Stack, %ebp
call Main
halt
# Sample linked list 函数操作中需要运用到的数据定义
.align 4
ele1:
.long 0x00a
.long ele2
ele2:
.long