【实验一】计算机是怎样工作的?
来源:互联网 发布:培训出来的程序员 编辑:程序博客网 时间:2024/04/30 03:26
- 请使用Example的c代码分别生成.cpp,.s,.o和ELF可执行文件,并加载运行,分析.s汇编代码在CPU上的执行过程
- 实验报告要求:通过实验解释单任务计算机是怎样工作的,并在此基础上讨论分析多任务计算机是怎样工作的。
- 实验报告以博客URL方式提交,提交地址 实验一提交入口
一、生成所需文件
源文件如下:
源文件为lab1.c,调用gcc -c lab1.c 生成.o文件(如图)
调用gcc -S lab1.c 生成.s文件(如图)
调用gcc -E -o lab1.cpp lab1.c生成.cpp文件(如图)
gcc -o lab1 lab1.c
图一 生成的.s/.cpp/可执行文件/.o
总结gcc -c生成.o
-S生成.S
-E生成.cpp
-o生成可执行
二、具体执行过程
lab1.s文件如下:
.file "lab1.c"
.text
.globl g
.type g, @function
g: ;函数g
.LFB0:
.cfi_startproc
pushl %ebp ;ebp压栈
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp ;esp赋值给ebp
.cfi_def_cfa_register 5
movl 8(%ebp), %eax ;ebp偏移8的位置中的内容放入eax
addl $3, %eax ;eax寄存器加3后
popl %ebp ;弹出的值赋给ebp
.cfi_restore 5
.cfi_def_cfa 4, 4
ret ;返回,即把pop %eip
.cfi_endproc
.LFE0:
.size g, .-g
.globl f
.type f, @function
f: ;函数g
.LFB1:
.cfi_startproc
pushl %ebp ;ebp压栈
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp ;esp赋值给ebp
.cfi_def_cfa_register 5
subl $4, %esp ;esp减4后
movl 8(%ebp), %eax ;ebp偏移8的位置中的内容放入eax
movl %eax, (%esp) ;eax中的内容赋值给esp所指位置
call g ;调用函数g
leave ;恢复现场
.cfi_restore 5
.cfi_def_cfa 4, 4
ret ;返回
.cfi_endproc
.LFE1:
.size f, .-f
.globl main
.type main, @function
main: ;函数main
.LFB2:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp ;esp赋值给ebp
.cfi_def_cfa_register 5
subl $4, %esp
movl $8, (%esp);将8放入esp所指单元
call f ;调用f函数
addl $1, %eax ;eax寄存器加一
leave ;恢复调用函数前的现场
.cfi_restore 5
.cfi_def_cfa 4, 4
ret 返回
.cfi_endproc
.LFE2:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2"
.section .note.GNU-stack,"",@progbits
解析:故此汇编代码在计算机上的执行过程如下:执行main函数,先保存当前栈基地址,然后执行具体代码,当执行到调用函数f,先把参数存入栈中,然后跳转到f函数相应代码,先把当前栈基地址保存,然后继续执行f代码,当执行到g时,依次类推。执行完函数g,返回调用点,继续执行f代码。然后返回main函数,继续执行,直到程序结束,栈恢复成未执行程序lab1之前的状态。
堆栈变化如图:
图二
图三
三、单任务计算机的工作工程
当任务的程序代码放入内存时,CPU一条语句一条语句的执行,执行函数时,如遇到调用函数,则通过栈先把当前环境保存,再执行调用函数,新函数对应一个逻辑上的新栈。依次类推,直到程序执行完。任务完成。
四、多任务计算机的工作过程
多任务计算机将多个任务分时执行,通过CPU时间片轮转,分给每个任务特定的时间。执行任务1时,和单任务计算机的工作工程一样。当执行任务1的时间片到了时,保存当前环境,然后CPU转而执行任务2。这样循环,直到任务全被处理完。
- 【实验一】计算机是怎样工作的?
- Linux操作系统实验一:计算机是怎样工作的
- 【Linux操作系统分析】实验一:计算机是怎样工作的
- 实验:计算机是怎样工作的?
- 实验一:计算机是怎么工作的
- 【实验一】计算机是怎么工作的
- 计算机是怎样工作的
- 计算机是怎样工作的?
- 计算机是怎样工作的
- 计算机是怎样工作的
- 实验一 分析计算机是怎么工作的
- [Lab1]计算机是怎样工作的
- Linux实验:计算机是怎么工作的
- 杨洋(161)-计算机是如何工作的(实验一)
- 【Linux操作系统分析】计算机是怎样工作的
- 【Linux操作系统分析】计算机是怎样工作的
- 实验一 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- Linux操作系统实验一:计算机的工作原理
- android source code compile
- 基于QJM/Qurom Journal Manager/Paxos的HDFS HA原理及代码分析
- oracle sql语句优化
- 中国国家气象局天气预报信息接口
- linux下history(历史)命令用法详解
- 【实验一】计算机是怎样工作的?
- <location allowOverride="false"> ??
- 1001. A+B Format (20)
- git config的使用
- android:configChanges属性
- iOS开发之在地图上绘制出你运动的轨迹
- twisted 多线程并发的相关讨论
- mac 安装gcc make
- 线程