微机原理 (西安电子科技大学)

一个端口至少一个地址,可分配多个
内部外部各种地址作为一个整体来编地址
分配以后不能再重复
缺点:浪费了存储器地址空间,没有专用的IO操作指令
优点:CPU对存储器操作的所有指令同样适合对IO端口操作,在IO驱动程序设计中,程序编写设计较为简单灵活
如:MCS-51
存储器地址空间和IO地址空间各编各的,相互独立,互不干扰
如:8086
优点:节约了存储器地址
缺点:指令记忆相对复杂;IO程序设计不灵活。
存储器寻址
IO寻址
锁存器
2.2
1.了解微处理器的工作原理
2.掌握汇编语言程序设计的编程模型
14页图2.2
内部结构:
- ALU
- 工作寄存器——数据寄存器,地址寄存器
- 控制器——中央指挥机关
取指令-->指令寄存器--->译码
- IO控制逻辑
取指令,执行指令效率不高,所以研制了8086
堆栈 由先进后出原则组织的一段存储器区域
堆栈必须按字操作
堆栈操作的地址至于SP有关
SP(堆栈指针)
堆栈大小要留出30%富余量
PUSH,POP配对
BIU总线接口单元
EU执行单元
BIU:图2.3
寄存器:
CS:code segment代码段寄存器
DS:数据段寄存器
ES:附加数据段寄存器
SS:stack segment 堆栈段寄存器
IP:指令指针寄存器==PC
地址产生与总线控制逻辑:
指令队列寄存器(6个字节)8086
8088 四个字节
BIU:从外部存储器中取指令,并将取来的指令放到指令队列中
EU:主要负责从指令队列中获取指令,并对该指令加以执行
BIU,EU并行执行,提高效率
流水线
BIU休息:队列取满或EU需要使用总线
EU休息:队列为空
大大提高了总线的利用率
通用寄存器组成了编程模型
2.4
共有十四个16位的REG(寄存器)
按功能分:
通用寄存器(8个):
1.数据寄存器:
AX(累加器)
BX(基址寄存器)
CX(计数器)
DX(IO地址寄存器)
2.地址指针与变址寄存器(2+2)
SP 堆栈指针寄存器
BP 地址指针寄存器
二者都可以提供16位逻辑偏移地址,但是不在一个段,BX默认在数据段,BP默认在堆栈段
如需更改,需加一个DS(段超越前缀)
SI 源变址寄存器
DI 目的变址寄存器
- (DX,DI,SI,找到的都在数据段)
源端必须在数据段 由SI提供
目的端必须在ES(附加数据段)偏移地址由DI指明(字符串操作)
movSB (字符串传送)
CS 代码段寄存器(用户不能初始化)
DS 数据段寄存器
ES 附加数据段寄存器
SS 堆栈段寄存器
mov CS ,AX(错) CS不能被初始化
- IP(指令指针寄存器16位)(不能为目的)
PSW: 处理器状态字寄存器(16位,有用的9位)
状态标志6:ZF,CF,PF,OF,SF,AF
反映的是ALU运算后结果的状态
控制标志3:用来控制CPU的运行状态
DF 方向控制(增,减)
CLD;DF=0;
STD;DF=1;
IF 中断允许标志
NMI:非屏蔽外部中断
INTR:外部可屏蔽
IF=0,屏蔽 P62
P18
A19--A0 给外部存储器编址
A15--A0给IO编址
前512给主板,后512给插件板
字节型,字型,双字型
一个字节数据占用一个地址单元
顺序存放
在DS段有定义:DB (字节型数据定义伪指令)
DB 12H,12,-12
DW 字型定义数据伪指令
一个字节低地址单元放低地址
高字节放在高地址
对准低地址为偶地址
对准的数据操作只需一个总线周期
未对准需要两个
奇数地址走CPU高八位地址线
偶地址走CPU低八位地址线
P28 .3.1.3变量定义伪指令
存储器为什么要分段?
为了能给它寻址完(具体看讲解)
怎么分段?
每个逻辑段最大64kB,每个逻辑段的起始地址必须能被16整除。最多能有64K个段,分别命名为0-65535
一个单元物理地址是该单元实际存在的地址
对一个逻辑段而言,段起始地址称为段基址
相对段基址偏移的量叫做偏移地址
这种方式称为逻辑地址
一个存储单元的物理地址是唯一的
知道逻辑地址求物理地址
物理地址=段地址*16+段内偏移地址
乘16相当于左移一位
P15
CS段地址,IP段内偏移地址 ==>PA 指令地址
8086取指令单元地址由CS:IP提供
图2.3
P21 表2.1
字符串操作默认段
表2.1
第三部分8086的指令系统
指令:
指令系统:CPU能识别的所有指令的集合
机器语言:指令代码语言
机器语言程序:用户用机器语言编写的程序
汇编语言:符号化的语言 如B0 12-->MOV AL,12H
汇编语言(源)程序:
汇编:把汇编语言源程序翻译成机器语言程序的过程
常用的翻译工具masm.exe(直接粘贴可用)
反汇编:把机器语言程序翻译成汇编语言程序
文件名.ASM ——>文件名.OBJ-->(连接)文件名.exe
1.指令语句:CPU能执行的语句或能汇编成指令代码的语句
2.伪指令语句:CPU不能执行的语句或不能汇编成指令代码的语句
3.宏指令语句:本身是8086指令系统没有的语句,是用户用宏定义伪指令定义的一条新的语句
最多由四部分组成
DAT1(符号化的地址) DB 12H,-12,12;
变量名 助记符 操作数 ;注释
(名称必须以字母开头,数字必须以数字开头)
代数表达式的值在汇编时计算然后再带入
逻辑代数表达式也是,但是不常用
关系表达式 关系为假取全0,关系为真取全1
标号一旦定义就具有三个属性:
1.段地址属性:SEG
2.段内偏移地址属性:OFFSET
3.类型:TYPE
NEAR(段内)-1
FAR(段间)-2
MOV BX,OFFSET NEXT (获取段内地址偏移属性)
变量P28
变量定义伪指令:
DB :定义字节型数据
DW:定义字型数据变量
DD:定义双字型数据变量
DAT1 DB 12,12H,-12,'1'
变量一旦定义就具有了五个属性
1.段地址属性 SEG
2.段内偏移地址属性 OFFSET
3.类型 TYPE
4.长度 LENGTH
5.大小 SIZE
在汇编语言程序中有一个美元符号,叫做位置计数器(16位)跟踪汇编偏移地址
是一个常数,指向汇编地址,也可以被引用
DB 无限字符
DW 两个字符
DUP 重复操作符
长度:在变量名定义语句中,所定义的变量的个数
大小:
数据传送类
算术运算类
算数逻辑运算类
移位类
标志位操作
转义类(1.条件转义,2.无条件转义
程序控制类
子程序调用伪指令
中断调用返回指令
字符串操作指令
输入输出指令
其他
宏指令
寻址方式:求操作数所在地或所在存储器单元地址的寻址方式
求得的OPR可当1.数据
2.地址
1.立即数寻址 mov AX,1234H P39 图3.3
立即数只能作源操作数
2.寄存器寻址 mov AX,BX
` 寄存器类型要一致,类型要明确
mov AX,CL(错)
mov DS,1500H(错)
DS,ES,SS作DST时,SRC不能立即寻址
mov CS,AX(错)
(CS,IP 不能作目的
要寻找的OPR在存储器的某单元中,存放ORP的单元EA可由以下五种寻址方式求得
1。直接寻址
2.寄存器间接寻址[BX,SI,DI]
3.寄存器相对寻址[BX,BP,SI,DI]+8/16位DISP
4.基址变址寻址
5.基址,变址相对寻址
加括号是地址,不加括号是立即数
俩存储器单元之间不能直接操作
EA=[BX,BP,SI,DI]+8/16disp(相对位移量)
[BP]