p217 8086汇编FLAG寄存器中的OF标志 | 8086汇编标志寄存器 | 标志寄存器OF标志

首先说进制。

世间有无数进制,二进制(Binary)、八进制(Octal)、十进制(Decimal)、十六进制(Hex)乃其中之一。各进制有正有负且它们之间可互相转换。如:-1100110 B = -0146 = -102 = -66H 、 +1100110 B = +0146 = +102 = +66H。

而计算机只认识二进制。并且它的二进制采用补码的方式进行编码。那么什么是补码呢?补码是#@#¥……%%…………&!%#%……&


以上就是进制的简单说明,有一点要注意的是 要将人类的进制思维与计算机的编码方式相分离。


*****************************************************************************************************************************************************************************************

mov 、push、pop指令对该标志位无影响。


以add al,xxx 来演示OF的变化:


先将al和xxx(立即数)的计算机十六进制补码值转换为我们所常用的十进制值,然后将十进制的计算结果与-128~127进行比较注意是十进制的计算结果),如果不在此范围则OF为1,否则为0。计算时如:

mov al , 0F0H  ;0F0H = -16

add al , 88H     ;88H = -120;


add计算的结果为-136(等于101111000B、178H),小于-128,溢出(评估溢出时不考虑al位数的限制。)。而al的值为78H。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
8088 汇编跳转 一、状态寄存器 PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示: 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 条件码: ①OF(Overflow Flag)溢出标志。溢出时为1,否则置0。 ②SF(Sign Flag)符号标志。结果为负时置1,否则置0. ③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0. ④CF(Carry Flag)进位标志,进位时置1,否则置0. ⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0. ⑥PF(Parity Flag)奇偶标志。结果操作数1的个数为偶数时置1,否则置0. 控制标志位: ⑦DF(Direction Flag)方向标志,在串处理指令控制信息的方向。 ⑧IF(Interrupt Flag标志。 ⑨TF(Trap Flag)陷井标志。 二、 直接标志转移(8位寻址) 指令格式 机器码 测试条件 如...则转移     指令格式 机器码 测试条件 如...则转移 JC 72 C=1 有进位 JNS 79 S=0 正号 JNC 73 C=0 无进位 JO 70 O=1 有溢出 JZ/JE 74 Z=1 零/等于 JNO 71 O=0 无溢出 JNZ/JNE 75 Z=0 不为零/不等于 JP/JPE 7A P=1 奇偶位为偶 JS 78 S=1 负号 JNP/IPO 7B P=0 奇偶位为奇 三、间接标志转移(8位寻址) 指令格式 机器码 测试格式 如...则转移 JA/JNBE(比较无符号数) 77 C或Z=0 >  高于/不低于或等于 JAE/JNB(比较无符号数) 73 C=0 >=  高于或等于/不低于 JB/JNAE(比较无符号数) 72 C=1 <  低于/不高于或等于 JBE/JNA(比较无符号数) 76 C或Z=1  大于/不小于或等于 JGE/JNL(比较带符号数) 7D S异或O=0 >=  大于或等于/不小于 JL/JNGE(比较带符号数) 7C S异或O=1 <  小于/不大于或等于 JLE/JNG(比较带符号数) 7E (S异或O)或Z=1 <=  小于或等于/不大于
下面是一个使用标志寄存器汇编示例: ```assembly section .data a dw 10 ; 定义一个有符号16位整数a b dw 5 ; 定义一个有符号16位整数b section .text global _start _start: ; 将a与b相加 mov ax, [a] ; 将a加载到ax寄存器 add ax, [b] ; 将b加到ax寄存器上 jo overflow ; 如果有溢出,跳转到overflow标签 ; 如果没有溢出,将结果输出到标准输出 mov eax, 4 ; 写入系统调用 mov ebx, 1 ; 标准输出文件描述符 mov ecx, ax ; 结果存储在ecx寄存器 mov edx, 2 ; 写入2个字节 int 0x80 ; 发起系统调用 ; 程序结束 mov eax, 1 ; 退出系统调用 xor ebx, ebx ; 返回状态码0 int 0x80 ; 发起系统调用 overflow: ; 处理溢出情况,将错误消息输出到标准错误 mov eax, 4 ; 写入系统调用 mov ebx, 2 ; 标准错误文件描述符 mov ecx, msg ; 错误消息的地址 mov edx, msg_len ; 错误消息的长度 int 0x80 ; 发起系统调用 ; 程序结束 mov eax, 1 ; 退出系统调用 mov ebx, 1 ; 返回状态码1 int 0x80 ; 发起系统调用 section .data msg db "Overflow occurred!", 0x0a ; 错误消息 msg_len equ $-msg ; 错误消息的长度 ``` 在上述示例,使用了标志寄存器的溢出标志(Overflow Flag,OF)来检测加法操作是否溢出。如果发生溢出,程序将跳转到`overflow`标签处,输出错误消息到标准错误。如果没有溢出,则将结果输出到标准输出。 请注意,上述示例基于Linux平台的x86架构。在不同的操作系统和架构上,寄存器的使用和系统调用可能会有所不同。因此,在其他环境使用时,可能需要进行适当的修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值