标志寄存器——标志位

标志位简介:

    标志寄存器,又称程序状态寄存器(它的内容是Program Status Word,PSW).这是一个存放条件码标志,控制标志和系统标志的寄存器.

6个状态标志位

    CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;
    AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;
    OF—溢出标志,带符号数进行算术运算时,其结果超出了8位或16位的表示范围,产生溢出,则OF=1,否则OF=0;

    ZF—零标志,运算结果各位都为零,则ZF=1,否则ZF=0;
    SF—符号标志,运算结果为负数时,即运算结果的最高位为1,则SF=1,否则SF=0;
    PF—奇偶标志,反映操作结果中“1”的个数的情况,若有偶数个“1”,则PF=1,否则PF=0。

3个控制标志位

   DF—方向标志,用来控制数据串操作指令的步进方向;
    当设置DF=1时,将以递减顺序对数据串中的数据进行处理。当设置DF=0时,递增。
   IF—中断允许标志,当设置IF=1,开中断,CPU可响应可屏蔽中断请求;当设置IF=0时,关中断,CPU不响应可屏蔽中断请求。 
   TF—陷阱标志,为程序调试而设的。当设置TF=1,CPU处于单步执行指令的方式;当设置TF=0时,CPU正常执行程序。


详解:

1、进位标志CF (Carry Flag)

当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,

即CF = 1;否则CF = 0。49H + 6DH=B6H, 

没有进位:CF = 0BBH + 6AH=(1)25H,有进位:CF = 1

2、零标志ZF (Zero Flag)

若运算结果为0,则ZF = 1;

否则ZF = 049H + 6DH=B6H,结果不是零:

ZF = 075H + 8BH=(1)00H,结果是零:ZF = 1

3、符号标志SF (Sign Flag) 

运算结果最高位为1,则SF = 1;

否则SF = 049H + 6DH=B6H,

4、奇偶标志PF(Parity Flag)

当运算结果最低字节中“1”的个数为零或偶数时,PF = 1;

否则PF = 03AH + 7CH=B6H=10110110B结果中有5个1,是奇数:PF = 0

5、溢出标志OF (Overflow Flag) 

若算术运算的结果有溢出,则OF=1;

否则 OF=049H + 6DH =B6H,产生溢出:OF = 175H + 8BH =(1)26H,

没有溢出:OF = 0

什么是溢出?

处理器内部以补码表示有符号数8位表达的整数范围是:+127~-12816位

表达的范围是:+32767~-32768

如果运算结果超出这个范围,就产生了溢出有溢出,说明有符号数的运算结果不正确49H+6DH=B6H,就是73+109=182,已经超出-128~+127范围,产生溢出,故OF=1;

另一方面,补码B6H表达真值是-74,显然运算结果也不正确

溢出标志OF和进位标志CF是两个意义不同的标志


进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;

溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。

例1:49H + 6DH=B6H无符号数运算:  

73+109=182范围内,

无进位有符号数运算:73+109=182范围外,有溢出

例2:BBH + 6AH=(1)25H无符号数运算:

    187+106=293范围外,

有进位有符号数运算:-69+106=37范围内,无溢出

