计算机硬件试验一
辽宁工程技术大学上机实验报告辽宁工程技术大学上机实验报告 课程名称课程名称 实验题目实验题目 院系院系 姓名姓名 计算机硬件基础 实验一程序的机器级表示 软件学院 张雪聪 专业专业 学号学号 软件工程班级班级软件 16-4 2018.6.25 成绩成绩 16200104271620010427实验日期实验日期 1.掌握高级语言源程序和目标机器代码的不同表示及其相互转换。 实验实验 目的目的 2.深刻理解高级语言和机器语言之间的关系。 3.掌握子程序设计的思想、方法及上机调试过程。 4.理解中断服务子程序的执行过程 1.IA-32 中过程调用和返回指令的格式和功能。 实验实验 准备准备 实验实验 进度进度 实验实验 内容内容 2.子程序设计的思想和方法 3.过程调用的执行步骤 本次共有 1个练习,完成 1个。 包含本次实验项目要完成的实验内容、实验原理、实验步骤或过程;对原 始实验数据记录要详实。 1 .用 C 语言编写一个完整的源程序,实现 main 函数调用一个 子函数的功能。 1.1 程序代码 #include“stdio.h“ xy(int x) { x=x+1; printf(“%d\n“,x); } main() 实验实验 内容内容 (续)(续) { int x=1; xy(x); } 1.2 源程序流程图 开始开始 X=1X=X+1 xy(X) X 结束结束 1.2.1 main 函数流程图1.2.2xy 子函数流程图 2.在终端使用 gcc 编译器编译源程序,生成汇编文件并查看,分 析汇编指令与 C 源程序的对应关系。 2.1 启动虚拟机, 打开终端。 打开文本编辑器, 进入编辑模式。 在终端提示符下键入命令:gedit hello.c↙。 图 2.1进入编辑模式 2.2 将 C 源程序编辑好后,点击保存 实验实验 内容内容 (续)(续) 图 2.2编辑 c 源程序 2.3 在终端使用 gcc 编译器编译源程序,键入命令:gcc -S hello.c -o hello.s↙,在 home 文件夹下生成 hello.s 汇编文件 图 2.3 生成汇编文件 2.4 在终端查看汇编文件 hello.s,键入命令 cat hello.s 图 2.4 查看汇编文件 实验实验 内容内容 (续)(续) 3.对汇编文件进行汇编,生成可重定位目标文件。 图 3 对汇编文件进行汇编 4.对目标文件进行链接,生成可执行文件。 图 4.1生成可执行文件 实验实验 内容内容 (续)(续) 图 4.2执行 5.对可执行文件进行反汇编 图 5反汇编 实验实验 分析分析 记录实验的调试方法和运行结果;实验数据的分析和处理;实验过程;实 验中遇到的问题和解决方案。 【练习 1】 (1)该源程序取名 hello.c,通过汇编、连接后生成可执行文件 hello, 运行该文件显示的内容如下: (2)在终端使用 gcc 编译器编译源程序,生成汇编文件并查看,分 析汇编指令与 C 源程序的对应关系。 1.在汇编语言文件中 .globl xy .type xy, @function 对应源程序中对 xy 的声明 2.在汇编语言中 xy: pushl %ebp movl %esp, %ebp subl$24, %esp addl$1, 8(%ebp) movl $.LC0, %eax movl 8(%ebp), %edx movl %edx, 4(%esp) movl %eax, (%esp) callprintf leave ret .sizexy, .-xy 对应于源程序 xy 的定义 xy(int x) { x=x+1; printf(“%d\n“,x); } 其中 addl $1, 8(%ebp)对应 x=x+1;call printf 对应于源程序 中输出 x。 3.汇编语言中 实验实验 分析分析 ( (续续) ) main: pushl movl %ebp %esp, %ebp andl$-16, %esp subl$32, %esp movl movl movl call xy leave ret .sizemain, .-main $1, 28(%esp) 28(%esp), %eax %eax, (%esp) 对应于源程序中对于主函数的定义: main() { int x=1; xy(x); } (3)对可执行文件进行反汇编,分析汇编指令与源文件语句的关系, 找到主程序所对应的指令代码。 以下是主程序对应的反汇编指令: 080483e4 : 80483e4:55push%ebp 80483e5:89 e5mov%esp,%ebp 80483e7:83 e4 f0 and$0 xfffffff0,%esp 80483ea:83 ec 20sub$0 x20,%esp 80483ed:c7 44 24 1c 01 00 00movl$0 x1,0 x1c(%esp) 80483f4:00 80483f5:8b 44 24 1c mov0 x1c(%esp),%eax 80483f9:89 04 24mov%eax,(%esp) 80483fc:e8 c3 ff ff ffcall80483c4 8048401:c9leave 实验实验 分析分析 ( (续续) ) 8048402: 8048403: 8048404: 8048405: 8048406: 8048407: 8048408: 8048409: 804840a: 804840b: 804840c: 804840d: 804840e: 804840f: c3 90 90 90 90 90 90 90 90 90 90 90 90 90 ret nop nop nop nop nop nop nop nop nop nop nop nop nop 总结实验中存在的问题、数据结果、误差分析等;实验得出的主要结论; 实验的收获和体会;提出对实验的改进意见等。 1.存在的问题 一开始并不知道如打开终端,最后发现右键菜单中有此功能;虚拟机 的建造过程也因为不熟悉,消耗大量时间。 2.实验结论 高级语言和机器语言之间可以转换。 实验实验 总结总结 3.收获和体会 掌握了高级语言源程序和目标机器代码的不同表示及其相互转换;深 刻理解了高级语言和机器语言之间的关系;掌握了子程序设计的思想、方 法及上机调试过程;理解中断服务子程序的执行过程。 实验态度:好 较好 一般 不好 实验准备:好 较好 一般 不好 数据分析:好 较好 一般 不好 成绩成绩 评定评定 实验总结:好 较好 一般 不好 报告格式:好 较好 一般 不好