源程序到可执行文件
#include <stdio.h>
int main()
{
printf(“Hello world! Have a good term!”)
}
hello.c源程序到可执行文件hello的转化过程
- .c 经过预处理变成 .i 文件(仍然是源程序文本,长得和 .c一样)
- .i 经过编译得到 .s 文件(就是做实验经常看得那个汇编代码)
- .s 经过汇编(因为是汇编代码所以要进行汇编操作)变成 .o 文件(打不开的那种)
- 最后链接
执行过程
Hello程序被启动后,计算机的动作过程如下:
- shell程序读取字符串“./hello”中各字符到寄存器,然后存放到主存;
- “Enter”键输入后,操作系统内核(载入程序)根据主存中的字符串“hello”到磁盘上找到特定的hello目标文件,将其包含的指令代码和数据(“hello, world\n”)从磁盘读到主存,并将控制权转交给hello程序,即将hello程序的第一条指令的地址送到PC中;
- 处理器从hello主程序的指令代码开始执行;
- Hello程序将“hello, world\n”串中的字节从主存读到寄存器,再从寄存器输出到显示器上。
大概看看就行了🍙🍙🍙
课堂测试
选择题
4、以下有关高级编程语言的叙述中,错误的是
A. 高级编程语言与具体的计算机结构没有关系
B. 一条高级语言中的语句会对应很多条机器指令
C. 高级语言程序必须被翻译成机器语言才能被执行
D. 高级语言程序只要被转换成机器级目标代码就能被执行
选择D
A是对的,就是与具体计算机结构无关,因为高级编程语言会经过预处理、编译、汇编等操作最终转换成机器代码
D暂时未知原因(但毕竟这么绝对,所以选它)
6、以下有关指令以及指令执行过程的叙述中,错误的是
A、 指令由操作码和操作数或操作数的地址码构成
B、 指令操作码通过CPU中的控制器进行译码
C、 ALU运算时的操作数不可能是通用寄存器中的数据
D、 将要执行的下条指令的地址总是在程序计数器PC中
答案是C
一些摘取
指令和数据都放在存储器中,两者在形式上有差别(无差别,都以二进制存储,但 CPU 可以根据指令周期的不同阶段来区分是指令还是数据,通常在取指阶段取出的是指令,在执行阶段取出的是数据)
机器指令和汇编指令一一对应,功能相同(√)
须程序员在应用程序中直接控制外设进行输入/输出(非直接控制)
以下有关指令集体系结构的叙述中,错误的是( C )
A.指令集体系结构的英文缩写是ISA
B.指令集体系结构位于计算机软件和硬件的交界面上
C.通用寄存器的长度、功能与编号不属于指令集体系结构的内容
D.指令集体系结构是指低级语言程序员所看到的概念结构和功能特性
以下有关计算机系统层次结构的叙述中,错误的是( D )
A.最上层是提供给最终用户使用的应用程序(软件)层
B.OS是对ISA和硬件的抽象,程序员通过OS使用系统资源
C.ISA是对硬件的抽象,软件通过ISA使用硬件提供的功能
D.应用程序员工作在指令集体系结构层,需要对底层很熟悉 (应是ISA)
以下术语中,不属于计算机中硬件(即物理上实际存在的部件)的是( B )
A.算术逻辑部件
B.指令字
C.程序计数器(PC)
D.数据通路
假设8位模型机M:8位定长指令字,4个GPR,16个主存单元;如何在M上实现“z=x+y”?
计算机性能的基本评价指标
计算CPI
CPU(执行)时间 可以看作一个时钟需要的时间(一个程序运行的时间)
时钟频率(主频) 可以看作有多少个时钟数、倒数为 时钟周期
时钟周期数 —— 总需要时长(不同于 时钟周期 )
CPI —— 执行一条指令的时间
不然真的不好理解🥰
例
程序需要10s运行时间——CPU时间
如果时钟频率是GHz,换算——103MHz
MIPS
MIPS —— 指令条数/总执行时间(单位:秒)算出来的数,我个人觉得像平均CPI
课后习题
(6)
- 程序的编写
- 计算机的架构
- ISA指令集
6
2. MIPS这个单位——需要指令数量为M(106),时间为s
3. 问的平均周期数就是上文的CPI,所以是CPU时间*时钟频率/指令数量(同样注意单位)
4. 这个第4问有点离谱,看看就行了
5. 第5问也是,看看就行了
7
- 这个第1问,CPU=时钟周期 * CPI * 指令条数:计算得指令条数
这里CPU=1,CPI=1
- 看看就行了,稍微简单一些
8
10
写这些题的时候,先把公式写出来吧,不然绕不过来😥
问CPI,那就是平均CPI
11
利用公式比较简单
一些复习链接: