第 2 章 高级编程的硬件基础

32
主主主主 计计计计计计计 80x86 计计计Turbo C 计计计计 BIOS 计 DOS 计计 主 2 主 主主主主主主主主主

description

主要内容. 第 2 章 高级编程的硬件基础. 计算机硬件组成 80x86 微机系统 Turbo C 编译方式 BIOS 和 DOS 调用. 第 2 章 高级编程的硬件基础. 计算机硬件组成. 计算机系统: 由硬件和软件两部分组成 硬件体系结构: 经典的冯  诺依曼体系结构 由三个子系统组成 处理器子系统 存储器子系统 输入 / 输出子系统. 处理器子系统. 地址总线. 输入 / 输出子系统. 数据总线. 控制总线. 存储器子系统. 计算机硬件体系结构. 第 2 章 高级编程的硬件基础. 冯  诺依曼体系. ALU. 寄存器组. - PowerPoint PPT Presentation

Transcript of 第 2 章 高级编程的硬件基础

Page 1: 第 2 章 高级编程的硬件基础

主要内容

计算机硬件组成

80x86 微机系统

Turbo C 编译方式

BIOS和 DOS 调用

第 2 章 高级编程的硬件基础

Page 2: 第 2 章 高级编程的硬件基础

计算机系统:由硬件和软件两部分组成

硬件体系结构:经典的冯诺依曼体系结构

由三个子系统组成处理器子系统存储器子系统输入 / 输出子系统

计算机硬件组成

第 2 章 高级编程的硬件基础

Page 3: 第 2 章 高级编程的硬件基础

冯诺依曼体系

输入 / 输出子系统

处理器子系统

存储器子系统

地址总线

数据总线

控制总线

计算机硬件体系结构

第 2 章 高级编程的硬件基础

Page 4: 第 2 章 高级编程的硬件基础

处理器 CPU 子系统

控制单元

寄存器组

数据总线

控制 总线

CPU 示意图

ALU

地址 总线

CPU 组成:算术逻辑单元、控制单元和寄存器组

第 2 章 高级编程的硬件基础

Page 5: 第 2 章 高级编程的硬件基础

存储器子系统

存储器子系统:由主存储器和辅助存储器组成

主存储器:随机存取存储器( RAM )和只读存储器( ROM )两种类型。

辅助存储器:简称外存,具有外设的特性,以 I/O总线的方式和主机连接。

比较:辅助存储器与主存储器相比,具有存储容量大,存储的信息不会因断电而消失,价格便宜的特点,但存取速度慢。

第 2 章 高级编程的硬件基础

Page 6: 第 2 章 高级编程的硬件基础

输入 / 输出子系统

输入 / 输出子系统:简称 I/O 系统,包括多种类型的输入输出设备(外设),以及这些设备和处理器、存储器进行数据通信的接口电路。

注意:输入输出设备的工作速度比 CPU 和存储器慢许多,因此需要接口在中间起缓冲的作用,实现主机和外设交换数据速度的匹配 。

第 2 章 高级编程的硬件基础

Page 7: 第 2 章 高级编程的硬件基础

80X86 微机系统

按字长分类: 4 位微处理器 8 位微处理器 16 位微处理器 32 位微处理器 64 位微处理器

第 2 章 高级编程的硬件基础

Page 8: 第 2 章 高级编程的硬件基础

Intel 系列微处理器: 80x86 系列8086、 8088

80186、 80286

80386、 80486

Pentium、 Pentium2

Pentium3、 Pentium4 等

80x86 微机系统

第 2 章 高级编程的硬件基础

Page 9: 第 2 章 高级编程的硬件基础

8080 处理器: 16 位微处理器,地址总线为 20 位,直接寻址能力为 220=1048576=1024K=lM

80286、 80386和 80486 处理器:寻址范围增大,例如 80286 可达 16M, 80386(80486) 可达 4G 。

对低 1M 存储空间的寻址是为了和 8088 处理器兼容而设置的实地址方式,即 DOS 下的寻址方式。

80x86 系列主存储器分为:低 1M 部分称为系统存储器,高于 1M 的部分称为扩展存储器和扩充存储器。

主存储器结构

第 2 章 高级编程的硬件基础

