汇编的 OF位 到底代表什么!

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

几乎所有的教程都把OF(overflow)翻译成溢出标志,但如果从中文上来理解既然是溢出 那么

下面的计算

add   eax,ecx//eax=0xFFFFFFFF,ecx=0x00000001

结果 eax应该=0x100000000 肯定是容纳不下溢出了。

但实际并不是如此 即使如上计算OF任然是0。并未置1.

这里给我们太多的惊讶了,天啦难道这个溢出标志是个水货。

但在写个程序测试下 依然用add

add   eax,ecx//eax=0x7FFFFFFF,ecx=0x00000001

结果 eax应该=0x80000000 eax绝对容纳得下这个数据。

但OF=1了;

怎么会这样呢;

这次再换个 用减的

SUB  eax,ecx//eax=0x80000000,ecx=1;

结果 eax应该=0x7FFFFFFF eax容纳得下这个数据。

结果又 OF=1了;

要晕掉了 这 OF算什么溢出标志啊!我也搞糊涂了。

 

但是 是否看出规律了??????

如果我们将 eax都当着有符号型的数来看 (最高位为符号位)

add   eax,ecx//eax=0x7FFFFFFF,ecx=0x00000001

这个 正数+正数=负数了!

SUB  eax,ecx//eax=0x80000000,ecx=1;

这个  负数-正数=正数了!

这时我们再来推测OF的作用吧,首先计算时将所有的数据都当成有符号型的数(即使实际编程中 你使用的是无符号型数据),如果计算后的数据(依然当着有符号型)不合理了:

如 正数+正数=负数了! 负数-正数=正数了则置1!

所以OF在加减法运算中如果仅从字面上来理解溢出标志是非常不合理的。 乘除运算也会牵涉到上述计算“合理性”判断置位,同时也只有乘法运算中才会有真正中文意义上的溢出。

汇编与接口技术期末复习笔记(1)—— 汇编部分 文章目录0. 计组先导知识0.1 进计数制0.2 计算机中数和字符的表示1. 基础知识1.1 汇编语言1.2 硬件接口2. 80x86计算机组织2.1 计算机系统2.2 8086微处理器2.3 存储器地址第1次作业3. 地址与指令3.1 寻址方式3.1.1 数据寻址方式3.1.1.1 立即数寻址3.1.1.2 寄存器寻址3.1.1.3 存贮器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址3.1.2 指令寻址第2次作业3.2 操作数寻址3.2.1 伪指令的功能与格式3.2.2 主要伪指 阅读详情

相关推荐

8086汇编(16汇编)学习笔记09.宏汇编

汇编在文件中是当做关键字的,但是在bug中运行时并没有这些指令,这些关键词被称为伪指令,cpu并不认识他们,需要经过编译器转化成 cpu认识的代码,但是他多我们写代码帮助又很大表达式表达式中的求值是在程序链接时完成的,所以表达式中的各值必须是在汇编或链接期就能确定,也就是 说不能将寄存器或者变量运⽤于表达式。算术表达式逻辑运算符逻辑运算即运算,逻辑运算符与对应的指令助记符单词是相同的,当它们出现在操作码部分时是指 令,出现在操作数时是逻辑运算符关系运算符。

彭于晏长沙分晏 1458

汇编语言——ZF、PF、SF、CF、OF寄存器

flag寄存器(标志寄存器)是一个十六寄存器,flag寄存器的1、2、3、12、13、14、15没有任何含义。 其余各分别代表不同的意义 ZF标志 指令执行后,其结果是否为0,若结果为0,那么ZF=1;如果不为0,那么ZF=0。 PF标志 指令执行后,其结果的二进制表示中1的个数是否为偶数,若1的个数为偶数,PF=1;若1的个数为奇数,PF=0。 SF标志 有符号运算 指令执行后,其结果是否为负。若结果为负,SF=1;如果非负,SF=0。 两个数相加,结果转换成二进制,看最高,若为1,

weixin_45944581的博客 3万+

(32汇编 六)内存读写及寻址方式

