Bootstrap

计算机组成原理(计组)期末复习

题目

题型

题量

分值

单选题

10

10

计算题

2

20

问答题

2

20

阅读程序题

2

20

程序设计题

2

30

计算题

  1. 写出十进制数 -9 的单精度 IEEE754 编码(用十六进制数表示)
     

    9 => 1001 => 1.001 * 2^3 
    // 规范化 
    // 计算指数,IEEE754 单精度使用 127 作为偏移量 
    // 实际指数是 3,所以 IEEE754 指数为 3 + 127 = 130 
    // 130 的二进制表示是 10000010 
    // 确定尾数:001,需要用 0 填充到 23 位:
    00100000000000000000000 11000001000100000000000000000000 
    // 组合各部分称为32位2进制数: 
    // 1)数符_符号位_1 // 2)阶码_指数_10000010 
    // 3)尾数_00100000000000000000000 C12000000 
    // 将 32 位二进制数转换为十六进制
  2. 已知 x = -0.01111, y = +0.11001, 请判断计算结果是否溢出.

    [x]补 = [0.01111]反 + 1 = 1.10000 + 1 = 1.10001 
    // 是负数,求其绝对值的反码,+1 得补充码 
    [-x]补 = 0.01111 
    // 是正数,补码与原码相同 
    [y]补 = 0.11001 
    // 是正数,补码与原码相同 
    [-y]补 = [0.11001]反 + 1 = 1.00110 + 1 = 1.00111 
    // 是负数,求其绝对值的反码,+1 得补充码 
    x+y = [x]补 + [y]补 = 1.10001 + 0.11001 = 0.01010 
    // 结果为正数,符号位与x的不同,与y的相同,符合预期 
    x-y = [x]补 + [-y]补 = 1.10001 + 1.00111 = 0.11000 
    // 结果为负数,符号位与x和-y的都不同,符合预期
    1. 求:1)[x]补, [-x]补;2)[y]补, [-y]补;3)x+y, x-y.

    2. 若短浮点数 IEEE754 编码为(BF400000)16,则其代表的十进制数为多少?

问答题

1、请简要说明80X86栈操作指令POP 和 PUSH 如何实现数据的进栈和出栈过程(给出栈指针名称及其变化规则)。

答:POP指令的格式为: POP DST

指令功能:DST←((SP)) ; SP←(SP)+2

指令的执行将把由SP所指向的栈顶字内容传送到目的地址DST所指向的目的位置,并把SP的内容进行加2操作(即栈顶指针下移2个字节)。

PUSH指令的格式为: PUSH SRC

指令功能:SP←(SP)-2 ; (SP)←(SRC)

指令的执行将SP的内容进行减2操作(即栈顶指针上移2个字节)。把由SRC所表示的源操作数地址中的字内容传送到由SP所指向的栈字单元地址中,低字节内容存入主存的低地址单元,高字节部分存入主存的高地址单元。

  1. 以下程序段的主要作用和应用场景是什么?

用于子程序调用时进行保护现场和恢复现场

PUSH AX PUSH DI PUSH BX ... ... POP BX POP DI POP AX RET

2、简述实现两个浮点数减法运算的完整操作步骤(假设尾数M采用原码,阶码E采用移码,符号位S采用1位)。

答:完成2个浮点数的减法运算需要按照对阶、尾数求差、规格化处理、舍入处理等四个步骤:

(1)对阶:计算两个浮点数的阶差,以小阶向大阶看齐的原则,对阶码小的尾数进行右移,每右移1位,阶码加1,直到两数的阶码相等为止。

(2)尾数求差。

(3)规格化处理:满足规格化后尾数的绝对值大于1/2,且小于1。由于尾数采用原码表示,所以需要将尾数规格化成 0.1XXXXX的形式便可,左规格化时,尾数左移1位则阶码减1,直到符合规格化为止。右规格化时,尾数每右移1位,则阶码加1,直到符合规格化为止。

(4)舍入处理:对尾数右移而丢掉的尾数采用0舍1入法或恒置1法对末位进行处理。

  1. 请简要解析字节序有哪些,并说明含义。

大端序(Big-endian):高位字节存入低地址,低位字节存入高地址;

小端序(Little-endian):低位字节存入低地址,高位字节存入高地址

知识点