Page 10: 第 2 章 高级编程的硬件基础

系统存储器:分为低地址部分 (0~640K) 和高地址部分 (640K~1024K) 两个部分。 640K 范围内的低地址部分又称为基本内存或常规内存 , 640K~1024K 部分称为高端内存。

系统存储器

基本存储器

高端存储器

00000

A0000

FFFFF

0

640K

1024K

中断向量表000000040000600

A0000

01K1.5K

640K

BIOS数据区

IO.SYS(IBMBIO.COM)MSDOS.SYS(IBMDOS.COM)

TSR

应用程序

COMMAND.COM暂驻部分

第 2 章 高级编程的硬件基础

Page 11: 第 2 章 高级编程的硬件基础

高端内存: 384K 的高地址部分,供视频显示和BIOS 等使用,分布情况如下图。

高端内存

/CGA/EGA/VGA单色RAM--VRAM显示

A0000B0000C0000D0000E0000F0000

FFFFF

/ BIOS EMS视频 磁盘 ,ROM扩充区

保留区ROM系统

640K704K768K832K896K960K1024K

第 2 章 高级编程的硬件基础

Page 12: 第 2 章 高级编程的硬件基础

地址范围及功能:

A0000到 BFFFF :显示缓冲区, CGA 显示缓冲区开始于 B8000, VGA、 EGA 显示缓冲区开始于 A0000 。这些空间也称作视频存储器,简称 VRAM 。

C0000到 DFFFF: ROM 扩充区,主要存放视频显示器适配器和磁盘的 BIOS ,一些网络控制板、 I/O 接口板和扩充内存分页帧也要用到此部分地址。

E0000到 EFFFF :保留区。

F0000到 FFFFF :系统 ROM ,该部分装有系统引导程序,还有系统基本输入输出系统 (BIOS) 。

高端内存

第 2 章 高级编程的硬件基础

Page 13: 第 2 章 高级编程的硬件基础

80x86 微处理器: 14 个基本寄存器,用于进行运算,控制指令的执行,处理内存寻址等。

8088/80286 微处理器的寄存器是 16 位长,在386、 486 中扩展为 32 位长 ( 段寄存器除外 ) 。

80386/80486 增加了特殊的内部寄存器, Turbo C 仅支持这 14 个基本寄存器,且长度认为是 16 位,即按照 8088的 14 个内部寄存器来进行操作。

寄存器

第 2 章 高级编程的硬件基础

Page 14: 第 2 章 高级编程的硬件基础

寄存器按其功能分类:通用寄存器地址指针寄存器变址寄存器段寄存器指令指针寄存器标志寄存器

寄存器分类

第 2 章 高级编程的硬件基础

Page 15: 第 2 章 高级编程的硬件基础

AX、 BX、 CX、 DX: 16 位数据寄存器,可分成高字节部分和低字节部分来使用。高字节部分对应于 AH、 BH、 CH、 DH ,低字节部分对应于 AL、 BL、 CL、 DL ,即四个 16 位寄存器可看作八个 8 位寄存器。

AX :累加器,用于所有的输入 / 输出操作BX :基址寄存器,用于扩展寻址,起变址作用CX :计数寄存器,在循环操作中用作计数器DX :数据寄存器,用于字乘法和除法,还用来提供输入输出操作中的口地址。

通用寄存器

第 2 章 高级编程的硬件基础

Page 16: 第 2 章 高级编程的硬件基础

CS、 DS、 SS、 ES :段寄存器,在实模式下的内存寻址是段左移 4位 + 偏移,每个段最大寻址范围为64K 字节,段的首地址保存在段寄存器中。

CS :代码段寄存器DS :数据段寄存器SS :堆栈段寄存器ES :附加段寄存器

段寄存器

第 2 章 高级编程的硬件基础

Page 17: 第 2 章 高级编程的硬件基础

(1) 指针寄存器SP 寄存器:栈指针寄存器。在访问堆栈时,段地址在SS 中, SP表示偏移地址。BP 寄存器:基址指针寄存器。通过堆栈传递数据地址时,段地址在 SS 中, BP 存放要传递的数据地址的偏移地址。 BP 也可作为通用寄存器用。