我们称计算机CPU是32或者64,有很多书上说之所以叫32计算机是因为寄存器的宽度是32,这样说是不准确的,因为还有很多寄存器是大于32的。多少的机器和寄存器的宽度没有关系,和计算机的寻址宽度有关系,所能查找的内存编号的范围。 内存格式 每一个内存单元的宽度为8。 [编号]称为地址。 内存单元:字节 每个字节有个编号,称为内存地址 从指定的内存中写入/读取数据 mov

CodingJourney 4302

汇编语言中的标志:CF、ZF、SF、OF、PF

CF(进):无符号运算,若是结果超过了寄存器存放的最大值,CF=1,若没有则返回CF=0; OF(溢出):一个寄存器如果存放的值超过所能表示范围,就称为溢出,OF溢出OF=1,没有溢出OF=0 SF(符号):符号标志,如果运算结果为负数,SF=1,反之若为正数SF=0 ZF(为零):0标志,一条语句结果是0,ZF=1,反之结果不为零ZF=0 PF(奇偶):奇偶标志,转化为二进制后,若是1的个数为偶数个,则PF=1,若是为奇数个PF=0 ......

qq_43751200的博客 2万+

汇编语言(五)—— 算术运算类指令

汇编语言基础学习笔记(五)—— 算术运算类指令算术运算类指令进和溢出标志进标志CF(Carry Flag)溢出标志OF(Overflow Flag)零标志、符号标志和奇偶标志零标志ZF(Zero Flag)符号标志SF(Sign Flag)奇偶标志PF(Parity Flag)加减运算结果对状态标志的影响影响状态标志的指令ADD指令SUB指令INC、DEC和NEG指令增量指令INC(incre...

为了学习 5096

(最详细!)汇编原理中OF(溢出)和CF(进)的判断方法

关于这个问题百度查了半天,都没有比较全面的解释,所以我来了! 首先我们需要知道,al是用两16进制的数来保存数据的, 所以正数最多保存0~255(十进制),FFH 处理器内部以补码表示有符号数,8个二进制能够表达的整数范围是:+127 ~ -128 那么补码怎么求呢? 如下: 正数的补码就是其本身 负数的补码是在其原码的基础上, 符号不变, 其余各取反, 最后+1. (即在反码的基础上+1) [+1] = [00000001]原 = [00000001]反 = [0000

Salmon1122的博客 2万+

汇编中的OF和CF标志

汇编 有符号溢出检测OF 无符号溢出检测CF

RedDragon_Will的博客 2062

汇编语言】16汇编总结

16汇编语言总结

weixin_42659457的博客 2013

64与32汇编除法技术实现与应用

64处理器能够处理更大的数据宽度,同时支持更大的内存寻址空间,理论上能够一次处理比32处理器多出一倍的数据。这使得64处理器在运行多任务以及处理大数据时更加高效。汇编语言是一种低级编程语言,它与机器语言非常接近,但采用了可读性更强的符号和助记符来表示机器指令。每条汇编指令几乎都与特定的机器指令一一对应。汇编语言的特性包括直接控制硬件的能力、极高的执行效率和对系统底层资源的精细操作。由于其接近硬件的本质,编写汇编语言的程序员必须具备对计算机内部工作机制和指令集架构的深刻理解。

weixin_42571280的博客 1141

16汇编的调试及常用命令

16汇编环境搭配及使用 debug常用命令 DOS 命令简单介绍

weichen_Hi的博客 2944

汇编语言入门——1.1 初识16汇编

这里的AH,指的是AX寄存器的高8,下一句的AL,指的是AX寄存器的低8。以上两句,第一句代表在你的DOS虚拟环境中挂载一个虚拟磁盘A盘,对应实机中的D:\asm目录,以后在DOS虚拟环境中操作A盘就是操作实机中的这个目录。如果手头有32的win7或者xp,这些较早的系统是兼容DOS环境的,可以直接在命令提示符(WIN+R,输入cmd)中运行debug。显示的0B0B:0100是一个地址,冒号前面的段号可能每次打开都有所不同,后面的0100是一样的,表示我们编写的程序会保存在内存的这个地址中。

2603_95177945的博客 597

汇编实现32无溢出的除法子函数(详细注释)

最近在学习《王爽汇编》,其中一个作业是编写子程序实现除法溢出问题。 描述如下:汇编语言中div可以实现除法,当进行8除法(被除数16,除数8,结果8)时,商存在al中,余数存在ah中;进行16除法(被除数32,除数16,结果16,商16)时,商存在ax中,余数存在dx中。 假设一个16除法 10000h/1 显然,结果是10000h。可系统默认的16除法结果是16数,但结果10000h显然是溢出的(65536>65535)。改进策略是拓展结果的长度,也就是被除数32,除数

Fgoodboy的博客 2572

16汇编语言(一)----基本输入与输出

一、输入与输出 16和32汇编在输入输出上有很大的区别,16汇编表现得更加仔细,所以在指令上比32的 call readint 或者 **call readstring**更加细,而且16汇编在输出数字的时候要把数字转换为字符。 1.1 输入代码为: mov ah,01h ;AH=01h代表输入一个字符 int 21h ;输入数据保存在al里面 1.2 输出代码为: 1、输出单个字符 mov ah,02h int 21h 2、输出字符串

weixin_44586132的博客 7137

VisualStudio(VS)配置64汇编语言开发环境

vs开发64程序无法使用内联汇编,需要将汇编放到一个单独文件中编译链接。接着,点击”自定义生成工具“,在”命令行“中输入。3. 将汇编函数导出。

要把所有那些负面的信息当做对自身行为的评价,而不是对自身价值的评判。 1603

8086汇编(16汇编)学习笔记06.串操作、流程转移指令

从表格中我们不难分析出来 EB 代表 jmp 指令 ,其机器码中并没有直接存储 目标地址的 ip信息 ,也不是直接存储偏移,而是地址偏移值 - 2 , 即 下一条指令 到 目标地址的偏移,那为什么不存储本条指令地址和目的地址的偏移,而要存下一条的呢,因为当一条指令执行完,IP地址就指向了下一条指令的ip地址,如果要储存自己和目标指令的偏移,需要先 - 2 ,把ip地址 改回当前自己的,再去算偏移,所以就直接存储 下条指令的 ip 地址 和目标地址的偏移。上面是考虑的是 从上往下跳,如果从下往上跳呢。

彭于晏长沙分晏 1537

ARM汇编:MOV/LDR陷阱导致offset out of range

错误现象 先来说一下最近碰到的问题。在编译阶段,编译器报如下错误信息: C:\Users\Admin\AppData\Local\Temp\1\ccQUTPlr.s: Assembler messages: C:\Users\Admin\AppData\Local\Temp\1\ccQUTPlr.s:35: Error: offset out of range 看到...out of range,我第一反应是链接文件出问题了。但立马反应过来,这还没有到链接阶段呢,在编译obj的时候就报错了。老实说,碰到这

斯蒂芬杜的博客 2752

PIC8单片机汇编语言常用指令的识读(上)

PIC8单片机汇编语言常用指令的识读(上)   各大类单片机的指令系统是

todototry的专栏 2750

汇编小错误集

end of file not at end of a line; newline inserted 英文的意思就是说文末没有换行符。Unix文档的回车换行符是一个字符\n,Windows的是分别的两个\n\r, 解决方法:在文件结尾回车一下 invalid instruction suffix for `pop' 原因是 64 系统和 32 系统的差别引起的 解决方法为: 在代码开头添加 .code32 即可 ...

funsion的专栏 2417

XiaoXiao_16汇编学习随手记

8086 cpu  寄存器的说明-------------------------------------------------------------ax bx cx dx sp bp si di ip (通用寄存器) ax bx dx si di ax 是十六寄存器 系统 ax = al + ah al 代表 ax 的低 ah 代表 ax 的高 bx 是八寄存器 [ b...

Xiaoxiao博客 419
上一篇: Wininet CInternetSession类编程的一些心得 包括如何清空cookie
下一篇: tab control用法
killalarm
博客等级 码龄17年 13粉丝 6原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值