PA 2018 秋季 实验指导
本教程是针对 2018 年秋季《计算机系统基础》Programming Assignment (PA)实验的指导。本教程所使
用的框架代码可以通过以下方式获取。
git clone /ics-pa/pa2018_spring.git
拿到框架代码后,请注意以下几点(重要)
1)修改 Makefile.git 中的 STU_ID 填入学号 ;
2)在项目根目录执行 make clean。在提交时,使用 make submit 命令打包项目代码并上传压缩包 (详细内
容请参见 PA 0);
3)根据提示设置 git username 和 email 信息。
本实验教程是 PA 课堂教学的配套教程,其中理论部分主要依赖《计算机系统基础》理论课的教授。
整个 PA 实验由四个主要部分组成,分别是:
PA 1 - 数据的表示、存取和运算 PA 2 - 程序的执行
PA 3 - 存储管理 PA 4 – 异常、中断与 I/O
这四个阶段大致对应模拟器中对 CPU、MMU 和 Device 的模拟,涵盖计算机系统基础课程中的主要内容,
并尽力做到和理论课程的讲授进度的同步。
除 PA 0 和可选任务 以外,每一阶段的 PA 在教程中都会 以如下方式展开 :
1. 路线图 :指明当前完成的阶段的进度;
2. 预备知识 :简要讲述和回顾这一阶段实验所对应的理论知识,如不清楚,请结合理论课内容进行复习;
3. 代码导读和实验理解 :详细讲述实验所涉及的代码,并对实验中所需要完成的内容进行讲解和提示 ;
4. 实验过程及要求 :罗列实验步骤和要求,在每一阶段开始做之前,可以先看看这里的要求。
教程所涉及的主要参考资料
1. 课本
2. i386 手册
/6.858/2014/readings/i386.pdf
3. Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 1: Basic Architecture
/en-us/articles/intel-sdm
4. x86 Instruction Set Reference (i386 手册上没有的指令来这里找)
/x86/
1
Don’t
panic :-)
2
目录
PA 2018 秋季 实验指导 1
目录3
PA 0 实验环境配置4
PA 1 数据的表示、存取和运算 8
PA 1-1 数据在计算机内的存储9
PA 1-2 整数的表示、存储和运算 13
PA 1-3 浮点数的表示和运算17
PA 2 程序的执行24
PA 2-1 指令解码与执行 25
PA 2-2 装载程序的 loader 43
PA 2-3 可选任务:完善调试器48
PA 3 存储管理 58
PA 3-1 Cache 的模拟 59
PA 3-2 保护模式 63
PA 3-3 虚拟地址转换71
PA 4 异常、中断与 I/O 76
PA 4-1 异常和中断的响应 77
PA 4-2 外设与 I/O 83
PA 4-3 可选任务:游戏移植89
I386 手册勘误 94
Git 入门教程 98