溢出的判断判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加(包括不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确其他情况下,则不会产生溢出

6、辅助进位标志AF(Auxiliary Flag)

运算时D3位(低半字节)有进位或借位时,AF = 1;

否则AF = 0。49H + 6DH=B6H,D3有进位:AF = 1

7、方向标志DF(Direction Flag)

用于串操作指令中,控制地址的变化方向:设置DF=0,存储器地址自动增加;

设置DF=1,存储器地址自动减少。

CLD指令复位方向标志:DF=0STD指令置位方向标志:DF=1

8、中断允许标志IF(Interrupt Flag)

用于控制外部可屏蔽中断是否可以被处理器响应:

设置IF=1,则允许中断;

设置IF=0,则禁止中断。

CLI指令复位中断标志:IF=0

STI指令置位中断标志:IF=1

9、陷阱标志TF(Trap Flag)

用于控制处理器进入单步操作方式:

设置TF=0,处理器正常工作;

设置TF=1,处理器单步执行指令。

单步执行指令——处理器在每条指令执行结束时,便产生一个编号为1的内部中断这种内部中断称为单步中断所以TF也称为单步标志利用单步中断可对程序进行逐条指令的调试这种逐条指令调试程序的方法就是单步调试
EU控制器是执行指令的控制电路,实现从队列中取指令、译码、产生控制信号等。,


在(cmd debug)调试程序中为了使标志位的值显尔易见,他提供用符号表示标志位的值。


标志              值为1的标记          值为0的标记 
of                OV                   NV 

df                DN                   UP

if                EI                   DI

sf                NG                   PL 

zf                ZR                   NZ 

af                AC                   NA

pf                PE                   PO 

cf                CY                   NC


cmp指令 
    cmp ax,bx 
    如果(ax)=(bx), 则 zf=1 
    如果(ax)!=(bx), 则 zf=0 
    如果(ax)<(bx), 则 cf=1 
    如果(ax)>=(bx), 则 cf=0 
    如果(ax)>(bx), 则 cf=0且zf=0 
    如果(ax)<=(bx), 则 cf=1或zf=1 

cmp指令配合和条件转移指令配合使用 
    条件转移指令 
    指令           含义            检测的相关标志位 
    je            等于则转移       zf=1 
    jne           不等于则转移     zf=0 
    jb            低于则转移       cf=1 
    jnb           不低于则转移     cf=0 
    ja            高于则转移       cf=0且zf=0 
    jna           不高于则转移     cf=1或zf=1 

DF标志和串传送指令 
    DF 方向标志位,在串处理指令中,控制每次操作后si、di的增减 
    df=0   每次操作后si、di递增 
    df=1   每次操作后si、di递减 
movsb: 
    相当于 
    mov es:[di],byte ptr ds:[si] 
    如果 df=0 
    inc di 
    inc si 
    如果 df=1 
    dec di 
    dec si 
movsw: 
    相当于 
    mov es:[di],word ptr ds:[si] 
    如果 df=0 
    add si,2 
    add di,2 
    如果 df=1 
    sub si,2 
    sub di,2 
一般来说,movsb和movsw都和rep配合使用,格式如下: 
    rep movsb   
    或者   
    rep   movsw 
    相当于 
    s:movsb 
       loop   s 
    rep的作用是根据cx的值,重复执行rep后面的串传送指令 


pushf将标志寄存器的值入栈 

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以上为DM9000(A)常用寄存器功能的详细介绍,通过对这些寄存器的操作访问,我们便可以实现对DM9000的初始化、数据发送、接收等相关操作。而要实现ARP、IP、TCP等功能,则需要对相关协议的理解,由编写相关协议或移植协议栈来实现。 功能描述 1、总线 总线是ISA总线兼容模式,8个IO基址,分别是300H, 310H,320H, 330H, 340H, 350H, 360H, 370H。IO基址与设定引脚或内部EEPROM的共同选定 访问芯片有两个地址端口,分别是地址端口和数据端口。当引脚CMD接地时,为地址端口;当引脚CMD接高电平时,为数据端口。在访问任何寄存器前,地址端口输入的是数据端口的寄存器地址,寄存器的地址必须保存在地址端口。 2、存储器直接访问控制 DM9000提供DMA(直接存取技术)来简化对内部存储器(下称存储器)的访问。对存储器起始地址完成编程后,发出写命令就可以加载当期数据到内部数据缓冲区,可以通过读写数据读出或写入寄存器来定位数据到存储区。根据当前总线模式的字长使存储地址自动加1,下一个地址数据将会自动加载到数据缓冲区。要注意的是在连续突发式的第一次访问是读写命令的内容。??? 内部存储器空间大少16K字节。低3K字节单元用作发送包的缓冲区,其他13K字节用作接收包的缓冲区。所以在写发送包存储区的时候,当存储器地址越界后,自动跳回0地址并置位IMR第七位。同样在读接收包存储器的时候,当存储器地址越界后,自动跳回起始地址0x0c00。 3、包的发送 命名指针1和指针2,同时存储在发送包缓冲区。发送控制寄存器(02H)控制冗余校验码和填充的插入,其状态分别记录在发送状态寄存器1(03H)和发送状态2(04H) 发送器的起始地址是0x00H,软件或硬件复位后默认是指针1,先通过DMA端口写数据到发送缓冲区,然后写字节计数长度到字节计数寄存器(0FCH,0FDH)。然后置位发送控制寄存器的bit1来发送指针1的包。在此包发送完成前,指针2的数据包能进入到发送缓冲区。当指针1的包发送完,写字节计数长度到字节计数寄存器并置位发送控制寄存器的bit1来发送指针2的包。类似的操作来进行更多的数据发送。 4、包的接收 接收缓冲区是一个环结构,起始地址0C00H在复位后。每个包有4个字节的头,后紧跟着包的数据及CRC校验码,这4个字节的头格式是01H,状态,包长度低8位,包长度高8位。它用来标志着每个包正确的起始地址。
TXBnCTRL是用于控制CAN控制器中发送缓冲器的寄存器,其中n表示发送缓冲器的编号(0、1、2)。下面是TXBnCTRL寄存器的位字段说明: bit 7:U(未使用)- 保留位,没有特定功能。 bit 6:R(只读)- 只读位,无法通过写操作进行更改。 bit 5:R(只读)- 只读位,无法通过写操作进行更改。 bit 4:R(只读)- 只读位,无法通过写操作进行更改。 bit 3:R/W(可读/可写)- 传输错误标志位。当发送缓冲器在发送期间出现传输错误时,该位将置位(1),需要通过软件清除。 bit 2:U(未使用)- 保留位,没有特定功能。 bit 1:R/W(可读/可写)- 发送请求位。设置该位为1时,表示要发送发送缓冲器中的消息。软件设置该位后,CAN控制器将尝试发送消息,并在发送完成后自动清除该位。 bit 0:R/W(可读/可写)- 发送传输优先级位。用于设置发送消息的传输优先级。 在TXBnCTRL寄存器中,有一些保留位(U),只读位(R)和可读/可写位(R/W)。保留位和只读位在写操作中没有特定的功能,只读位只能通过读操作获取其状态。而可读/可写位可以通过读操作获取其状态,并且可以通过写操作进行更改。 需要注意的是,具体的位字段功能和操作细节可能会根据不同的CAN控制器和实现而有所不同。请参考相关的CAN控制器手册或参考应用文档以获取准确的位字段说明和使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值