概论

  1. 通常划分计算机发展时代以 所用电子元件 为标准

  2. 完整的计算机系统应包括:配套的硬件设备和软件系统

  3. 用于科学计算的计算机中,标志系统性能的主要参数:MFLOPS

    MFLOPS 是衡量计算机性能的一个指标,它代表每秒执行的百万次浮点运算次数

    MFLOPS 代表 Million Floating-point Operations Per Second,即每秒百万次浮点运算。它主要用于评估计算机在科学计算方面的性能。浮点运算通常用于科学计算研究,以及机器学习等领域。因为浮点运算通常用于处理非常大或非常小的实数,以及需要较大动态范围的计算。例如,模拟、建模和数据分析等任务都依赖于浮点运算。MFLOPS 值越高,表示计算机执行浮点运算的速度越快,在科学计算、天气模拟、金融模拟和图形渲染等领域的表现越好。在评估硬件(CPU、GPU)时,研究人员和工程师通常会考虑 MFLOPS 和 MIPS 来评估系统的整体性能。

  4. 计算机能直接识别的语言:机器语言

  5. 计算机硬件系统结构的核心是 数据通路结构

    数据通路是计算机执行指令的物理基础,它定义了数据在计算机内部的流动路径和操作方式。

  6. 作为现行 PC 机的主要系统总线:PCI 总线和 ISA 总线

  7. CPU(控制器、运算器)和存储器合称 主机;输入、输出设备以及辅助存储器等其它设备统称 外围设备

  8. 计算机系统的输入输出接口是 主机与外围设备 之间的交接界面

冯诺依曼机

  • 特点

    • 采用二进制表示信息(由于 物理器件的性能要求);

    • 指令和数据以同等地位存储在存储器中,可按地址寻访(基本特点)

    • 指令由操作码和地址码组成;

      1. 指令操作码字段表征指令的 功能,每个操作码对应一条 机器 指令,地址码字段指示 操作数或操作数地址

    • 采用存储程序的工作方式;

    • 由五大部件组成:运算器(中心)、控制器、存储器、输入设备、输出设备

中断

  1. 中断向量:中断服务例行程序入口地址的指示器

  2. 为实现多级中断,保存现场信息最有效的方法:堆栈

  3. 不可响应的中断:可屏蔽中断

  4. 在中断系统中,CPU一旦响应中断则立即关闭 中断允许 标志,以防止本次中断响应过程中被其它中断源产生另一次中断干扰

  5. 中断处理过程可划分为 中断请求中断判优中断响应中断处理中断返回 等五个阶段

寻址方式

  1. Intel 80X86 的 4 个 16 位变址寄存器:BP, DX, DI, SI

  2. 运算型指令的寻址与转移指令的寻址之间的不同点在于 前者取操作数,后者决定程序的转移地址

  3. 单地址指令中为了完成两个数的算术运算,除地址码指明的一个操作数外,另一个操作数需要采用 隐含寻址方式

  4. 在 CPU 中跟踪指令后继地址的寄存器:PC

汇编

分类

含义

MOV AX, 1234H

立即数寻址方式

将 1234H 直接存入 AX 寄存器

MOV AX, DS:[1000H]

直接寻址方式

将 DS 段中偏移地址为 1000H 的内存单元的内容移动到 AX 寄存器中

EA = DS * 16 + 1000H

MOV AX, BX

寄存器寻址方式

操作数处在 堆栈

将 BX 寄存器的值复制到 AX

MOV AX, [BX]

寄存器间接寻址

操作数处在 主寄存器

使用寄存器的内容作为有效地址

BX 中存放地址,将该地址处的值存入 AX

MOV AX, DS:VAR[SI]

变址寻址方式

EA = DS * 16 + VAR + [SI](变址)

MOV AX, 10H[BX][DI]

基址变址寻址方式

EA = [BX] + [DI](变址) + 10H

