高级语言与机器语言之间的转换
-------------------------------------------------------------------------------------------------------------------------------
1.将高级语言源程序转换为机器级目标代码文件的程序是()。
A.汇编程序
B.链接程序
C.编译程序
D.解释程序
解析:
在本题的上下文中,“机器级目标代码文件”,表明:
这个文件包含编译和/或汇编过程生成的机器代码,这是一种二进制格式,不再包含人类可读的助记符。
目标代码文件还包括了链接信息,如符号表、重定位信息等,这些信息会在链接过程中用来生成最终的可执行文件。
目标文件是编译器或汇编器输出的中间产物,它们在最终链接成可执行文件之前,可能会与其他目标文件或库一起被链接器处理。
汇编器 (Assembler): 汇编器是一个将汇编语言代码(使用助记符和标签等的代码)转换为机器代码的工具。汇编器的输出是机器级目标代码文件,这些文件包含由汇编语言代码转换而来的机器代码。这些机器级目标代码文件通常包括为链接过程准备的额外信息,比如重定位信息和符号表,但这些目标代码文件是从汇编语言代码转换得到的,而不是直接从高级语言源代码编译得到的。
编译器 (Compiler): 编译器是一个将高级程序设计语言(如C/C++、Java等)编写的源代码转换为机器代码的工具。编译器的输出同样是机器级目标代码文件,这些文件直接包含可以由计算机硬件执行的机器代码,以及为链接过程准备的附加信息,如重定位信息和符号表。这些目标代码文件是直接从高级语言源代码编译得到的。
虽然汇编器和编译器的输出都可能是机器级目标代码文件,但它们处理的输入代码的级别不同。
汇编器 (Assembler): 处理汇编语言代码,将其转换为机器代码。汇编语言是一种低级语言,它几乎直接映射到机器指令上,是一种与具体硬件架构非常接近的语言。因此,汇编器处理汇编语言代码这种低级语言,将其转换为机器代码。
编译器 (Compiler): 处理高级程序设计语言代码,将其转换为机器代码。高级语言是抽象程度更高的编程语言,它们不直接对应于机器指令,需要通过编译过程转换成可以执行的代码。
将高级语言源程序转换为机器级目标代码文件的程序是编译程序(Compiler)。编译器的主要任务是读取用高级编程语言编写的源代码,经过一系列的处理过程,转换成对应平台的低级机器语言代码,通常是目标代码(Object Code)或机器码。这个过程被称为编译。选项 C 正确。
笔记:
汇编程序(Assembler):这个程序将汇编语言编写的源代码转换为机器语言代码。汇编语言是一种低级语言,更接近硬件,每条指令对应一条机器指令,但不是高级语言。
链接程序(Linker):链接程序的作用是将编译后生成的一个或多个目标代码文件以及库代码合并,并解决程序内部和外部的地址引用问题,生成可执行文件。
编译程序(Compiler):编译程序将高级语言编写的源代码转换成目标代码文件。
解释程序(Interpreter):解释器直接执行高级语言编写的源代码指令,一般是逐行读取源代码,边解释边执行,不通过生成整个目标代码文件的过程。解释器不生成目标代码文件,因此不是正确答案。
---------------------------------------------------------------------------------------------------------------------------------
2.将高级语言源程序转换为可执行目标文件的主要过程是()。
A 预处理→编译→汇编→链接
B 预处理一汇编→编译→链接
C 预处理→编译→链接→汇编
D 预处理→汇编→链接→编译
解析:
将高级语言源程序转换为可执行目标文件的过程包括以下主要步骤:
预处理(Preprocessing):
这一步对源代码中的预处理指令进行处理。预处理指令包括宏定义的扩展、条件编译指令的处理、头文件的包含等。
预处理器根据指令修改源代码,去除注释,扩展宏定义等,生成一个没有预处理指令的纯净的源代码版本。
编译(Compilation):
编译器接管预处理过的源代码,分析(Parsing)代码并生成对应平台的汇编代码。
这个过程包括词法分析、语法分析、语义分析、中间代码生成和优化等。
汇编(Assembly):
汇编器将编译器生成的汇编代码转换为机器码,生成目标代码文件(.obj文件或.o文件)。
每条汇编语句基本上对应一条机器指令。
链接(Linking):
链接器将一个或多个目标代码文件与所需要的库文件链接在一起,解决程序内部和外部的符号引用,生成最终的可执行文件。
在这个过程中,如果程序中有多个文件或模块,它们之间相互引用的符号或函数调用在链接过程中将被正确地解析和连接。
选项 A 正确。
笔记:
整个过程可以用以下流程来表示:
源代码 -[预处理]-> 预处理后的源代码
预处理后的源代码 -[编译]-> 汇编代码
汇编代码 -[汇编]-> 目标代码文件
目标代码文件(可能有多个) + 库文件 -[链接]-> 可执行文件
--------------------------------------------------------------------------------------------------------------------------------
3..计算机硬件能够直接执行的是()。
I.机器语言程序 Ⅱ.汇编语言程序 Ⅲ.硬件描述语言程序
A.仅I
B.仅I、Ⅱ
C.仅I、Ⅲ
D.I、Ⅱ、Ⅲ
解析:
I. 机器语言程序:机器语言是计算机的最低级语言。它完全由二进制代码组成(即由0和1组成的指令集),这些代码可以被计算机的中央处理单元(CPU)直接解释和执行。每条机器语言指令执行一个非常具体的任务,比如将两个数相加或将数据从内存移动到寄存器。因为机器语言直接对应于CPU的指令集架构(ISA),不需要进一步的翻译或转换,所以计算机硬件能够直接执行机器语言程序。
II. 汇编语言程序:汇编语言是一种低级语言,相比机器语言,它使用助记符来表示机器指令,这使得程序更易于人类理解和编写。尽管汇编语言与机器语言在结构上非常接近,但它不能被CPU直接执行。汇编语言程序必须首先通过汇编器转换成机器语言代码,然后才能被计算机硬件执行。
III. 硬件描述语言程序:硬件描述语言,如VHDL或Verilog,用于设计和描述电子系统(如集成电路)的逻辑和行为。这些语言不是为了编写直接在常规计算机硬件上执行的程序,而是用于创建可以执行特定逻辑操作的硬件本身。硬件描述语言程序在转换成实际硬件(通过综合和布局)之前,无法被计算机硬件执行。
笔记:
机器语言可以被计算机的中央处理单元(CPU)直接解释和执行。
汇编语言程序 需要通过汇编器转换成机器语言。
硬件描述语言程序在转换成实际硬件(通过综合和布局)之前,无法被计算机硬件执行。
程序和指令的执行过程
--------------------------------------------------------------------------------------------------------------------------------
4.冯诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU区分它们的依据是()。
A.指令操作码的译码结果
B.指令和数据的寻址方式
C.指令周期的不同阶段
D.指令和数据所在的存储单元
解析:
在冯诺依曼架构的计算机中,指令和数据确实都是以二进制形式存储在内存中。CPU如何区分它们主要是基于指令周期的不同阶段。
指令周期通常包括取指令(Fetch)、译码(Decode)、执行(Execute)等阶段。在取指令阶段,程序计数器(PC)指向内存中的地址,CPU从该地址读取内容,假定其为指令,并将其加载到指令寄存器(IR)。在译码阶段,CPU内部的控制单元根据指令寄存器中的内容来解释指令,这时会分析操作码来确定要进行的操作。执行阶段则是实际执行该指令的过程。
CPU能够区分指令和数据的主要依据是指令周期的不同阶段,也就是CPU在何时以及如何处理存储器中的内容。在取指阶段,CPU处理的是指令;在执行阶段,根据指令的需求,CPU可能会读取或写入数据。
笔记:
冯诺依曼架构中CPU区分指令和数据
指令和数据都是二进制形式存储在内存中。
区分依据:指令周期的不同阶段。
取指令阶段:程序计数器(PC)指向指令,CPU假设读取的是指令。
译码阶段:指令寄存器(IR)存储指令,CPU根据操作码解释指令。
执行阶段:CPU或读取数据或执行其他操作,具体取决于指令要求。
关键点
程序计数器(PC):跟踪下一条指令的内存地址。
指令寄存器(IR):暂存当前执行的指令。
控制单元:指导CPU在指令周期中各阶段操作。
"取,译,执行" —— 标记指令周期的三个阶段。
"PC(程序计数器)指向指令,IR(指令寄存器)存储指令,控制单元调度执行" —— 总结CPU如何区分指令和数据。
--------------------------------------------------------------------------------------------------------------------------------
5.某计算机主存空间为4GB,字长为32位,按字节编址,采用32位定长指令字格式。若指令按字边界对齐存放,则程序计数器(PC)和指令寄存器(R)的位数至少分别是()。
A.30、30
B.30、32
C.32、30
D.32、32
解析:
在本题上下文中,“主存空间为4GB”,表明:这表示计算机的总内存大小是4GB(Gigabyte)。在这里,GB是一个存储单位。通常在计算机科学中,1GB等于2^30字节(而非10的9次方)。
在本题上下文中,字长为32位,表明:这里的“字”是指计算机处理数据的基本单位。这里说的是,计算机一次可以处理32位的数据。位(bit)是信息的基本单位,在计算机中,一个位可以是0或者1。
在本题上下文中,按字节编址,表明:指的是计算机内存的每一个字节都有一个独一无二的地址。这样,计算机可以找到并操作内存中的任何特定字节。
在本题上下文中,采用32位定长指令字格式,表明:指令是告诉计算机要执行的操作的命令。在这个计算机系统中,每条指令都是32位长,这意味着每条指令都使用32个0和1来表示。
现在我们来到了关键点:
在本题上下文中,指令按字边界对齐存放,表明:这意味着每条指令的起始地址是4字节的倍数,因为32位等于4字节(每个字节是8位)。换句话说,指令不能从任意位置开始;它们必须从4的倍数的地址(例如,0, 4, 8, 12, ...)开始。由于字长为32位,等于4个字节,所以每条指令占用4个字节。指令按字边界对齐意味着每条指令从一个地址开始,该地址是4的倍数。这种对齐方式简化了指令的寻址。
考虑到上述信息,我们可以推导出:
程序计数器(PC)的位数:程序计数器(PC)记录了内存中下一条指令的地址。由于主存空间为4GB,总共有4×2^30 字节。但是,由于指令按字边界对齐,每四个字节才开始一条新指令,实际上只需要区分这些4字节边界的地址。因此,总共2^30(4×2^30/4)个可能的指令地址。要表示2^30 个不同的地址,你需要30位的二进制数。所以,PC至少需要30位。
指令寄存器(IR)的位数:指令寄存器需要存储一条完整的指令。由于每条指令是32位定长的,IR也必须是32位的,以确保任何时候它都可以保存一条完整的指令。
综合以上分析,我们可以确定程序计数器和指令寄存器的位数至少分别是30位和32位。
因此,正确答案是 B. 30、32。
笔记:
内存大小:以字节为单位,常用的量级有KB、MB、GB等。1GB等于2^ 30字节
指令对齐:指令在内存中的存放方式,常见为按字边界对齐,即指令地址是字长的整数倍。
程序计数器(PC):存放下一条将要执行的指令的内存地
指令寄存器(IR):存放当前正在执行的指令的寄存器。
计算机层次结构
--------------------------------------------------------------------------------------------------------------------------------
6.下列选项中,属于指令集体系结构(ISA)规定的内容是()
I.指令字格式和指令类型
Ⅱ.CPU的时钟周期
Ⅲ通用寄存器个数和位数
IV.加法器的进位方式
A.仅I、Ⅱ
B.仅I、Ⅲ
C.仅Ⅱ、V
D.仅I、Ⅲ、IV
解析:
指令集体系结构(Instruction Set Architecture,ISA)是计算机体系结构中的一部分,它定义了指令的集合、CPU 寄存器、地址模式、数据类型等硬件和软件之间的接口。具体来说,ISA 规定了:
指令字格式和指令类型:指令集定义了不同操作的编码以及如何解释它们。
通用寄存器的个数和位数:ISA 规定了可供程序员使用的寄存器数量和大小。
而不是由 ISA 直接定义的有:
CPU 的时钟周期:这是处理器的实现细节,与制造技术和具体的微架构设计相关。
加法器的进位方式:这是具体硬件实现的细节,也不是由 ISA 规定的。
因此,选项中属于 ISA 规定的内容是 指令字格式和指令类型 及 通用寄存器个数和位数。正确答案是 B. 仅I、III。
笔记:
ISA 概念
ISA(指令集体系结构)是软件和硬件之间的接口,定义了计算机可以执行哪些指令以及如何执行这些指令。
ISA 包含内容
指令集:CPU 可以理解和执行的命令集合。
寄存器集:CPU 内部的存储单元,包括通用寄存器和特殊寄存器。
指令格式:指令的二进制编码方式,包括操作码和操作数。
数据类型:处理器可以操作的数字和字符数据类型。
寻址模式:如何指定指令中操作数的位置。
ISA 不包含的内容
微架构:指的是实现 ISA 的具体硬件结构和设计。
时钟频率:处理器的运行速度,以 Hertz(赫兹)计量。
电路实现:加法器、乘法器等具体硬件的电路设计细节。
控制信号:硬件执行指令时使用的信号。
记住,ISA 定义了编程模型和指令的类型,但不包括它们的物理实现细节。