总表
- S3、S2、S1、S0、CN_I为控制信号;FC 进位标志,FZ 零标志,FS 正负标志,I 中断允许标志;表中功能栏内的FC、FZ、FS表示当前运算可能会影响到该标志。
很显然只放这么一张表是很随意且模糊的,其中有着很多的基础知识,下文将详细讲述其中每一个功能,剖析每一次的运算过程。
- 接下来我将会顺着二进制依次增大的顺序讲解,并将其作为标题。
- 若 CN_I 有 1 与 0 的区别的将会分开解析。
FC,FZ,FS是什么
- 在进入解释前我们先了解一下什么是 FC,FZ,FS
一、FC(Flag Carry)进位标志
二、FZ(零标识)
当运算结果为 0 时,FZ = 1,即 FZ 将会亮。
- 所有的运算都有可能产生 0 的结果
三、FS(正负标识)
当运算结果为负数时,FS = 1,即 FS 将会亮。
逻辑运算
0 0 0 0,F 直通 A、B
- CN_I = 1
直接输出 A
- CN_I = 0
直接输出 B
0 0 0 1,F = A + B
这里的 A + B 不是指一般的 1 + 1 = 2,而是使用二进制逻辑运算 “或” 进行运算
有关逻辑运算可以看 二进制逻辑运算 这里我直接放样例
A = 58 | 0101 1000 |
---|---|
B = AB | 1010 1011 |
或运算结果 | [0] 1111 1011 = FB |
- FC = 0,FZ = 0,FS = 0;
- 上表中 [0] 表示 FC 的值,用以表示有无进位若有进位 FC 就会等于 1,也就是说 FC 将会亮(由于异或判断之类的逻辑运算不会产生进位,所以逻辑运算都不会亮)
0 0 1 0,F = A * B
同样,这里的 A * B 不是指的 2 * 2 = 4,而是使用二进制逻辑运算 “与” 进行运算(二进制逻辑运算 )
A = 58 | 0101 1000 |
---|---|
B = AB | 1010 1011 |
与运算结果 | [0] 0000 1000 = 08 |