运算

  1. 计算机系统采用补码运算的目的:简化计算机设计

    通过补码表示,可以将减法转换为加法,从而消除了专门的减法电路,简化了硬件设计

  2. 在机器数中,补码 的零的表示形式是唯一的

    正数的补码与其原码相同。

    负数的补码是其反码加1。

  3. 若浮点数用补码表示,如果 数符与尾数小数点后第一位数字相异 ,则运算结果是规格化数

    当数符为0(正数)时,尾数的补码就是其原码。规格化要求小数点后第一位为1。

  4. 只有带符号数的运算 才可能溢出

  5. 设机器字长 16 位,设机器数采用一位符号位,请写出无符号数、原码表示的定点整数、补码表示的定点整数、原码表示的定点小数、补码表示的定点小数的范围,答案均用十进制表示。

    定点机

    浮点数

    定点数

    原码

    -(1-2^-15)..1-2^-15

    -(2^15-1)..2^15-1

    反码

    -(1-2^-15)..1-2^-15

    -(2^15-1)..2^15-1

    补码

    -1..1-2^-15

    -2^15..2^15-1

  6. 基本字长:处理器中参加一次定点运算的操作数的位数

    1. 在定点运算中,无论采用双符号位还是单符号位,必须有 溢出判断电路,它一般用 异或门 来实现

  7. 用 n+1 位字长(其中 1 位是符号位)表示定点整数时,所能表示的数值范围是:0 <= |N| <= 2^n - 1

  8. 定点数运算中产生溢出的原因:运算结果的操作数超出了机器的表示范围

  9. 长度相同但格式不同的2种浮点数,假设前者阶码长、尾数短,后者阶码短、尾数长,其它规定均相同,则它们可表示的数的范围和精度为:前者可表示的数的范围大且精度低,后者可表示的数的范围小且精度高

IO 控制

  1. 采用 DMA 方式传递数据时,每传送一个数据就要占用一个 存储周期

控制方式

原理

优点

缺点

程序直接控制

最基本的 IO ,通过程序指令控制。

实现简单,不需要外设

  • CPU 利用率低:需要不断轮询 IO 设备状态,会导致 CPU 长时间等待

  • 传输效率低:每次传输 1 字,需 CPU 全程参与

中断驱动

基于中断,当 IO 操作完成后会触发相应中断信号,通知 CPU 暂停当前任务而去处理 IO 请求。

  • 提高 CPU 利用率

  • 响应速度快

处理中断请求时仍需 CPU 介入 IO 操作,因此效率相对较低。

DMA

通过 DMA 控制器绕过 CPU 而直接从内存读写数据。CPU 只需进行简单配置和初始化,即可将 IO 任务交由 DMA 控制器处理。

  • 数据传输速度快

  • CPU 占用率低

需要额外的 DMA 控制器支持。

通道

基于专门的 IO 通道。通道具有自己的控制逻辑和存储器。CPU 只需进行简单配置和初始化,即可将 IO 任务交由通道处理。

  • 更高的效率

  • 更低的 CPU 占用率

需要额外的硬件通道支持,且通道程序设计相对复杂。

存储系统

  • 计算题

    • 某 RAM 存储器容量为 128K*16 位,则地址线为 17根 ,数据线为 16根

    • 某计算机字长是 16 位,按字节存储,它的存储容量是 64 KB ,按字寻址,其寻址范围:32K

    • 某计算机字长为 32 位,其存储容量为 64K ,按字编址,其寻址范围:16K

      寻址范围 = 存储容量 / 每个字的字节数 = 64*1024 个字节 / (32/8) 个字节/字 = 65536 个字节 / 4 个字节/字 = 16384 个字 = 16K

  • 存储系统

    • 计算机的存储系统:高速缓存、主存和辅存

    • 存储系统的分层结构(金字塔):1)CPU 寄存器;2)Cache;3)主存;4)辅助存储器;5)脱机大容量存储器

    • Cache 的命中率与 Cache 行的大小、Cache 的容量、Cache 的映像方式 有关,与主存的存取时间无关

      高速缓存的主要作用是缓解CPU和主存之间的速度差异,提高系统整体性能。当CPU需要访问数据时,它首先检查高速缓存,如果数据存在(命中),就可以快速获取;如果不存在(失效),则需要从较慢的主存中读取数据

    • 主存储器和主存之前增加 Cache 的目的是 解决 CPU 和主存之间的速度匹配问题

    • 在虚拟存储器中,当程序正在执行时,由 操作系统 完成地址映射

  • 存储器

    • 存储器的技术指标:容量、速度、位价格

    • 相联存储器是按 内容 访问的

    • 磁带 属于顺序存储器

    • 动态半导体存储器的刷新方式:集中、分散、异步

    • 计算机内存储器可采用 RAM 和 ROM,系统程序区用 ROM , 用户地址区用 RAM

      1. RAM : 任何存储单元的内容都能被随机访问,且访问时间和存储单元的物理位置无关

      2. ROM:Read-Only-Memory,专门用于存储重要、稳定且需要在设备启动时立即可用的数据的存储器

      3. EPROM 是 可编程的只读存储器

      4. 某单片机的系统程序,不允许用户在执行时改变,则可以选用 ROM 作为存储芯片

  • 虚拟存储器

    • 常用的虚拟存储器系统由 主存 - 辅存 两级存储器组成

    • 采用虚拟存储器的作用:1)解决主存容量不足;2)扩大主存储器的存储空间;3)并能进行自动管理和调度

    • 主存与辅存的区别:1)能否长期保存信息;2)是否按字节或按字编址;3)能否由 CPU 直接访问

      主存通常是按字节编址的,这意味着每个存储单元可以独立访问。CPU可以直接访问任意一个字节的数据,这对于执行程序和处理数据非常重要。

    • 主存的容量取决于 主存的编址单元数每个编址单元的位数

    • 主存的最大可编址单元数(编址空间)由地址线的位数 决定