(2) 变址寄存器SI 源变址寄存器:表示字串的源地址,段地址在 DSDI 目的变址寄存器:表示目的地址,它常和附加段寄存器 ES 相关联,表示目的地址偏移。

其他寄存器

第 2 章 高级编程的硬件基础

Page 18: 第 2 章 高级编程的硬件基础

(3) IP 指令指针寄存器IP 寄存器存放要执行的下条指令的偏移地址。

(4) 标志寄存器l6 位寄存器,其中 6 位作为指令执行结果的状态标志,3 位用作控制标志。

其他寄存器

第 2 章 高级编程的硬件基础

Page 19: 第 2 章 高级编程的硬件基础

存取存储器时,选择一个段寄存器的值作为该段的开始地址,将其左移 4 位,再加上偏移地址,得到 20 位物理地址,即存储器的真实地址。

实地址寻址

16位偏移地址15 0

16位段地址15 0

+0000

20位物理地址19 0

012

50000H

59A2FH

5FFFFH

FFFFFH

9A2F段内偏移

段开始地址

一个段包含64k个地址

第 2 章 高级编程的硬件基础

Page 20: 第 2 章 高级编程的硬件基础

I/O 接口的寻址:有两种方法: 一种是将接口地址和存储器地址统一编址; 一种是 I/O 接口地址和存储器地址分别独立编址。

80x86CPU采用 I/O独立编址方式,采用专门的 I/O 指令来对接口地址进行操作。

I/O 接口的寻址

第 2 章 高级编程的硬件基础

Page 21: 第 2 章 高级编程的硬件基础

Turbo C 的内存模式 微小模式 (Tiny)微小模式编译 C 程序时,代码段、数据段、堆栈段的段地址均相同,即 CS=DS=SS=ES 。一般小程序可采用此编译模式进行编译。

小模式 (Small)Turbo C 的缺省模式。在该模式下,程序中的代码放在64K 的代码段内,数据放在 64K 的数据段内。栈段、附加数据段和数据段均指向同一地址,即 DS=SS=ES 。

第 2 章 高级编程的硬件基础

Page 22: 第 2 章 高级编程的硬件基础

Turbo C 的内存模式 中模式 (Medium)数据须在 64K 的数据段内,代码段不再限制在一个段内,即程序长度可以超过 64K(允许达到 1M) ,程序代码寻址必须用 20 位地址码。这种编译模式适用于大代码量,小数据量的大程序。

紧凑模式 (Compact) 紧凑模式与中模式是互补的。在该模式下,数据量可超过 64K ,放在多个数据段里。数据寻址必须用 20 位地址码。代码量不超过 64K ,在一个段内。这种编译模式适用于程序短而数据量大的场合。

第 2 章 高级编程的硬件基础

Page 23: 第 2 章 高级编程的硬件基础

Turbo C 的内存模式 大模式 (Large)在该模式下代码长度和数据长度均可达 1MB ,即各占多个段的内存。静态数据不能超过 64K 字节。该模式适合于需要处理大量数据的大程序。程序的运行速度大大慢于上述的几种模式。

巨模式 (Huge)该模式和大模式基本相同,代码分布在不同的代码段内,数据也分布在不同的数据段内,它们来自于不同的源程序,但堆栈只有一个。 Turbo C 一般限制静态数据不超过 64K ,但巨模式允许超过 64K 。

第 2 章 高级编程的硬件基础

Page 24: 第 2 章 高级编程的硬件基础

当一个程序较大时,可将一个程序分成几个部分,每个部分可单独成为一个源文件,这些文件通过全局变量或函数相联系。它们可进行单独编译,形成 .OBJ文件。

可以采用两种方法将这些文件组合成一个完整的应用程序。

多文件编译

第 2 章 高级编程的硬件基础

Page 25: 第 2 章 高级编程的硬件基础

假设一个程序分成了 A1.c和 A2.c 两个源文件

A2.c文件中定义了函数 A2() :

#include <string.h>void A2(){

...}

include 方法

第 2 章 高级编程的硬件基础

Page 26: 第 2 章 高级编程的硬件基础

A1.c 中的 main()函数调用 A2()函数,则 A1.c写成:

