微型计算机原理及应用
( 64学时)
主讲教师,左冬红
TEL,61048876
前言一、目的
学习微型计算机的 基本组成原理、结构、特点、接口、指令、汇编语言程序设计?软件硬件结合,以达到 把手伸到计算机内部 的目的。
本课程以 Intel 80X86微机,即 PC系列微机为硬件范例,来讨论微机的构成原理,以及存储器、输入输出接口芯片与 CPU的接口方法。
二、特点
技术性,实践性较强?实验课单独设课:计划学时 48,课表学时 48* 2= 96
计算机硬件系列课程:微机原理,微机原理实验,微机应用系统课程设计,单片机(任选)。
三、教材及参考书
微机原理与接口技术 (北方交大)朱定华
微机应用系统设计 (华工)朱定华等
谢瑞和等编著 /微型计算机原理与接口技术基础教程 / 科学出版社 / 2005.8
四,成绩与考试
平时成绩 20%?作业,上机调试 。
期末考试 80%?闭卷 。
五 教学内容安排
运算基础与微型机的基本结构 ( 1章)
汇编语言和汇编程序设计 ( 2,3章 )
8086/8088的总线与时序 ( 4章)
微机接口技术
存储器和 I/O接口 ( 5,6章)
中断 (Interrupt)控制 ( 7章)
常用可编程接口芯片 (8章 )
第一章 计算机的运算基础与微型机的基本结构
§ 1.1 计算机的数和编码系统一,计算机中的 数制 ------任何数都可以用一组统一的符号和规则表示,
1.常用数制 -----二,十,十六进制,
* 计算机的数是以器件的物理状态来表示的,计算机由数字器件组成,所以全部用二进制表示,
* 因为目前微机都是 8,16,32位,都是四的整数倍,24=16,为 书写方便,而广泛使用十六进制数,
* 为符合人们日常习惯,而使用十进制数,
2.为防止二义性,约定,
* 数后带 D或不带任何符号,则为十进制数 ;
* 带 B为二进制数 ;
* 带 H为十六进制数,
如,100,即一百 ;100B,即四 ;100H,即 256.
3,十,二,十六进制 数间的关系 如下表 (P1.
表 1-1).
4.任一个 J进制数 N都可表示为 按权展开多项式
NJ=∑Ki*Ji
其中,Ki可取 0,1,… (J-1)的任一数码符号,
Ji------权 (即数的基值 ).
J------基数,常用 J=2,10,16.
例,525.15=5*102+2*101+5*100+1*10-1+5*10-2
1101.11B=1*23+1*22+0*21+1*20+1*2-1+1*1-2
4CD.2H=4*162+12*161+13*160+2*16-1
5.数制间的 转换
二十六,从小数点开始,每四位一组,与表对应即可,
如,
0010 1011 1101 B 3 A 5 C H
2 B D H 0011 1010 0101 1100 B
十二,十六,
二,十六?十,利用 按权展开多项式,相乘,相加,即可,
如,11.11B=1*21+1*20+1*2-1+1*2-2=3.75
11H=1*161+1*160=17
十?二,十六,整数 ----除,基,取余法,
小数 ----乘,基,取整法,
如,39=27H=100111B
16 39 2 39
16 2 … 7 2 19 … 1
0 … 2 2 9 … 1
2 4 … 1
2 2… 0
2 1… 0
0… 1
即用基 16或 2不断地去除待转换的十进制数,直到商为 0,将其余数 倒序排列 即可,
如,0.75=0.11B=0.1100B=0.CH
0.75 0.75
* 2 * 16
1.50 450
* 2 + 75
1.0 12.00
即用基 2或 16不断地去乘待转换的十进制小数,将每次所得的整数 依次排列,直到乘积为 0或满足精度要求为止,
二,带符号数的表示
1,机器数与真值 ----连同符号位在一起编码的数?机器数 ;其数值部分为机器数的 真值,
机器中的数也应有正负之分,约定一个数的最高位为符号位,0?正数,1?负数,
如,X1=+91=0101 1011B=5BH ; +101 1011B,即+
91为其真值。
如,X2=-91=1101 1011B=DBH ; -101 1011B
若把机器数的符号位也当作数值的数?无符号数 ;
如无符号数,DBH=219
为了运算方便,带符号数有三种表示法?原码,反码,补码,
2.原码?按上述表示,正数的符号?0,负数的符号?1,数值部分用其绝对值表示,
如,[+ 91]原 =0101 1011B=5BH
[- 91]原 =1101 1011B=DBH
注,以 A----F开头的数,约定前面加 0;即写成,0DBH
原码表示的数,8位数中,D7位为符号位,其余 7位为数值位 (为 真值的绝对值 ).
原码表示简单易懂,且与真值转换方便,但内部运算复杂,为简化计算机结构,而引进反码和补码,
3.反码?正数的反码与原码相同,负数的反码为它的 正数的反码按位取反,
如,[X1=+91]反 =0101 1011B=5BH
[X2=-91]反 =1010 0100B=0A4H
如,[+4]反 =0000 0100B=04H
[-4]反 =1111 1011B=0FBH
[+127]反 =0111 1111B=7FH
[-127]反 =1000 0000B=80H
[+0]反 =0000 0000B=00H
[-0]反 =1111 1111B=0FFH
注,一个负数的反码的数值部分并不是其真值的绝对值,要按位取反才能求得真值的绝对值,
4.补码?正数的补码与原码相同,负数的补码为它的正数的补码按位求反,且在最低位加 1(求反加 1),
如,[+91]补 =0101 1011B=5BH
[-91]补 =1010 0101B=0A5H
如,[+4]补 =0000 0100B=04H
[-4]补 =1111 1100B=0FCH
[+127]补 =0111 1111B=7FH
[-127]补 =1000 0001B=81H
[+0]补 =0000 0000B=00H
[-0]补 =0000 0000B=00H
注,一个补码表示的数,最高位为 0?正数,其余位为其真值 ;最高位为 1?负数,其余位并不表示真值的绝对值,必需再求补,才得其真值的绝对值,
如,已知 [X]补 =94H=1001 0100B?数值位求补?
-110 1100B=-6CH=-108
说明,
微机中,凡是带符号数约定用补码表示(除非特殊申明 ).
数可用 8位或 16位或 32位 (即 2位或 4位或 8位 16进制数 )表示一个数?称为 字节,字,双字类型,
如,[+4]补 =04H? 字节表示
[+4]补 =0004H?字表示
[-4]补 =1111 1100B=0FCH?字节表示
[-4]补 =1111 1111 1111 1100B=0FFFCH?字表示例说明 16位补码实际上是 8位补码的 符号扩展,即一个二进制数的补码的符号位向左扩展若干位后,仍是该数的补码,
值得注意的是,只有最高位才是符号位,字节为 D7位,
字为 D15位,
* 进行数的转换时,应考虑 数的表示范围,
* 8位无符号数所能表示的范围,00H~ 0FFH,即 0~
255,即 0~ 28-1.
* 16位无符号数所能表示的范围,0000H~ 0FFFFH,即
0~ 65535,即 0~ 216.
* 8位补码数所能表示的范围,80H~ 7FH,即 -128~
+127,即 -27~ +27-1.
* 16位补码数所能表示的范围,8000H~ 7FFFH,即 -
32768~ +32767,即 -215~ +215-1,
.引进补码的好处是为了内部简化运算,从而简化计算机硬件结构 (因为 2的补码,只要求反加 1,硬件易于实现 ).
例,127-12=115?127+(-12)=115
0111 1111 0111 1111
- 0000 1100 + 1111 0100
0111 0011 1 0111 0011
因为超出表示范围,进位自然丢掉,(注意 只是内部运算将减法变为补码加 ).
作业,第一章,1,64,100,255
2,2CH,0CADH,100H
3,+18,-18,+347,-347,+65530,-65530
4,71H,0F8H,9350H
三,二进制数的运算数字系统中可进行两种基本运算,加减运算,利用加减运算可进行乘除及其它运算,
1.二进制加法规则,
0+0=0
0+1=1+0=1
1+1=0?进位 1
1+1+1=1?进位 1 ;实际两数相加,每位都有三个数操作,
2.二进制减法规则,
0-0=0
1-0=1
1-1=0
0-1=1?借位 1 ;实际两数相减,每位都有三个数操作
3.无符号数的运算 (即 8位或 16位均表示数值 ).
(1).两个无符号数相加 ----两数相加,其和超过其所表示的范围时,就向更高位 产生进位 ----用 CF标志 表示,
如,
3BH+0A4H=0DFH<FFH; 7EH+0C3H=141H>0FFH
0011 1011 0111 1110
+ 1010 0100 + 1100 0011
1101 1111 1 0100 0001
无进位,CF=0 有进位,CF=1
(2).两个无符号数相减 ----被减数大于等于减数,
无借位 ;被减数小于减数有借位,结果为负,如,
7EH-35H=49H ; 45H-56H=[-11H]补 =0EFH
0111 1110 0100 0101
- 0011 0101 - 0101 0110
0100 1001 1 1110 1111?结果为补码无借位,CF=0 ; 有借位,CF=1
结论,(1)两无符号数相加,无进位,则未超出范围 ;
有进位超出范围,但进位表示了更高位,只要对进位适当处理,结果正确,
(2).无符号数相减,无借位,结果为正 ;有借位,结果为负,用补码表示,
所以,对无符号数运算,仅关心是否有进位或借位,便知结果情况,
4.带符号数运算 ----两数进行运算,结果超出表示范围就会产生 溢出 ;用 OFH标志 表示,
例 1.67H+5BH=0C2H>127 ;超出范围,结果错,
0110 0111
+ 0101 1011
1100 0010 ;结果为负,结果错,CF= 0,OF=1
例 2.-64H+(-40H)=-0A4H<-128;超出范围,结果错,
1001 1100
+ 1100 0000
1 0101 1100;结果为正,结果错,CF= 1,OF=1
例 3.64H+(-40)H=24H<127;未超出表示范围,结果正确
0110 0100
+ 1100 0000
1 0010 0100 ;结果为正,正确,CF= 1,OF=0
结论,(1).结果有溢出,则结果错 ;无溢出,则正确,
(2).两个带符号数运算,结果为正或负,用符号位
(最高位 )判断,即 D7=1,为负数 ;D7=0,为正数,
所以,对带符号数运算,首先 关心是否溢出 ;然后再 关心符号位 ;以判断结果情况,
说明,(1).对多位二进制数进行运算时,通常应拆成二部分或多部分运算,但 数的低位部分均为无符号数,只有高位部分才为符号数,
如,1000 0000 1000 0000B;低字节为无符号数,
(2).注意 区分进位与溢出,如何判断有无溢出,
设符号位向更高位进位为 CY(=D7CY),数值部分向符号部分进位为 CS(=D6CY),则溢出,
OF=CY⊕ CS
由上述三例可验证之,
例 1.67H+5BH=0C2H>127;OF=0 ⊕ 1=1;溢出例 2.-64H-40H=-0A4H<-128;OF=1 ⊕ 0=1;溢出例 3.64H-40H=24H<127;OF=1 ⊕ 1=0;无溢出四,二进制编码计算机所处理的各种信息 (包括数值,文字,图像,声音 )都是以若干二进制码的不同组合来表示的,
1.ASCII码 ----字符在机内的表示,
各种字符包括 (字母,数字,标点符号 )都用二进制编码表示,微机中普遍采用 7位 ASCII码,它用 7位二进制编码表示,27=128个字符,PC机中用一个字节表示一个字符,机器中将 D7位认其为 0.常用的 ASCII码字符如下表 (P10.表 1-4).
例如 从键盘上输入 ’ ABC123?字符时,实际上机器内部存放 41H,42H,43H,31H,32H,33H.
又如,数 45,用 ASCII码表示为,34H,35H.
当要 显示输出 98这个数时,必需先转换为 39H,38H.
2,BCD码
(1).BCD码的表示因为二进制数不直观,人们习惯在输入输出时使用十进制数,不过十进制数也要用二进制编码来表示,一位十进制数用 4位二进制编码表示方法很多,最常用的是 8421BCD,关系如下表 (P9.表 1-3).
十进数 0 1 2 3 4 5 6 7 8 9
BCD码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
根据 BCD码的存放方式可分两种,
压缩型 BCD----一字节中存放两个十进制数,
非压缩型 BCD----一字节中存放一个十进制数,
例,97?压缩型 BCD?1001 0111B=97H
97?非 压缩型 BCD?
0000 1001 0000 0111B=0907H
非压缩型 BCD,形式上象 ASCII码,且也是一字节表示一个数,所以又称 ASCII BCD.
(2).BCD数的运算加法 ----BCD数低位与高位之间是,逢十进一,,
而 4位二进制数是,逢十六进一,,而计算机总是按二进制规律运算,所以运算时必需进行 加 6
调整,以强迫进位,
调整规则 是,两个 BCD数相加,其和在 0~ 9之间,
则保持不变 ;其和大于 9,则加 6调整,
例,37+36=73
0011 0111
+ 0011 0110
0110 1101
+ 0110
0111 0011?BCD数
通常在微机中设有二 —十进制调整电路,通过调用调整指令来实现调整,
减法 ----同样 BCD减法,借一为十,,而 4位二进制数,借一为十六,,所以减 6调整 (多借了 6).
调整规则 是,其差在 0~ 9之间,则不变 ;其差大于 9,则减 6.
例,37-19=18
0011 0111
- 0001 1001
0001 1110
- 0110
0001 1000?BCD数作业,第一章,5,(2),(4) 10,38,483,1000
11.313035H,38413543H
§ 1.2 微型计算机的结构和工作原理一,微型计算机的典型结构
微机的基本 组成,微处理器 CPU,总线,存储器,I/O接口,I/O设备,
1.CPU----中央处理器,采用超大规模集成技术,将运算器和控制器集成在一块,具有 运算和控制功能,是微机的控制核心部件,如 Intel8088/8086,80286,80386,80486,
Pentium.
2.总线 ----传送信息的公共通道 BUS,即把计算机各部分有机地连接在一起的一组并行导线,
总线的 表示 ---- 或总线的 宽度 ----总线上能同时传送二进制数的位数,
总线的传送方向 ----单向和双向,
微机有 三种总线,
地址总线 AB----传送 CPU发出的地址,以便寻址存储单元或 I/O端口,所以是输出方向,如,8086/8088的地址总线宽度为 20位,用 A19~ A0表示,可寻址 220=1M的存储空间,
数据总线 DB----在 CPU与存储器和 I/O端口之间 传送数据,既可输入,又可输出,所以为 双向总线,如,8088的数据总线为 8位 ;用 D7~ D0表示,
控制总线 CB----传送各种控制信息 ;有的是 CPU到存储器或 I/O接口的控制信息,如,RD(读 ),WR(写 );有的是
I/O端口到 CPU的信号,如 INTR(中断请求 ),READY(准备就绪 );所以总体上是双向的,带有上横线的表示低电平有效,无上横线的表示高电平有效,
目前典型微机外部都采用 三总线结构,即 CPU,存储器,I/O端口都通过三总线组合在一起 ;常称存储器,I/O
端口挂在总线上,
所以 微机的结构 又常画成下面的形式,
AB
DB
CB
传送方式 ----总线实现了将属于不同来源的信息在一组统一的传输线上传送,但在某一特定时刻,总线上只允许传送一种信息,以免 总线冲突,
所以只能采用 分时传送,
CPU
存储器 I/O接口 I/O设备
总线结构意味着微处理器的一个引脚可能接多个设备或功能部件,为实现 分时传送,总线的接收端和发送端对各信息必需进行控制,所以与总线相接的常用器件是可控的三态门,微机中,存储器,I/O接口都是通过三态门连到总线上,不使用时,处在高阻抗状态,即相当于开路 ;于是该部分电路便与总线脱离了关系 ;总线总是只和当前进行交换的电路联通,
3.存储器 ----存放程序和数据的部件,
能够被 CPU直接读写的存储器为 内部存储器,间接读写的存储器为 外存储器 ;在此指内存储器,即半导体存储器,包括 RAM和 ROM.
存储器被分成许多小单元,称为 存储单元,每个单元对应一个编号?单元地址,
4.输入输出接口 ----I/O接口 (interface)
输入输出设备不能直接挂在总线上,而是通过 I/O接口再与总线相连,这是 因为,
(1).外设的工作速度远低于 CPU的速度,
(2).外设表示信息的格式与计算机不同,
(3).接口还应向计算机报告设备的运行状态,
传达计算机命令等 ----联络信号,
5.I/O设备 ----信息变换,
输入输出设备是人机联系的桥梁,待处理的数据和程序通过输入设备送入计算机,而结果通过输出设备告诉用户,
二,微机的工作原理微处理器本身还不是一个微机,必需配备适当的存储器和 I/O接口及必要的外设才能构成一个真正的微机 ;但上面介绍的还只是 硬件,还必需配备 软件,
当人们要解决问题时,首先将问题程序化,形成指令序列,然后将它存入存储器中,再由 CPU的控制器从存储器中逐条取出指令解释,并取出该指令要处理的操作数送往运算器中执行,最后输出程序结果,即
,程序存储和程序控制,?工作原理,这就是 冯,诺依曼原理,
§ 1.3 Intel 8088/8086微处理器一,8088和 8086
1977年 Intel率先推出了 16位微处理器 8086,能并行处理 16位数据,它需要 16位的存储器,16位 DB,16位外设,而当时 8位微机已经形成系列,配套外设都是 8
位的,为了利用现有的外设,Intel于 1979年研制 了
8088.它与 8086的内部结构完全一样,区别在于 外部
DB不一样,8086是 16位 DB,而 8088是 8位 DB.所以称
8088为准 16位机,但它既能处理 8位数据,又能处理
16位数据,
又如,386SX的内部 DB为 32位,而外部 DB为 16位,
是准 32位机,
而 386DX的内部和外部 DB都是 32位,是 全 32位机,
但 386SX的推出比 386DX要晚些(价格便宜),
而 486SX的内外 DB都是 32位,但内部无协处理器,
而 486DX也是 内外都是 32位 的 DB,但内部有协处理器,
实际上 486就是在 386的基础上增加了协处理器和高速缓冲存储器,
二,8088的功能结构
,按功能可分成两部分,
执行部件 EU和 总线部件 BIU.左边是 EU,仅负责指令的执行 ;右边是 BIU,负责从存储器或 I/O
中取取指令或数据,
1.执行部件 EU----负责指令的执行,有,
16位的算术逻辑单元 ALU----执行基本运算和处理,
一组通用 寄存器组 ----暂存操作数和及中间结果,
一 标志寄存器 ----寄存 CPU的状态和控制标志,
EU控制 系统 ----队列控制和时序控制,
2.总线接口单元 BIU----执行所有总线操作,按 EU的要求与存储器或 I/O交换数据,即负责取指令送队列中排队,取操作数送 EU参与运算,有,
一组 段寄存器 ----寄存段地址,
一个 指令指针 IP----寄存指令的偏移地扯,
地址加法器 ----将段地扯和偏移地址相加,形成
20位的物理地址,
指令队列缓冲器 ----寄存指令 (8088?4
个,8086?6个 ).
3.执行方式 ----取指与执行 同步,独立,并行工作,从而大大提高了 CPU的处理速度,
CPU 取指 执行 取指 执行 …
这是 顺序处理 操作方式,
8088:
BIU 取指 取指 取指 …
EU 执行 执行 执行 …
这是 流水线作业方式,
而后续微机的发展,延续了这种流水线作业方式,
将 各部分功能逐步细化,从而不断提高运行速度,
.80286的内部由 4个功能部件 组成,总线部件,指令部件,地址部件 (BIU),执行部件,即在 8088的基础上增加了指令部件和地址部件 ;四个部件分别进行同步,独立,
并行地进行总线操作,实现 流水线作业,避免顺序处理,
最大限度地发挥了处理器的性能,
80386的内部由 6个功能部件 组成,总线接口部件,指令译码部件,指令预取部件,执行部件,段管理部件,
页管理部件,即在 80286的基础上增加了指令译码和页管理两个部件,6部分分别进行同步,独立,并行操作,实现了高效的流水线化作业,
80486的内部由 8个功能部件 组成,增加浮点处理单元( FPU)和高速缓存( Cache memory)
Pentium的内部由 10个功能部件 组成,cache分为 指令 Cache和数据 Cache,二级 cache。
三,8088的寄存器结构 (Register)
在微处理器中,都要设置寄存器 暂存操作数或中间结果,CPU内部寄存器越多,使用就越灵活,速度就越快,
8088共有 14个 寄存器,都是 16位,可用其名称寻址,寄存器图如下,
1.通用寄存器 ----8个 ----在 EU部件中 ----寻址名称是,AX,BX,CX,DX,SP,BP,SI,DI.
一般情况,它们都可以作通用寄存器,存放操作数,可视为 CPU内部的 RAM单元,但每个寄存器又有其 专门的用途,如下表示 (P22.表 1-5).
AX,BX,CX,DX----既可以 字寻址 (16位 ),又可以 字节寻址 (8位 ),即可分成高 8位和低 8位,其名称为,AH,AL,BH,BL,CH,CL,DH,DL.
2.指令指针 ----IP----存放将被执行的指令的偏移地址 (其它微本中称为程序计数器 PC).
计算机之所以能脱离人的干预,自动地进行计算或控制,就是因为内部有 一个能自动跟踪指令地址的硬件电路?IP.在开始执行程序时,赋给 IP第一条指令的地址,然后每取一条指令,IP的值就 自动 指向下一条指令的地址,
3.状态标志寄存器 ----F----16位,但只有 9位有效,表示 9
个标志,----反映 CPU的状态和运算结果情况,
F的格式,
D15 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
X X X X OF DF IF TF SF ZF X AF X PF X CF
(2).条件标志 ----6个 ----反映一条指令执行后运算结果特征,
CF----进位标志 -----CF=D7CY或 D15CY
执行算术运算指令后,结果的最高位 (字节时为
D7CY或字为 D15CY)向更高位产生进位,则 CF=1,否则
CF=0.该标志主要用于多字节加减运算,
例,3FH+0B4H 0BFH+0B4H
0011 1111 1011 1111
+ 1011 0100 + 1011 0100
1111 0011;CF=0 1 0111 0011;CF=1
注,对 CF操作有三条专用指令,STC?CF=1;
CLC?CF=0; CMC?CF=CF
PF----(奇 )偶校验标志 ----PF=D7?…?D0
运算结果的低 8位中,1”的个数为偶数,则 PF=1,否则 PF=0.该标志主要用于检测数据通信中是否发生错误,
如上例,结果 F3H中有 6个,1”,则 PF=1;结果 73H中有
5个,1”,则 PF=0.
AF----辅助进位标志 ----AF=D3CY
字节运算中,低 4位向高 4位有进位或借位时,则
AF=1,否则 AF=0.该标志主要用于 BCD码运算的调整指令中,
如,38H+49H
0011 1000
+ 0100 1001
1000 0001 ;AF=1;若视为 BCD运算,则应调整,
ZF----零标志 ----ZF=D7+… +D0或 D15+… +D0
运算结果为 0,则 ZF=1,否则 ZF=0.
如上例中,结果非 0,则 ZF=0.
SF----符号标志 ----SF=D7或 D15
运算结果为正数,则 SF=0,为负数,则 SF=1.
如,3FH+0B4H=0F3H的 SF=1
而,0BFH+B4H=173H的 SF=0
.OF----溢出标志 ----OF=D7CY?D6CY
或 D15CY? D14CY
当运算结果超出了机器所能表示的范围时,则
OF=1,否则 OF=0.
如,3FH+0B4H=0F3H中 OF=0
而,0BFH+0B4H=173H中 OF=1
注意,实际上机器把所有数都当无符号数运算,
把结果都当符号数来设置标志,
以上 6个标志为指令执行后的结果标志,可作为控制转移的条件,
(3).控制标志 ----控制 CPU的状态,
DF----方向标志 ----主要用于字符串操作中控制地址的步进方向,
DF=1,地址增址 ;DF=0,地址减址,
有两条专门用于 DF的指令,CLD?DF=0 ;
STD?DF=1
IF----中断允许标志 ----控制 CPU是否开中断,
IF=1,说明 CPU开中断,即允许 CPU响应外部可屏蔽中断,
IF=0,说明 CPU关中断,即禁止 CPU响应外部可屏蔽中断,
注,有两条关于 IF的专用指令,CLI?IF=0 ;
STI?IF=1
.TF----跟踪标志
TF=1,CPU处于单步工作方式,即 CPU每执行一条指令就自动地发生一个内部中断,CPU转去执行一个中断程序,常用于程序调试,又称为陷井标志,TF=0,CPU
正常执行程序,
4.段寄存器 ----CS,SS,DS,ES----用于存放内存地址的起始地址的高 16位,
因为 8088有 20位地址,220=1MB存储空间,单元地址必须用 20位地址表示,但内部寄存器均为 16位,只能进行 16位运算,所以存储器分段管理,段的起始地址的高 16位称该段的段地址,而偏离段首址的字节数为偏移地址,亦用 16位表示,即单元的 逻辑地址 表示为,段地址,偏移地址
CS----代码段寄存器 ----存放代码段的段地址,
SS----堆栈段 寄存器 ----存放堆栈段的段地址,
DS----数据段寄存器 ----存放数据段的段地址,
ES----附加数据段寄存器 ----存放附加数据段的段地址,
由 4个段寄存器将内存分成了四个可访问的
,当前段,,
§ 1.4 (主 )存储器与堆栈一,存储器结构
1.位 ----Bit----存储器的最小最基本单位,存放一个二进制数 0或 1.整个存储器由许许多多存储位构成,
2.字节 ----Byte----8个 Bit组成一个字节,存放相邻的
8位二制数,字节的长度是固定的,
3.字 ----Word----计算机内部进行数据处理的基本单位,通常与计算机内部的寄存器,ALU宽度一致,计算机的每一个字所包含的二进制位称为 字长,
如,Z80微机为 8位机 ;8086,80286微机为 16位机 ;386,486,Pentium微机为 32位机,
.注,目前为了 表示数据的方便,常把 2个字节称为一个字,双字即为 32位,
4.存储容量 ----表示 存放二进制代码的个数,用包含多少个存储单元,而每个单元又包含多少位来表示,微机中常以,字 (节 )数 *字 (节 )的位数 来表示,如,1024*8?1k*8?1KB
5.PC系列微机存储器结构 ----以字节编址,即 8位为一个单元,每个单元有一个唯一的地址代号,
如 PC微机的物理地址,00000H~ 0FFFFFH.
6.数据存放规律字节数据 ----一个数存放一单元,
如,11H?00010H单元字数据 ----用二个连续单元存放,
规定由 2个单元中地址 较小 的一个确定,如,2233H?00011H
“低对低,高对高,的存放规律如,-4?00013H
机器指令 (机器码 )----按字节顺序存放,如,MOV BX,AX
89C3H?00015H
字符串 ----从低地址开始,以
ASCII码顺序存放,
如,?ABC00017H
00010H 11
00011H 33
00012H 22
00013H FC
14H FF
15H 89
16H C3
17H 41
18H 42
19H 43
二,存储器的组织与管理
1.因为内部寄存器都是 16位,
不能直接输出 20位地址,所以 分段管理,即把 1M分成
64K个段,每一段最多可寻址
216=64K个单元,规定每个段地址的低 4位为 0,即能被
16整除,段地址和偏移地址都是 16位无符号数,所以分段并不是唯一的,可以相互重迭,而因为 CPU内部仅有四个段寄存器,所以在某个特定时刻仅能访问四个段,
.注,后续徽机的发展 仍是分段法,只是基地址不是直接指定,而是间接指定,
2.每个存储单元都可用地址的两种形式来表示,
物理地址 ----用唯一的 20位二进制数表示,CPU
访问时用物理地址,
逻辑地址 ----段地址,偏移地址,程序中使用逻辑地址,
3.物理地址的形成由 CPU中的地址加法器,将段地址左移 4位,低位补
0,再与 16位偏移地址相加形成,
4.段地址与偏移地址的指定,
每次需要生成物理地址时,都有相应的段地址及偏移地址被指定,
(1)取指操作 ----段地址?CS,偏移地址?IP,即取指的物理地址为,PA=CS左移 4位 +IP
例,已知某指令的逻辑地址?0002:0010,则
PA=00030H
例,某可执行程序为 2KB,已知 CS=1063H,IP=0000H,
求该程序的末地址,
程序存放,1063:0000