总线

  • 微型计算机系统的外围设备通过 适配器 与主板的系统总线相连

  • 定义:计算机内部连接各个部件的一组信号线,通过这组信号线,各部件间可进行各种数据传输。挂在总线上的任何一个部件都可以从总线上有选择地与其他部件收发信息。

  • 按照传输内容可分类为:1)数据总线_操作数或程序;2)地址总线_主存储器地址或外围设备码;3)控制总线_控制信息

CPU

  • 功能:1)从主存读取、解释、执行指令;2)程序控制;3)数据处理;4)操作定序

  • 基本组成

    • 算术逻辑运算部件(ALU,运算器最核心的部件)

    • 控制部件(CU)

      1. 控制器的部件有 指令寄存器、操作控制器、程序计数器 ,不包括状态条件寄存器

    • 各种寄存器

    • Cache 存储器

    • 中断系统

    • CPU 内部数据通路

  • 指令周期

    • Intel 80X86 数据传送指令 MOV 的指令周期包括 取指周期、目的周期、源周期 以及执行周期

      目的周期:确定目的操作数的地址

      源周期:确定源操作数的地址

    • 定义:CPU 每次取出并执行一条指令所需的全部时间。完整的指令周期有四个子周期,每个子周期可包含多个节拍(打开一条数据通路)。

    • 子周期可根据访存 CPU 的目的区分:

      • 指取(取指令)

      • 间指(取有效地址)

      • 执行(当指令为访存指令时取操作数)

      • 中断(保存程序断点)

读程序题

程序段

解释

问题

X DB 12

MOV CL, 2

MOV AL, X

SAL AL, CL

HLT

Define Byte X = 12

Move 2 into CL

Move X into AL

Shift Arithmetic Left AL with 2(CL) 算术左移

暂停执行

  • 功能完成 X*4 的运算

  • AL = ?48

X DB 12

MOV CL, 2

MOV AL, X

SAR AL, CL

HLT

Define Byte X = 12

Move 2 into CL

Move X into AL

Shift Arithmetic Right AL with 2(CL) 算术右移

暂停执行

  • 功能完成 X/4 的运算

  • AL = ?3

MOV AX, 0

MOV BX, 1

MOV CX, 100

NEXT: ADD AX, BX

   ADD BX, 1

   LOOP NEXT

   HLT

Move 0 into AX

Move 1 into BX

Move 100 into CX(Loop Counter)

Mark the Loop NEXT; Add BX to AX

Add 1 to BX

Decrements CX by 1 until CX Equals 0

暂停执行

  • 功能完成 1~100 的连加运算

  • AX = ?5050

MOV AL, 10

MOV BL, AL

MOV CL, 3

SAL BL, 1

SAL AL, CL

ADD AL, BL

HLT

Move 10 to AL

Move AL to BL

Move 3 to CL

Shift Arithmetic Left BL with 1 // BL *= 2 = 20

Shift Arithmetic Left AL with CL // AL *= 8 = 80

Add BL to AL

暂停执行

  • 功能AL * 10

  • AL = ?100

STRING DB 34H, 35H

LEA SI, STRING

MOV AL, [SI]

AND AL, 0FH

INC SI

MOV BL, [SI]

AND BL, 0FH

ADD AL, BL

Define Byte STRING with 34H, 45H

Loads the Effective Address of STRING into the SI

Move the Byte(34H) from SI to AL

Convert ASCII Code to Numerical Value, AL Contains 4 now

Increments SI by 1

Move the Byte(45H) from SI to AL

Convert ASCII Code to Numerical Value, AL Contains 5 now

Add BL to AL

功能将 STRING 中的两个字节转换为非压缩 BCD 码后相加,结果送 AL

AX = ?9

NUM DB 35, 22, 15, 5, 60

  LEA BX, NUM

  MOV AL, [BX]

  MOV CX, 5

