第2章 高级编程的硬件基础 主要内容 计算机硬件组成 80x86微机系统 Turbo C编译方式 BIOS和DOS调用
第2章 高级编程的硬件基础 计算机硬件组成 计算机系统:由硬件和软件两部分组成 硬件体系结构:经典的冯诺依曼体系结构 由三个子系统组成 处理器子系统 存储器子系统 输入/输出子系统
第2章 高级编程的硬件基础 冯诺依曼体系 输入/输出子系统 处理器子系统 存储器子系统 地址总线 数据总线 控制总线 计算机硬件体系结构
第2章 高级编程的硬件基础 处理器CPU子系统 CPU组成:算术逻辑单元、控制单元和寄存器组 CPU示意图 控制单元 寄存器组 数据总线 ALU 地址 CPU组成:算术逻辑单元、控制单元和寄存器组
第2章 高级编程的硬件基础 存储器子系统 存储器子系统:由主存储器和辅助存储器组成 主存储器:随机存取存储器(RAM)和只读存储器(ROM)两种类型。 辅助存储器:简称外存,具有外设的特性,以I/O总线的方式和主机连接。 比较:辅助存储器与主存储器相比,具有存储容量大,存储的信息不会因断电而消失,价格便宜的特点,但存取速度慢。
第2章 高级编程的硬件基础 输入/输出子系统 输入/输出子系统:简称I/O系统,包括多种类型的输入输出设备(外设),以及这些设备和处理器、存储器进行数据通信的接口电路。 注意:输入输出设备的工作速度比CPU和存储器慢许多,因此需要接口在中间起缓冲的作用,实现主机和外设交换数据速度的匹配 。
第2章 高级编程的硬件基础 80X86微机系统 按字长分类: 4位微处理器 8位微处理器 16位微处理器 32位微处理器 64位微处理器
第2章 高级编程的硬件基础 80x86微机系统 Intel系列微处理器:80x86系列 8086、8088 80186、80286 80386、80486 Pentium、Pentium2 Pentium3、Pentium4等
第2章 高级编程的硬件基础 主存储器结构 8080处理器:16位微处理器,地址总线为20位,直接寻址能力为220=1048576=1024K=lM 80286、80386和80486处理器:寻址范围增大,例如80286可达16M,80386(80486)可达4G。 对低1M存储空间的寻址是为了和8088处理器兼容而设置的实地址方式,即DOS下的寻址方式。 80x86系列主存储器分为:低1M部分称为系统存储器,高于1M的部分称为扩展存储器和扩充存储器。
第2章 高级编程的硬件基础 系统存储器 系统存储器:分为低地址部分(0~640K)和高地址部分(640K~1024K)两个部分。640K范围内的低地址部分又称为基本内存或常规内存 ,640K~1024K 部分称为高端内存。
第2章 高级编程的硬件基础 高端内存 高端内存:384K的高地址部分,供视频显示和BIOS等使用,分布情况如下图。
第2章 高级编程的硬件基础 高端内存 地址范围及功能: A0000到BFFFF:显示缓冲区,CGA显示缓冲区开始于B8000,VGA、EGA显示缓冲区开始于A0000。这些空间也称作视频存储器,简称VRAM。 C0000到DFFFF:ROM扩充区,主要存放视频显示器适配器和磁盘的BIOS,一些网络控制板、I/O接口板和扩充内存分页帧也要用到此部分地址。 E0000到EFFFF:保留区。 F0000到FFFFF:系统ROM,该部分装有系统引导程序,还有系统基本输入输出系统(BIOS)。
第2章 高级编程的硬件基础 寄存器 80x86微处理器:14个基本寄存器,用于进行运算,控制指令的执行,处理内存寻址等。 8088/80286微处理器的寄存器是16位长,在386、486中扩展为32位长(段寄存器除外)。 80386/80486增加了特殊的内部寄存器,Turbo C仅支持这14个基本寄存器,且长度认为是16位,即按照8088的14个内部寄存器来进行操作。
第2章 高级编程的硬件基础 寄存器分类 寄存器按其功能分类: 通用寄存器 地址指针寄存器 变址寄存器 段寄存器 指令指针寄存器 标志寄存器
第2章 高级编程的硬件基础 通用寄存器 AX、BX、CX、DX:16位数据寄存器,可分成高字节部分和低字节部分来使用。 高字节部分对应于AH、BH、CH、DH,低字节部分对应于AL、BL、CL、DL,即四个16位寄存器可看作八个8位寄存器。 AX:累加器,用于所有的输入/输出操作 BX:基址寄存器,用于扩展寻址,起变址作用 CX:计数寄存器,在循环操作中用作计数器 DX:数据寄存器,用于字乘法和除法,还用来提供输入输出操作中的口地址。
第2章 高级编程的硬件基础 段寄存器 CS、DS、SS、ES:段寄存器,在实模式下的内存寻址是段左移4位+偏移,每个段最大寻址范围为64K字节,段的首地址保存在段寄存器中。 CS:代码段寄存器 DS:数据段寄存器 SS:堆栈段寄存器 ES:附加段寄存器
第2章 高级编程的硬件基础 其他寄存器 (1) 指针寄存器 SP寄存器:栈指针寄存器。在访问堆栈时,段地址在SS中,SP表示偏移地址。 BP寄存器:基址指针寄存器。通过堆栈传递数据地址时,段地址在SS中,BP存放要传递的数据地址的偏移地址。BP也可作为通用寄存器用。 (2) 变址寄存器 SI源变址寄存器:表示字串的源地址,段地址在DS DI目的变址寄存器:表示目的地址,它常和附加段寄存器ES相关联,表示目的地址偏移。
第2章 高级编程的硬件基础 其他寄存器 (3) IP指令指针寄存器 IP寄存器存放要执行的下条指令的偏移地址。 (4) 标志寄存器 l6位寄存器,其中6位作为指令执行结果的状态标志,3位用作控制标志。
第2章 高级编程的硬件基础 实地址寻址 存取存储器时,选择一个段寄存器的值作为该段的开始地址,将其左移4位,再加上偏移地址,得到20位物理地址,即存储器的真实地址。
第2章 高级编程的硬件基础 I/O接口的寻址 I/O接口的寻址: 有两种方法: 一种是将接口地址和存储器地址统一编址; 80x86CPU采用I/O独立编址方式,采用专门的I/O指令来对接口地址进行操作。
第2章 高级编程的硬件基础 Turbo C的内存模式 微小模式(Tiny) 微小模式编译C程序时,代码段、数据段、堆栈段的段地址均相同,即CS=DS=SS=ES。一般小程序可采用此编译模式进行编译。 小模式(Small) Turbo C的缺省模式。在该模式下,程序中的代码放在64K的代码段内,数据放在64K的数据段内。栈段、附加数据段和数据段均指向同一地址,即DS=SS=ES。
第2章 高级编程的硬件基础 Turbo C的内存模式 中模式(Medium) 数据须在64K的数据段内,代码段不再限制在一个段内,即程序长度可以超过64K(允许达到1M),程序代码寻址必须用20位地址码。这种编译模式适用于大代码量,小数据量的大程序。 紧凑模式(Compact) 紧凑模式与中模式是互补的。在该模式下,数据量可超过64K,放在多个数据段里。数据寻址必须用20位地址码。代码量不超过64K,在一个段内。这种编译模式适用于程序短而数据量大的场合。
第2章 高级编程的硬件基础 Turbo C的内存模式 大模式(Large) 在该模式下代码长度和数据长度均可达1MB,即各占多个段的内存。静态数据不能超过64K字节。该模式适合于需要处理大量数据的大程序。程序的运行速度大大慢于上述的几种模式。 巨模式(Huge) 该模式和大模式基本相同,代码分布在不同的代码段内,数据也分布在不同的数据段内,它们来自于不同的源程序,但堆栈只有一个。Turbo C一般限制静态数据不超过64K,但巨模式允许超过64K。
第2章 高级编程的硬件基础 多文件编译 当一个程序较大时,可将一个程序分成几个部分,每个部分可单独成为一个源文件,这些文件通过全局变量或函数相联系。它们可进行单独编译,形成.OBJ文件。 可以采用两种方法将这些文件组合成一个完整的应用程序。
第2章 高级编程的硬件基础 include方法 假设一个程序分成了A1.c和A2.c两个源文件 A2.c文件中定义了函数A2() : #include <string.h> void A2() { ... }
第2章 高级编程的硬件基础 include方法 A1.c中的main()函数调用A2()函数,则A1.c写成: #include <stdio.h> #include “A2.c” /*include预处理命令*/ main() { ... A2(); }
第2章 高级编程的硬件基础 Project工程文件法 假设一个程序分成了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的可执行文件。
第2章 高级编程的硬件基础 中断概念 中断:CPU在正常运行程序时,由于程序预先安排或内外部事件(称为中断源),引起CPU中断正在运行的程序,并根据中断源提供的地址信息(称为中断向量)而转到事件中断服务程序中执行。 中断向量:微机采用中断类型号来标识中断源。微机的中断分为软中断和硬中断两种类型。软中断也称为内中断,是由执行某些指令引起;硬中断也称为外中断,是由接口设备引起的。
第2章 高级编程的硬件基础 中断概念 中断向量表:80x86内存的前1024个字节为中断向量表(地址00000—003FFH) ,可存储256个中断向量。 中断向量:每个中断向量占用4个字节,前两个字节为中断服务程序的入口地址偏移量,后两个字节装入了段地址。 将中断向量的这四个字节分别装入IP及CS中,便可转入中断服务程序。
第2章 高级编程的硬件基础 BIOS调用 BIOS(即基本输入输出系统):Intel80x86微机高端内存的ROM中固化的对键盘、显示器、磁盘驱动器、打印机、异步通讯、时钟等操作的子程序。BIOS程序本身直接与外部设备进行通讯,并为编程人员提供了一个简单的接口。 利用BIOS程序,不仅可以有效利用系统资源,而且能大大提高程序的开发效率和质量。BIOS的调用比较简单,通过中断号调用BIOS中的各个程序,即每个外部设备均有一个软中断调用号,每个中断号下有许多不同的子功能号,控制设备的不同功能。
第2章 高级编程的硬件基础 BIOS调用 BIOS主要功能简表 中断调用号 主要功能 05H 屏幕拷贝 17H 打印机服务 09H 键盘中断 1AH 日期时间服务 10H 显示器服务 1BH 键盘终止地址 11H 设备检查 1CH 定时器信号 12H 确定内存容量 1EH 软盘参数表 13H 磁盘服务 21H DOS系统功能 14H 串行口通讯服务 27H 驻留内存 16H 键盘服务 33H 鼠标功能
第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 从属于机器的常数