#############################################################################
2010年5月8日
第二章
1.课前思考
(1) 微计算机系统一般包括哪两部分?
答:计算机系统主要是由硬件和软件两大部分组成。
(2) 8086微处理器主要由哪几部分组成?它们的功能是什么?
答:整个微处理器分成两大功能部件,即执行部件(Execution Unit,EU)与总线接口部件(Bus Interface Unit,BIU)。EU与BIU通过内部总线连接,它们既可协同工作,又可独立工作。当EU与BIU各自独立工作时,就体现出8086内部操作具有并行性的特征。
(3) 一个字节和一个字分别由几个二进制位组成?
答: 一个字节等由8位二进制组成,一个字由16位二进制组成。
(4) 在Intel系列微型机中是如何编址的?
答:物理地址、偏移地址和逻辑地址。
(5) 一个字节和一个字在存储器中是如何存储的?
答:对于字、双字、四字数据类型,其低地址中存放低位字节数据,高地址中存放高位字节数据
(6) 字单元的地址是偶数或是奇数时,访问存储器有什么不同?
答: 字单元的地址可以是偶数,也可以是奇数。但是,在8086中,访问存储器(要求取数或存数)都是以字为单位进行的,也就是说,机器是以偶地址访问存储器的。这样,对于奇地址的字单元,要取一个字需要访问二次存储器,这就需要花费较多的时间。
(7) 8086微型机可以访问的最大存储空间是多少?应用几位地址来表示?
答:1MB的存储器空间,16位的段地址和16位的偏移地址组合形成20位的物理地址,这就是8086的工作方式。
(8) 在8086微机中,如何提供20位的地址?如何形成物理地址?
答: 存储器单元的物理地址(20位)的计算:物理地址=段地址×24+偏移地址。
(9) 8086微机中,存储器空间可分为几种逻辑段?每段的可寻址空间是多大?段地址存放在哪些寄存器中?
答:代码段寄存器CS:存放当前执行的程序的段地址。 代码段地址存放在CS中.
数据段寄存器DS:存放当前执行的程序所用操作数的段地址。数据段地址存放在 DS中
堆栈段寄存器SS:存放当前执行的程序所用堆栈的段地址。 堆栈段地址存放在SS中
附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址。附加段地址存放在ES中
(10) CPU中有哪几类寄存器,它们各自的专门用途是什么?
答:通用寄存器、专用寄存器和段寄存器三类。
(11) 条件码标志和控制标志各包含几位?它们每位所表示的意义是什么?
答:条件码6位:
① 进位标志 CF,记录运算时最高有效位产生的进位值。
② 符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0。
③ 零标志 ZF,运算结果为0时ZF位置1,否则置0。
④ 溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。
⑤ 辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。
⑥ 奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。
控制标志位有3位:
① 方向标志 DF,在串处理指令中控制处理信息的方向。当DF=1时,串处理从高地址向低地址方向处理。当DF=0时,串处理就从低地址向高地址方向处理。
② 陷阱标志 TF,用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。
③ 中断标志 IF,用于控制可屏蔽硬件中断。当IF=1时,允许8086微处理器响应中断请求,否则关闭中断。
(12) 什么是DOS和BIOS功能调用?
答:BIOS和DOS功能调用是系统提供给用户的例行程序,这些例行程序给程序员提供了易于使用的直接对硬件操作的子功能,程序员编程时可直接中断调用这些功能,而不必了解硬件操作的具体细节。
2,寄存器
AX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部
设备传送信息。
BX在计算存储器地址时,可作为基址寄存器使用。
CX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。
DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。此外,对某些I/O操作,DX可用来存放
I/O的端口地址。
SP、BP、SI、DI四个16位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,它们
更经常的用途是在存储器寻址时,提供偏移地址。因此,它们可称为指针或变址寄存器。
SP称为堆栈指针寄存器,用来指出栈顶的偏移地址。
BP称为基址指针寄存器,在寻址时作为基地址寄存器使用,但它必须与堆栈段寄存器SS联用来确定堆栈段中的存储单元地址。
SI为源变址寄存器,在串处理指令中,SI作为隐含的源变址寄存器与DS联用,以确定数据段中的存储单元地址,并有自动增量和自动
减量的变址功能。
DI为目的变址寄存器,在串处理指令中,DI和附加段寄存器ES联用,以达到在附加段中寻址的目的,然后DI自动增量或减量。
3,专用寄存器
8086的专用寄存器包括IP、SP和FLAGS三个16位寄存器。
IP为指令指针寄存器,它用来存放将要执行的下一条指令地址的偏移量,它与段寄存器CS联合形成代码段中指令的物理地址。在计算
机中,控制程序的执行流程就是通过控制IP的值来实现的。
SP为堆栈指针寄存器,它与堆栈段寄存器联用来确定堆栈段中栈顶的地址,也就是说SP用来存放栈顶的偏移地址。
FLAGS为标志寄存器,这是一个存放条件码标志、控制标志的16位寄存器。
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
条件码标志用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由CPU自动设置的。由于这些状态信息往往作为后续条
件转移指令的转移控制条件,所以称为条件码。
① 进位标志 CF,记录运算时最高有效位产生的进位值。
② 符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0。
③ 零标志 ZF,运算结果为0时ZF位置1,否则置0。
④ 溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。
⑤ 辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。
⑥ 奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0
。
控制标志位有3位:
① 方向标志 DF,在串处理指令中控制处理信息的方向。当DF=1时,串处理从高地址向低地址方向处理。当DF=0时,串处理就从低
地址向高地址方向处理。
② 陷阱标志 TF,用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常
工作,不产生陷阱。
③ 中断标志 IF,用于控制可屏蔽硬件中断。当IF=1时,允许8086微处理器响应中断请求,否则关闭中断。
8086提供了设置某些状态信息的指令。必要时,程序员可使用这些指令来建立状态信息。
标 志 名 标 志 为1 标 志 为0
OF 溢出 OV (是) NV (否)
DF 方向 DN (减量) UP (增量)
IF 中断 EI (允许) DI (关闭)
SF 符号 NG (为负) PL (为正)
ZF 零 ZR (是) NZ (否)
AF 辅助进位 AC (是) NA (否)
PF 奇偶 PE (偶) PO (奇)
CF 进位 CY (是) NC (否)
4. 段寄存器
8086微处理器共有4个16位的段寄存器,在寻址内存单元时,用它们直接或间接地存放段地址。
代码段寄存器CS:存放当前执行的程序的段地址。
数据段寄存器DS:存放当前执行的程序所用操作数的段地址。
堆栈段寄存器SS:存放当前执行的程序所用堆栈的段地址。
附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址。
在8086中,段寄存器和与其对应存放偏移地址的寄存器之间有一种默认的组合关系,如下所示:
段寄存器 偏移地址寄存器
CS IP
SS SP或BP
DS BX、DI、SI
ES DI(用于串指令)
在这种默认的组合下,程序中不必专门指定其组合关系,但程序如用到非默认的组合关系,则必须用段跨越前缀(如ES:)加以说明。
5。 外部设备
计算机运行时的程序和数据以及所产生的的结果都要通过输入/输出设备与人交互,或者保存在大容量的外存储器中,因此输入/输出
设备(或简称外部设备)是计算机必不可少的组成部分,对外设进行有效的管理和信息传输是汇编语言的重要应用领域之一。
从图2.1可见,外部设备与主机(微处理器和存储器)的通信是通过外设接口进行的。每个接口包括一组寄存器。一般说来,这些寄存
器有三种不同的用途:
1. 数据寄存器:用来存放要在外设和主机间传送的数据,这种寄存器实际上起缓冲器的作用。
2. 状态寄存器:用来保存外部设备或接口的状态信息,以便微处理器在必要时测试外设状态,了解外设的工作情况。
3. 命令寄存器:CPU给外设或接口的控制命令通过此寄存器送给外部设备。例如,CPU要启动磁盘工作,必须发出启动命令等。
各种外部设备都有以上三种类型的寄存器,只是每个接口所配备的寄存器数量是根据设备的需要确定的。
为了便于主机访问外设,外设中的每个寄存器给予一个端口地址(又称端口号),由这些端口地址组成了一个独立于内存储器的I/O地
址空间。80x86的I/O地址空间可达64KB,所以端口地址的范围是0000~FFFFH,用16位二进制代码来表示。端口可以是8位或16位。
在80x86系列机中,由于I/O地址空间是独立编址的,所以系统提供了访问外设的输入/输出指令IN和OUT。
为了便于用户使用外设,8086提供了两种类型的例行程序供用户调用。一种是BIOS(Basic Input/Output System),另一种是DOS
(Disk Operating System)功能调用。它们都是系统编制的子程序,通过中断方式转入所需要的子程序去执行。用户通过调用DOS或BIOS
例行程序来实现对外设的访问,降低了程序设计的复杂程度,缩短了开发周期。
【本章小结】
1.计算机系统
计算机系统包括硬件和软件两部分。硬件结构包括80X86微处理器、存储器和I/O子系统,这三个主要部分由系统总线连接在一起。软
件分为系统软件和应用软件。操作系统是系统软件的核心,主要对系统的硬、软件资源进行管理,其中汇编程序是将汇编语言程序翻译成
机器语言程序的一种系统程序。
2.存储器
存储器以字节为单位存储信息,一个字节单元对应一个地址编码,地址码用无符号整数来表示。8086微型机既能处理8位数据(字节
),也能处理16位数据(字),字数据存储在连续的两个字节单元中。
存储空间在逻辑上分为代码段、数据段、附加段和堆栈段,每个段可寻址64KB,段的起始地址分别由段寄存器CS、DS、ES、SS给出
,段内地址称为偏移地址。
存储器单元的物理地址(20位)的计算:物理地址=段地址×24+偏移地址。
存储器的分段是很灵活的,各段之间可以相互独立,也可以互相重叠。
3.8086寄存器组
8086寄存器按功能可分为:①通用数据寄存器(AX、BX、CX、DX、AH、AL、BH、BL、CH、CL、DH、DL)②指针及变址寄存器
(SP、BP、SI、DI)③段寄存器(CS、DS、ES、SS)④专用寄存器(IP、FLAGS)
4.外部设备
外设接口负责微处理器对I/O设备的控制和信息的传送,每个接口包括一组寄存器,分别存放控制信息、状态信息和数据信息。
外设中的寄存器都分配一个端口地址,CPU与外设交换信息用两条专门的输入输出指令IN和OUT来完成。
BIOS和DOS功能调用是系统提供给用户的例行程序,这些例行程序给程序员提供了易于使用的直接对硬件操作的子功能,程序员编程
时可直接中断调用这些功能,而不必了解硬件操作的具体细节。
1 在8086微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号。试问可直接
由指令指定的I/O端口数。
答:直接由指令指定的I/O端口数为256个。
2、有两个16位字1EE5H和2A3CH分别存放在8086微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。
答:
00B0 E5
00B1 1E
00B2
00B3 3C
00B4 2A
3、 8086微机的存储器中存放信息如下图所示。试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。
30020 12H
30021 34H
30022 ABH
30023 CDH
30024 EFH
答:字节单元:(30022H) = AB H,(30024H) = EF H
字单元: (30021H) = AB34 H,(30022H) = CDAB H。
4 在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢
?
答:3017:000A的存储单元的物理地址是3017AH,
3015:002A的存储单元的物理地址是3017AH,
3010:007A的存储单元的物理地址是3017AH。
5、如果在一个程序开始执行以前(CS)=0A7F0H(如十六进制数的最高位为字母,则应在其前加一个0),(IP)=2B40H,试问该程序
的第一个字的物理地址是多少?
答:该程序的第一个字的物理地址是0AAA40H。
6 、在实模式下,存储器中每一段最多可有10000H个字节。如果用调试程序Debug的r命令在终端上显示出当前各寄存器的内容如下,请
画出此时存储器分段的示意图,以及条件标志OF、SF、ZF、CF的值。
C>debug
-r
AX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=10E4 ES=10F4 SS=21F0 CS=31FF IP=0100 NV UP DI PL NZ NA PO NC
答:条件标志OF、SF、ZF、CF的值依次分别为0、0、0、0。
7、 下列操作可使用哪些寄存器?
(1) 加法和减法
(2) 循环计数
(3) 乘法和除法
(4) 保存及使用段地址
(5) 表示运算结果为0
(6) 将要执行的指令地址
(7) 提供偏移地址
答:(1)AX、BX、CX、DX、AH、AL、BH、BL、CH、CL、DH、DL、
SP、BP、DI、SI(注意:学生尽量不要用SP参与加减运算)
(2)CX
(3)DX、AX、AH、AL
(4)CS、DS、ES、SS
(5)FLAGS
(6)IP
(7)SS、SP、BP
8、那些寄存器可以用来指示存储器地址?
答:可以用来指示存储器地址的寄存器有BX、SP、BP、DI、SI、IP、CS、DS、ES、SS。
9、下面几种说法中唯一正确的是哪一种?
A、单独用16位地址线提供的地址可以访问1M字节存储器空间。
B、数据段段首址可以是00000 ~ FFFFF中任意一个地址。
C、用WS、EDIT等编辑软件可以编写汇编程序。
D、堆栈段段首地址可以是FFFE0H。
答:唯一正确的是D。