1.数据传输引脚
2.控制引脚
3.状态引脚
寄存器相当于CPU内部的存储单元,可能是连续排列,相当于C语言中的数组。
一.8个通用寄存器
|
|
16 bit |
|
|
accumulate |
ax |
ah |
al |
R0 |
count |
cx |
ch |
cl |
R1 |
data |
dx |
dh |
dl |
R2 |
base |
bx |
bh |
bl |
R3 |
stack |
sp |
|
R4 |
|
stack base |
bp |
|
R5 |
|
source |
si |
|
R6 |
|
destination |
di |
|
R7 |
二.专用寄存器:
IP:确定下一条指令所在的地址
三.标志寄存器:
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
OF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
CF |
分为6个状态位 + 3个控制位。
(1) CF: Carry Flag进位标志,运算结果的最高有效位有进位(加法)或借位(减法)时,CF = 1,否则CF = 0。对于无符号数的数学运算,才关注CF,有符号数则不关注。
NC:No Carry
CY:CarrY
(2) OF: Overflow Flag溢出标志位,若运算的结果有溢出,则OF = 1,否则OF = 0。对于有符号数的数学运算,才关注OF,无符号数则不关注。
何为溢出?例如用8位表示补码,范围是-128 ~ +127,超出此范围就产生溢出。
何时溢出?两个同符号数相加(包括不同符号数相减),结果的符号相反才溢出,其他情况不可能溢出。正数和负数相加不可能溢出。
NV: No oVerflow
OV: OVerflow
进位和溢出的区别:
进位表示无符号数的运算超出范围,运算结果依然正确,补上CF即可。
溢出表示有符号数的运算超出范围,运算结果已经不正确。
如何运用进位和溢出?
处理器对两个数进行运算时,按无符号数求得结果,并设置CF位;同时根据是否超出有符号数的范围,设置OF位。
应利用哪个标志,由程序员决定。如果将数字看作无符号数,就关注CF;如果将数字看作有符号数,就关注OF。
(3) ZF: Zero Flag零标志位,若运算结果为0,则ZF =1,否则ZF = 0。
NZ: Not Zero
ZR: ZeRo
两个无符号数A和B,指令sub A, B ,如何判断A和B之间的关系?
若ZF = 1,则A = B。
若CF = 1,则A < B。
若CF = 0 且 ZF = 0,则A > B。
(4) SF: Sign Flag符号标志位。若运算结果最高位为1,则SF = 1,否则SF = 0。由于有符号数的最高位为1是负数,也可理解为负号标志位。
NG: NeGative
PL: PLus
两个有符号数A和B,指令sub A, B ,如何判断A和B之间的关系?
若ZF = 1,则A = B。
若SF = 1,则A < B。
若SF = 0 且 ZF = 0,则A > B。
(5) PF: Parity Flag奇偶标识位,运算结果最低字节(最低8位)中,若1的个数为偶数,则PF = 1,否则PF = 0。
PO: Parity Odd
PE: Parity Even
(6) AF: Auxiliary Carry Flag辅助进位标志,运算结果中最低半个字节(最低4位)是否有进位或借位,有则AF = 1,否则AF = 0。主要是处理器内部使用,一般用户不用关心。
NA: No Auxiliary carry
AC: Auxiliary Carry
(7) DF: Direction Flag方向标志位,用于串操作指令中,控制地址的变化方向。例如将一串数据拷贝到另一处,设置DF = 0,则地址自动增加,设置DF = 1,则地址自动减少。
CLD指令使DF = 0,
STD指令使DF = 1。
UP: UP
DN: DowN
(8) IF:Interrupt Flag中断允许标志,控制外部可屏蔽中断是否能被处理器响应。
IF = 1则允许中断,
IF = 0则禁止中断。
CLI指令使IF = 0,
STI指令使IF = 1。
DI: Disable Interrupt
EI:Enable Interrupt
中断类似于windos编程中的WndProc,可以直接调用,但更多时候被动调用。
何时使用IF?
自己写中断时,首先禁止中断,否则可能中断里触发中断。例如劫持系统的中断时,先设IF=0,等自己要做的事情完成再恢复中断。
(9) TF: Trap Flag陷阱标志位,也称为单步标志位,用于控制处理器是否单步执行指令。
TF = 1则单步执行指令,
TF = 0则正常执行指令,不单步。
单步执行指令时,处理器在每条指令执行结束时,产生一个编号为1的内部中断,也称为单步中断。编写调试器时可接管此中断,随后显示各寄存器值等。
原文:https://www.cnblogs.com/Nutshelln/p/13611287.html