#include <stdio.h>#include “A2.c” /*include预处理命令 */main(){

...A2();...

}

include 方法

第 2 章 高级编程的硬件基础

Page 27: 第 2 章 高级编程的硬件基础

假设一个程序分成了 A1.c和 A2.c 两个源文件, project 工程文件法生成可执行程序的步骤如下:

( 1 )用 TC 编辑器建立一个文本文件,内容为: A1.c A2.c保存于文件 AA.prj 中。

( 2 )在 TC 环境中,按 ALT+P ,选择 Project菜单中的 Project name项,填入文件名 AA.prj后,按 F9键,即可生成 AA.exe 的可执行文件。

Project 工程文件法

第 2 章 高级编程的硬件基础

Page 28: 第 2 章 高级编程的硬件基础

中断概念 中断: CPU 在正常运行程序时,由于程序预先安排或内外部事件(称为中断源),引起 CPU 中断正在运行的程序,并根据中断源提供的地址信息(称为中断向量)而转到事件中断服务程序中执行。

中断向量:微机采用中断类型号来标识中断源。微机的中断分为软中断和硬中断两种类型。软中断也称为内中断,是由执行某些指令引起;硬中断也称为外中断,是由接口设备引起的。

第 2 章 高级编程的硬件基础

Page 29: 第 2 章 高级编程的硬件基础

中断向量表: 80x86 内存的前 1024 个字节为中断向量表 ( 地址 00000—003FFH) ,可存储 256 个中断向量。

中断向量:每个中断向量占用 4 个字节,前两个字节为中断服务程序的入口地址偏移量,后两个字节装入了段地址。

将中断向量的这四个字节分别装入 IP及 CS 中,便可转入中断服务程序。

中断概念

第 2 章 高级编程的硬件基础

Page 30: 第 2 章 高级编程的硬件基础

BIOS (即基本输入输出系统): Intel80x86 微机高端内存的 ROM 中固化的对键盘、显示器、磁盘驱动器、打印机、异步通讯、时钟等操作的子程序。 BIOS 程序本身直接与外部设备进行通讯,并为编程人员提供了一个简单的接口。 利用 BIOS 程序,不仅可以有效利用系统资源,而且能大大提高程序的开发效率和质量。 BIOS 的调用比较简单,通过中断号调用 BIOS 中的各个程序,即每个外部设备均有一个软中断调用号,每个中断号下有许多不同的子功能号,控制设备的不同功能。

BIOS 调用

第 2 章 高级编程的硬件基础

Page 31: 第 2 章 高级编程的硬件基础

BIOS 调用 BIOS 主要功能简表

中断调用号 主要功能 中断调用号 主要功能

05H 屏幕拷贝 17H 打印机服务

09H 键盘中断 1AH 日期时间服务

10H 显示器服务 1BH 键盘终止地址

11H 设备检查 1CH 定时器信号

12H 确定内存容量 1EH 软盘参数表

13H 磁盘服务 21H DOS 系统功能

14H 串行口通讯服务 27H 驻留内存

16H 键盘服务 33H 鼠标功能

第 2 章 高级编程的硬件基础

Page 32: 第 2 章 高级编程的硬件基础

TC 2.0 标准头文件头文件 用途 头文件 用途

alloc.h 动态地址分配函数 math.h 数学库使用的各种定义

assert.h 定义 assert()宏 mem.h 内存操作函数

bios.h ROM基本输入输出函数 process.h spawn()和 exec()函数

conio.h 屏幕操作函数 setjmp.h 非局部跳转

ctype.h 字符操作函数 share.h 文件共享

dir.h 目录操作函数 signal.h 定义信号值

dos.h DOS接口函数 stdarg.h 变量长度参数表

errno.h 定义出错代码 stddef.h 定义一些常用常数

fcntl.h 定义 open()使用的函数 stdio.h 以流为基础的 I/O函数

float.h 定义从属于环境工具的浮点值 stdlib.h 其他说明

graphics.h 图形函数 string.h 字符串函数

io.h UNIX型 I/O函数 time.h 系统时间函数

limits.h 定义从属于环境工具的各种限定 values.h 从属于机器的常数

第 2 章 高级编程的硬件基础