微机原理基本概念复习
微机原理基本概念复习 Prepared on 22 November 2020
1、字节,字概念,1字节=8位,
2、字长概念:传微处理器一次送二进制数据的位数(总线宽度)。
3、地址空间概念:
16根地址线—64K,
20根地址线—1M空间
4、进制间的转换:将十进制数转换为二级制数
5、数值数据的表示:
有符号数:补码,n位补码的范围
无符号数: FFFFH=65535
6、BCD码: 789的压缩BCD码789H
7、ASCII码:789的ASC码373839H
8、求补运算概念
9、8086CPU从功能上来说分成两大部分:总线接口单元BIU(Bus Interface Unit)和执行单元
EU(Execution Unit)
总线接口部件由下列4部分组成:
① 4个段地址寄存器(CS、DS、 ES、SS)② 16位的指令指针寄存器 IP(Instruction Pointer) ③ 20位的地址加法器
10辑段概念——
8086 CPU 的内部结构是16位的,即所有的寄存器都是16位的,而外部寻址空间为1M,需要20位地址线。为了能寻址1M空间。8086把1M字节空间划分成若干个逻辑段。
11 逻辑地址概念——2000H:5F62H,则其对应的物理地址:25F62H
12堆栈指针:SP与段寄存器SS一起确定在堆栈操作时,堆栈在内存中的位置。SS和SP的初始值决定了堆栈区的大小
13 状态标志的意义:即SF、ZF、PF、CF、AF和OF
14 8086引脚:
MN/MX、
AD15 ~ AD0地址/数据分时复用引脚
NMI(Non-Maskable Interrupt)不可屏蔽中断请求,输入、上升沿有效、
INTR(Interrupt Request)可屏蔽中断请求,输入、高电平有效,有效时,表示请求设备向CPU申请可屏蔽中断,该中断请求是否响应受控于IF(中断允许标志)、可以被屏蔽掉INTA——
RESET(复位)复位请求,输入、高电平有效,复位后CS=FFFFH、IP=0000H,所以自启动程序入口在物理地址FFFF0H
INTA(Interrupt Acknowledge)可屏蔽中断响应,输出、低电平有效,有效时,表示来自INTR引脚的中断请求已被CPU响应,CPU进入中断响应周期。
ALE(Address Latch Enable)地址锁存允许,输出、三态、高电平有效,脚高有效时,表示复用引脚:AD15 ~ AD0和A19/S6 ~ A16/S3正在传送地址信息,由于地址信息在这些复用引脚上出现的时间很短
暂,所以系统可以利用ALE引脚将地址锁存起来M/IO(Input and Output/Memory) I/O或存储器访问,输出、三态,该引脚输出高电平时,表示CPU 将访问存储器,这时地址总线A19 ~ A0提供20位存储器
地址,该引脚输出低电平时,表示CPU将访问I/O端口,这时地址总线A15 ~ A0提供16位I/O口地址
15 多字节数据存放方式:
图中0002H“字”单元的内容为:
[0002H] = 1234H
0002H号“双字”单元的内容为:
[0002H] = H
16 物理地址和逻辑地址的转换
例设代码段寄存器CS的内容为1000H,指令指针寄存器IP
的内容为2500H,即CS=1000H,IP=2500H,则访问代码段
存储单元的物理地址为:
17 指令周期:
是指一条指令经取指、译码、读写操作数到执行完成的过程。若干总线周期组成一个指令周期
18 总线周期
是指CPU通过总线操作与外部(存储器或I/O端口)进行一次数据交换的过程
8086的基本总线周期需要4个时钟周期,4个时钟周期编号为T1、T2、T3和T4
总线周期中的时钟周期也被称作“T状态”,时钟周期的时间长度就是时钟频率的倒数
当需要延长总线周期时插入等待状态Tw,CPU进行内部操作,没有对外操作时,其引脚就处于空闲状态Ti
8086如果工作频率1MHZ,1个基本总线周期需要多长时间。
19 指令代码由操作码和操作数两部分组成
寻址方式:
立即数寻址MOV AX,14
寄存器寻址:MOV DS,AX
直接寻址:MOV AX, [2000H],MOV BX, BUFFER
寄存器间接寻址MOV AX, [BX]
寄存器相对寻址MOV AX, [SI+06H]
基址变址寻址方式MOV AX, [BX+SI]
相对基址变址MOV AX, [BX+DI+6]
隐含寻址
MUL BL;(AL)×(BL)→AX隐含了被乘数AL和乘积AX 20 存储器寻址方式中的变量
WVAR DW 1234H
;定义16位变量WVAR,具有初值1234H
21注意点
1. 区别立即数寻址和直接寻址
MOV AX,126
MOV AX,[126]
2.区别寄存器寻址和寄存器间接寻址
MOV AX,BX
MOV AX,[BX]
3.双操作数指令中,不能同为存储器操作数。
4.CS不能为目的寄存器。
?最基本的传送指令(MOV)
?堆栈指令(PUSH,POP)
?数据交换指令(XCHG)
?换码指令XLAT
非法指令的主要现象:
两个操作数的类型不一致
无法确定是字节量还是字量操作
两个操作数都是存储器 MOV[2000H],[3000H]
立即数直接送段寄存器 MOV DS, 3000H
目标操作数用立即数方式 MOV 2000H, AL
两个操作数都是段寄存器MOV DS, ES
在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令
两个操作数类型不一致
MOV AL, 050AH ;非法指令,修正:
;mov ax,050ah
MOV SI, DL ;非法指令,修正:
;mov dh,0
;mov si,dx
?当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明MOV [BX+SI], 255 ;非法指令,修正:
;mov byte ptr [bx+si],255
;byte ptr 说明是字节操作
;mov word ptr [bx+si],255
;word ptr 说明是字操作
?8086/8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)MOV buf2, buf1 ;非法指令,修正:
;假设buf2和buf1是两个字变量
;mov ax,buf1
;mov buf2,ax
;假设buf2和buf1是两个字节变量
;mov al,buf1
;mov buf2,al
?8086指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活MOV DS, ES ;非法指令,修正:
;mov ax,es
;mov ds,ax
MOV DS, 100H ;非法指令,修正:
;mov ax,100h
;mov ds,ax
MOV CS, [SI] ;非法指令
;指令存在,但不能执行
例3-13 把BLOCK1地址开始的10个字节数据传送到BLOCK2地址开始的10个字节单元处。
MOV CX,10
MOV SI,OFFSET BLOCK1
MOV DI,OFFSET BLOCK2
NEXT: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CX
JNZ NEXT
HLT
进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部
用堆栈交换AX与CX的值。
push ax
push cx
pop ax
pop cx
交换指令XCHG(
xchg al,byte ptr wvar+1
;ax=5599h,wvar=6611h
;“byte ptr wvar+1”强制为字节量,只取高字节与AL类型交换,否则数据类型不匹配
例3-18 内存的数据段有一张0~9的平方表,首地址为TABLE,如图所示,用换码指令实现求数字4的平方。
MOV BX,OFFSET TABLE
MOV AL,4
XLAT
加法指令
2、减法指令
3、乘法指令
4、除法指令
加法指令:ADD, ADC和INC
减法指令:SUB, SBB, DEC, NEG和CMP
他们分别执行字或字节的加法和减法运算,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位
[例3-32] 在数据段从BLOCK开始的存储单元中存放了两个8位无符号数,试比较它们的大小,将较大者传送到MAX单元。
LEA BX,BLOCK
MOV AL,[BX]
INC BX
CMP AL,[BX]
JNC DONE
MOV AL,[BX]
DONE:MOV MAX,AL
HLT
逻辑指令AND、OR、XOR和TEST
屏蔽AL寄存器的低四位。
MOV AL,0FF H 1 1 1 1 1 1 1 1
AND AL ,0F0 H ∧ 1 1 1 1 0 0 0 0
1 1 1 1 0 0 0 0
例3:使某数的第4、5位置1。
MOV AL,03H 0 0 0 0 0 0 1 1
OR AL,30H ∨ 0 0 1 1 0 0 0 0
0 0 1 1 0 0 1 1
[例3-47] 判断DATA单元的数据是否为0。
MOV AX,DATA
OR AX,AX
JZ ZERO
……
ZERO: …….
例4:使某数的D1、D0位取反,其它位不变。
MOV AL,11H 0 0 0 1 0 0 0 1
XOR AL,03H ⊕ 0 0 0 0 0 0 1 1
= 0 0 0 1 0 0 1 0
AND与TEST指令的关系,
同SUB与CMP指令的关系一样
例7:检测AL中的最低位是否为1,若为1则转移。
MOV AL,data 0 1 0 0 0 0 0 1
TEST AL,01H ∧ 0 0 0 0 0 0 0 1
JNZ Next 0 0 0 0 0 0 0 1
Next: MOV BL,0
TEST 通常用于检测一些条件是否满足,但又不希望改变原来操作数的情况,该指令后通常带有条件转移指令。
移位指令:移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存储单元;后一个操作数表示移位位数:
该操作数为1,表示移动一位
该操作数为CL,CL寄存器值表示移位位数(移位位数大于1只能CL表示)SAL SHL SAR SHR
循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。分为:
ROL reg/mem,1/CL ;不带进位循环左移
ROR reg/mem,1/CL ;不带进位循环右移
RCL reg/mem,1/CL ;带进位循环左移
RCR reg/mem,1/CL ;带进位循环右移
循环移位指令按指令功能设置进位标志CF,但不影响SF、ZF、PF、AF标志,OF只当CNT=1时有效,移位后当最高有效位发生变化时(如1变0) OF=1, 否则 OF=0 。将中32位数值左移一位
shl ax,1
rcl dx,1
控制转移指令
JMP JZ JNZ
例判断是否为字母Y
寄存器AL中是字母Y(含大小写),则令AH=0,否则令AH=-1
cmp al,’y’;比较AL与小写字母y
je next ;相等,转移
cmp al,’Y’ ;不相等,
;继续比较AL与大写字母Y
je next ;相等,转移
mov ah,-1 ;不相等,令AH=-1
jmp done ;无条件转移指令
next: mov ah,0 ;相等的处理:令AH=0
done: ……
[例3-68 ] 在内存中有一个首地址为 ARRAY 的数据区存放了200 个 8 位有符号数,统计其中正数、负数、0 的个数,并分别将统计结果存入PLUS、MINUS和ZERO单元中。
XOR AL, AL
MOV PLUS,AL
MOV MINUS,AL
MOV ZERO,AL
LEA SI, ARRAY
MOV CX, 200
CLD
LLAB:LODSB
OR AL,AL
JS MLAB
JZ ZLAB
INC PLUS
JMP NEXT
MLAB: INC MINUS
JMP NEXT
ZLAB: INC ZERO
NEXT: DEC CX
JNZ LLAB
HLT
LOOP label ;循环指令
IRET
伪指令:DB ,DW,byte ptr
例2:操作数可以是字符串,例如
STR DB ‘HELLO’
汇编后的情况如图:
某数据段定义为
DATA SEGMENT
S1 DB 0,1,2,3,4,5
S2 DB ‘12345’
COUNT EQU $-S1
S3 DB COUNT DUP(2)
DATA ENDS
画出该数据段在存储器中的存储形式DOS系统功能调用介绍
(1) 从键盘输入一个字符(功能号=1) MOV AH,1
INT 21H
(1) 在显示器上显示一个字符(功能号=2)
MOV AH, 2
MOV DL, <要显示的字符>
INT 21H
例:在显示器上显示一个字符‘A’
MOV AH, 2
MOV DL, ’A’ ;或MOV DL, 41H
INT 21H
(2)显示字符串(功能号=9)
MOV AH, 9
LEA DX, <字符串>
INT 21H
注意:被显示的字符串必须以’$’结束。
分支程序设计
4-31 求符号字节数X的绝对值,X用补码表示DATA SEGMENT
X DB -50
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:
MOV AX,DATA
MOV DS,AX
MOV AL,X;取X
TEST AL,80H;测试符号位
JZ DONE;若大于0,转done
NEG AL;若小于0,求补得到|x|
MOV X,AL;保存
DONE: MOV AH,4CH
INT 21H
CODE ENDS
END START
关于存储器:
扩展存储器所需存储芯片的数量计算:
若用一个容量为m K×n位的存储芯片构成容量为M K×N位(假设M>m,N>n,即需字位同时扩展)的存储器,则这个存储器所需要的存储芯片数为 (M/m)×(N/n)。
RAM芯片的容量:
为220×16b,问(1)该芯片地址线多少,(2)数据线多少
SRAM与CPU连接:
CPU数据总线不相同,连接不一样。
8086CPU的16数据总线,其高8位数据线D15-D8接存储器的奇地址体
低8位数据线D7-D0接存储器的偶地址体,
根据BHE(选择奇地址库)和A0(选择偶地址库)的不同状态组合决定对存储器做字操作还是字节操作
存储器与CPU地址总线的连接:
低位地址线直接和存储芯片的地址信号连接作为片内地址译码
高位地址线主要用来产生选片信号(称为片间地址译码),以决定每个存储芯片在整个存储单元中的地址范围,避免各芯片地址空间的重叠。
片选译码的几种方法:
①全译码:所有的地址线全用上,无地址重叠。
②部分译码:部分高位地址没有用,存在地址重叠。
(3)全译码
,每个存储单元的地址都是唯一的,不存在地址重复,但译码电路可能比较复杂、连线也较多
I/O端口与存储器统一编址概念
I/O端口独立编址概念
8086采用独立编址
I/O端口地址译码的一般原则:
把CPU用于I/O端口寻址的地址线分为高位地址线和低位地址线两部分:例6-1,某8088最小系统,I/O接口译码电路如图
A0-A9选择端口
CPU和外设间的数据传送方式
程序控制方式
中断控制方式
DMA方式
程序控制方式
无条件传送方式
查询传送方式
查询传送方式
CPU从接口中读取状态字
CPU检测状态字
传送数据
数据端口
状态端口
a) 查询式输入的算法:
(1)用指令检测 Ready:
IN AL ,三态缓冲器(或状态寄存器)的地址(2)若 Ready = 0,返回(1)
(3)若 Ready = 1,发出
IN AL ,输入接口数据寄存器的端口地址。
查询输入:
MOV BX,OFFSET STORE
IN_TEST: IN AL,状态口地址
TEST AL,80H
JZ IN_TEST
IN AL,数据口地址
MOV [BX],AL
INC BX
…
、
b) 查询式输出:
MOV BX,OFFSET STORE
OUT_TEST: IN AL , 100;状态端口
TEST AL , 80H
JNZ OUT_TEST
MOV AL,[BX]
OUT 101,AL ;数据端口
INC BX …
中断概念:
中断向量表是存放中断向量的一个特定的内存区域。
中断向量,就是中断服务子程序的入口地址。
中断向量表:中断服务程序的入口地址(首地址)
逻辑地址含有段地址CS 和偏移地址IP (共32位),其中低字是偏移地址、高字是段地址 8086微处理器从物理地址00000H 开始,依次安排各个中断向量,向量号也从0开始 256个中断占用1KB 区域,就形成中断向量表
8259:
完全嵌套方式(默认工作方式):
查询式
输出的
接口电
路 接至D7
中断请求按优先级IR0~IR7处理,IR0优先级最高,IR7最低。当有中断发生时,如果有更高级的中断请求到来,会发生中断嵌套。
中断结束命令
(1)自动中断结束模式(AEOI)
自动结束方式
一进入中断就将ISR中对应的状态标志清除,因为ISR是优先仲裁的依据,所以这种方式只能用在不会出现嵌套的简单场合。
(2)非自动中断结束方式(EOI)
②一般结束方式:
当发出中断结束命令后,用结束指令把当前中断服务寄存器(ISR)中优先级最高的(正在处理的)IS位清除。(最常用)
8259初始化:
(2)ICW2(中断向量命令字)
向8259A写入ICW1命令字后,应立即向8259A送ICW2。
ICW2用于确定8259A每根IR线上的中断向量号;(其实确定的是IR0线上的中断向量
设置中断向量号
?命令字中,T7~T3为中断向量号的高5位,低3位设为0
?根据此命令, 8259A自动确定低3位:IR0为000、IR1为001、……、IR7为111
1)OCW1(中断屏蔽命令字)
屏蔽命令字
内容写入中断屏蔽寄存器IMR
Di=Mi对应IRi,为1禁止IRi中断;
为0允许IRi中断。各位互相独立。
8255:
例:若要求8255A#1的各个端口处在如下的工作方式:端口A方式0输入 ,端口B方式1输出,端口C(上半部)PC7~PC4输出, 端口C(下半部)PC3~PC0输入
解:方式控制字=B或95H,
初始化程序:CWR EQU 0FBH;8255A#1控制字寄存器端口地址
MOV AL,B
OUT CWR,AL
例8-2 使端口C的PC7置1的控制字为00001111B,PC3置0控制字00000110。
8255控制口地址00EEH:
相应的汇编程序为:
MOV AL,0FH
MOV DX,00EEH
OUT DX,AL
MOV AL,06H
OUT DX,AL
注意使端口C按位置位或复位的控制字也是写入至控制字寄存器。
例题8-3
8255 工作于方式0,以查询的方式输出,与打印机连接如图所示
程序:
PP:MOV AL,81H;控制字A口输出,c高4位输出,低4位输入,方式0
OUT 0D6H,AL
MOV AL,0DH; 00001101B
OUT 0D6H,AL;PC6=1,发出STB高电平
MOV CX,100
LEA DI ,DATAPTR;DI指向首地址
LPST: IN AL,0D4H;读C口
AND AL,04H;查busy信号
JNZ LPST;如忙,等待
MOV AL,[DI];不忙,取出一个字节数据OUT 0D0H,AL;;A口输出并锁存字符MOV AL,0CH ;0000 1100B
OUT 0D6H,AL;STB=0
INC AL;AL=0000 1101
OUT 0D6H,AL;STB=1
INC DI
LOOP LPST
…