NEXT1: CMP AL, [BX]

  JGE NEXT2

  MOV AL, [BX]

NEXT2: INC BX

  LOOP NEXT1

  HLT

Define Byte NUM with 35, 22, 15, 5, 60

Loads the Effective Address of NUM into the BX

Move the Byte(35) from BX to AL

Move 5 to CX(Loop Counter)

Mark the Loop NEXT1; Compare the Byte from BX with AL(35)

  Jumps to the NEXT2 Loop if BX is Smaller to AL

  Move the Byte from BX to AL

Mark the Loop NEXT2; Increments the BX to Point Next Item

  Decrements CX by 1 and Jump Back to Label NEXT1

暂停执行

  • 功能查找最大数,结果送 AL

  • AL = ?60

X DB 50

Y DB 15

MOV AL, 50

SAL AL, 1

ADD AL, Y

HLT

Define Byte X = 50

Define Byte Y = 15

Move 50 to AL

Shift Arithmetic Left AL with 1 // AL *=2 = 100

Add Y to AL

暂停执行

  • 功能50 * 2 + 15

  • AL = ?115

程序设计题

  1. 从键盘输入一个字母,若输入的字母为Y(y),则将字节变量 A 和 B 中(A >= B)的内容相加存放于 F,并显示结果;否则计算 A - B ,结果放在 F 中,并显示结果。(用十进制显示)

  2. 已知数据段定义如下。编程:完成字母串 "HELLO THE WORLD!" 的反向输出,将结果放在 STR2 中并显示

DATA SEGMENT STR1 DB 'HELLO THE WORLD!', ' $' CNT EQU $-STR1 STR2 DB 20 DUP(20H), 13, 10, ' $' DATA ENDS

  1. 有两个无符号数分别存放于 DATA1 和 DATA2 单元,要求将两数中大的一个挑选出来,并送入 DATA3 单元。

  2. 在 DATA1 首址区有 100 个字节数据,试编写一个完整程序,将其中的奇偶数分开。统计奇偶数的个数,并将奇数送 DATA2 首址区,偶数送 DATA3 首址区。

  3. 编写一个完整的汇编语言程序,在屏幕上显示“汇编语言程序设计”字样。

  4. 设在变量 ADR 为起始地址的字节存储单元中存放一组有符号数据,编写程序分别统计:1)正数;2)负数;3)零

  5. 基于 Intel 80X86 CPU,编写汇编程序实现以下功能:将寄存器 AX 保存的无符号二进制数转换为 ASCII 码并打印到控制台上。例如:寄存器 AX=0xF0A7(1111000010100111),为二进制无符号整数,编写程序在控制台上输出 F0A7H

 存储器设计题

  1. 某机器字长 16 位,存储器总容量 32K 字,按字编址。欲组成这个存储器,需数据线(16条)和地址线(15条)、8K*8 的 RAM 芯片(8 片)。地址线中有 2 条(A13~A14)用于片选信号,13 条用于组内地址线(A0~A12)。

  2. 某机器字长 32 位,存储器总容量 256K 字,按字编址,用读写控制信号 WE 控制芯片读写。欲组成这个存储器,需数据线(32条)和地址线(18条)、64K*16 的 RAM 芯片(8 片)。地址线中有 2 条(A16~A17)用于片选信号,16 条 用于组内地址线(A0~A15)。

额外 - 判断题

指令

原理

CMP BX, DX

XOR AX, SS

SS 是堆栈段寄存器,通常不能直接参与算术或逻辑运算

ADC DS, AX

DS是数据段寄存器,不能直接被修改,除非使用特定的加载指令

ADD [BX], BX

ADD AX, DS

DS 是数据段寄存器,不能直接用作 ADD 指令的源操作数

ADD CX, BL

不能将8位寄存器(BL)直接加到16位寄存器(CX)上

ADD [BX], [1000H]

ADD 指令不允许两个内存操作数。算术指令通常要求至少有一个操作数是寄存器

SUB AX, [BP]

SUB VAR, [BP]

算术指令通常要求至少有一个操作数是寄存器,而 VAR 是内存地址

DIV CL, BL

DIV 指令不允许使用8位寄存器作为除数

MUL AX, BX

MUL 指令是隐含操作数的指令,它只接受一个操作数,并且这个操作数必须是寄存器或内存位置

MOV AX, BX

MOV AX, BL

MOV 指令要求源操作数和目标操作数的大小必须匹配

END

;