微机原理:两种典型的微处理器
-
定义:将中央处理器的所有构件封装到一块硅芯片上,即微处理器。
-
第一个微处理器:Intel 4004
-
发展历史:继电器——真空管——晶体管
-
处理器性能评价标准:
-
数据通路宽度(几位微处理器?)
-
最大时钟频率(主频)(相同时间完成更多操作)
-
可寻址存储器最大空间(空间换时间)
-
一、Intel公司的8080处理器
-
基本属性:
-
8位微处理器
-
时钟频率:2MHz
- 8080每条指令需要418个时钟周期,意味着每条指令的执行时间为29
-
寻址空间:64KB
-
类型:单芯片微处理器
-
-
寄存器信息:8080内含6个寄存器,每个寄存器都是8位寄存器
-
分别命名为: (A是内部的累加器的代号)
-
通常把两个8位寄存器 H 和 L 合起来构成一个16位 寄存器对(register pair),
称作[HL]。
助记符 指令含义 LOD 加载 STO 保存 STA 保存到累加器 LDA 加载到累加器 STAX 保存到BC或DE寄存器 LDAX 加载到BC或DE寄存器 MOV 把一个寄存器中的内容转移<br>到另一个寄存器(可以是原来的寄存器、累加器) HLT 停止 -
例如:
1 | LDA A, [aaaa] |
-
三种寻址方法
-
直接寻址法:
MOV B, [aaaa](源操作数为地址信息) -
间接寻址法:
MOV B, [HL](源操作数为地址所在的寄存器) -
立即数寻址法:
MOV B, 37h(源操作数为要操作的数据对象)
-
立即数操作
| 操作 | 含义 |
|---|---|
| MVI | 传送立即数 |
| ADI | 立即数加法 |
| ACI | 立即数进位加法 |
| SUI | 立即数减法 |
| SBI | 立即数借位减法 |
| ANI | 立即数与 |
| XRI | 立即数异或 |
| ORI | 立即数或 |
| CPI | 立即数比较 |
-
不符合规则的操作结果
MOV A, A并不会执行有意义的操作;MOV [HL], [HL]该指令是不存在的,实际上该指令的实际意义 人为规定等价于HLT -
操作码的位模式:
比如:MOV操作码由八位组成
01dddsss,ddd表示目标操作数的代码,sss表示源操作数的代码
| 代码 | 对应寄存器 |
|---|---|
| 000 | 寄存器B |
| 001 | 寄存器C |
| 010 | 寄存器D |
| 011 | 寄存器E |
| 100 | 寄存器H |
| 101 | 寄存器L |
| 110 | 合并寄存器HL |
| 111 | 累加器A |
如:MOV L, E 表示为操作码:01101011
-
标志位(flag)
8080的标志位包括:CF(进位标志),ZF(零标志位),SF(符号标志位),PF(奇偶标志位),AF(辅助进位标志)
-
程序状态字(PSW):在8080中,专门的8位寄存器,来存放所有的标志位
-
LDA,STA,MOV指令不会影响标志位。ADD,SUB,ADC(进位加法),SBB(借位减法)会影响标志位状态。
-
但是以下两个直接影响CF
操作 含义 STC 令CF置1 CMC 令CF取反 -
CMP指令:和SUB指令类似,也是把两个数相减。但是他是把结果保存在标志位
- 如果A中既有的值小于CMP的源操作数存储器中的值,那么进位标志位CF置1;如果A中既有的值等于源操作数存储器中的值,那么零标志位ZF置1。
| 操作 | 含义 |
|---|---|
| CMP | 比较,可设置标志位 |
- 两种特别的8080指令:
| 操作 | 含义 |
|---|---|
| CMA | 累加器中的数按位取反 |
| DAA | 十进制调整累加器,使用BCD码进行十进制的算术运算(加在运算出原十六进制结果后,切换结果) |
- 增量减量操作
INR和DCR都是单字节操作,可以影响除了CF之外所有标志位
| 操作 | 含义 |
|---|---|
| INR | 寄存器或存储器中的数加1 |
| DCR | 寄存器或存储器中的数减1 |
- 移位操作
| 操作 | 含义 |
|---|---|
| RLC | 使累加器循环左移 |
| RRC | 使累加器循环右移 |
| RAL | 带进位的累加器循环左移 |
| RAR | 带进位的累加器循环右移 |
执行RAL时,将原最高位移至CF
执行RAR时,将原最低位移至CF
二、Intel 8080微处理器的RAM与栈
-
随机访问存储器RAM:可以寻址访问的存储器
-
栈指针:8080微处理器设置了一个专门的16位寄存器作为栈,对这段空间寻址的寄存器叫作栈指针(SP,Stack Pointer)
-
栈的特性:后进先出(LIFO)
-
入栈出栈指令
操作 含义 PUSH 压入堆栈 POP 弹出堆栈
如果你想把寄存器中所有内容保存到栈内,可以使用如下指令:
1 | PUSH PSW |
而 POP BC 则表示从栈中弹出一个值,按照来顺序保存到BC存储器中。
-
栈的工作方式
假设栈指针初始时位于8000h。当有数据入栈时,栈指针-1,变成7FFFh,且在7FFFh位置存储压入的数据
-
栈上溢和栈下溢
-
栈上溢(stack overflow):使用过多PUSH指令,覆盖掉存储器中其他内容
-
栈下溢(stack underflow):使用过多POP指令,栈中数据取完了还在POP
-
-
寄存器和栈的共用操作
| 操作 | 含义 |
|---|---|
| LXI | 对寄存器 或 堆栈指针 加载(Load)扩展的立即数(两个字节) |
| INX | 对寄存器对和堆栈指针加1 |
| DCX | 对寄存器对和堆栈指针减1 |
| DAD | 把由任意2个寄存器组成的16位寄存器对的内容加到寄存器对HL中 |
- LXI 指令:
1 | LXI BC, 527Ah |
以上指令等价于:
1 | MVI B, 52h |
-
DAD 指令:
一般用于计算存储器的地址,对PSW中只有对CF有影响
-
栈操作指令
| 操作 | 含义 |
|---|---|
| SHLD | 直接保存HL中的数据 |
| LHLD | 直接加载数据到HL |
| PCHL | 将HL保存的数据加载到程序计数器 |
| SPHL | 将HL保存的数据加载到堆栈指针 |
| XTHL | 把HL中的内容和堆栈顶部2个字节进行交换 |
| XCHG | 把DE中的内容和HL中的内容进行交换 |
-
Call 和 Return指令
- Call(调用)指令:执行之后,程序计数器(PC)将加载一个新地址,而原来的地址则被保存到栈当中。(这种指令记录了“从何处跳转”,即保存了跳转之前的信息)
-
补充:8080处理器中的转移指令
操作 含义 JMP 转移 JZ 零转移 JNZ 非零转移 JC 进位转移 JNC 无进位转移
三、Intel 8080与周围设备
内存映像 I/O:除了常规的65536个地址外,另增了256个地址专门用来访问输入/输出设备,这些地址被称为I/O端口
| 操作 | 含义 |
|---|---|
| OUT | 把累加器中的内容 写入到 紧跟该指令后的字节 所寻址的端口 |
| IN | 把一个字节从端口读入到累加器 |
1 | OUT PP |
当外围设备需要中断微处理器当前操作时,它需要把8080的INT端口的输入信号置1。8080通过从存储器取出指令的方式,来响应该中断,同时控制信号指明有中断发生。
| 操作 | 含义 |
|---|---|
| DI | 禁止中断 |
| EI | 允许中断 |
- 其他操作
| 操作 | 含义 |
|---|---|
| RST | 重新启动,立即跳转到特定的地址 |
| NOP | 无操作 |
四、Motorola公司生产的6800微处理器
- 对比: Motorola 6800相比于Intel 8080
- 时钟信号较简单
- 没有独立I/O端口
- B也是累加器,无其他8位寄存器
- 16位索引寄存器(类似HL寄存器)
- 对应操作码和助记符完全不同
- 无奇偶标志位,有溢出标志位
- 汇编语言不兼容
- 6800高前低后,8080低前高后(Motorola方式,Intel方式)
五、现代微处理器技术
-
苹果公司的Mac的PowerPC微处理器
采用RISC技术(精简指令集计算机)
-
特点1:指令等长,只有Load和Store能访问存储器
-
特点2:设置大量寄存器,避免频繁访问存储器
-
-
流水线技术
处理器在执行一条指令时同时读取下一条指令
-
高速缓冲存储器(Cache)
在处理器内部设置一个访问速度很快的RAM阵列,存放最近要执行的指令,Cache能避免常用小循环的反复加载