1063:07FF
所以末地址为,10630H+07FFH=10E2FH
末地址=长度 -1
= 2K-1=211-1
=0800H-1=07FFH
(2).栈操作 ----堆栈段地址? SS,
偏移地址?SP ; PA=SS左移 4位 +SP
(3).一般数据访问 ----段地址?DS,偏移地址?变量的有效地址 ;PA=DS左移 4位 +变量的有地址三,堆栈和堆栈操作指令
1.堆栈 -----按,先进后出或后进先出,的原则 组织的特殊存储区,用来暂存数据,在中断和子程序调用中用来保护现场,
2.堆栈指针 ----这个特殊的存储区有一端是固定地,另一端是活动地,固定端称为 栈底 ;活动端称为 栈顶,数据只允许从活动端进出,为此,活动端需要一个指示器?SP;所以 SP总是指向栈顶,
3.堆栈的形成 有两种 ----一种 向下生长 (从大地址向小地址生长 );另一种是 向上生长 (从小地址向大地址生长 ).如,8088是向下生长 ;而 MCS-51是向上生长,
4.进栈指令格式 ----PUSH SRC
操作 ----(SRC)? [SP],SP-2?SP
功能 ----将寄存器或存储单元中的一个字压入堆栈,
例,已知 AX=1122H,BX=3344H,SP=0040H
执行,PUSH AX ; SP=003EH ;
PUSH BX ; SP=003CH ;
注,栈操作均以字为单位,PUSH AH
先进高位,后进低位 ;高对高,低对低存放
5.出栈指令格式 ----POP DST
操作 ----[SP]?DST,SP+2?SP
功能 ----将栈顶的一个字传送到寄存器或存储单元中,
例,上述程序中再执行,
POP CX ; CX=3344H ; SP=003EH
POP DX ; DX=1122H ; SP=0040H
出栈和进栈恰好相反,先进后出,先出低位,后出高位,一般,PUSH与 POP成对出现,还原 SP指针,
6.标志寄存器进栈指令格式 ----PUSHF
操作 ----F? [SP],SP-2?SP
7.标志寄存器出栈指令格式 ----POPF
操作 ---- [SP]?F,SP+2?SP
作业,P32 16,17,
18,19,20,第一章结束