首页 > 其他 > 详细

寄存器,标志寄存器

时间:2020-09-04 08:39:54      阅读:50      评论:0      收藏:0      [点我收藏+]

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,有符号数则不关注。

 技术分享图片

 

 技术分享图片

 

 

 

NCNo Carry

CYCarrY

 

(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 ,如何判断AB之间的关系?

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 ,如何判断AB之间的关系?

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) IFInterrupt 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!