热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NEG指令如何影响x86上的标志?

如何解决《NEG指令如何影响x86上的标志?》经验,为你挑选了1个好方法。

英特尔软件开发手册对此说明进行了neg说明:

如果源操作数为0,则CF标志设置为0; 否则设置为1. OF,SF,ZF,AF和PF标志根据结果设置.

我认为AF和CF会被设置为好像neg %eax被替换为,

not %eax   # bitwise negation
add $1, %eax

但事实并非如此,在实际CPU上设置AF和CF时否定0x6ffffef5.



1> Peter Cordes..:

neg所有标志设置为与sub从0 获得的标志相同.

这一系列指令将所有标志(包括AF和CF)设置为neg %eax:

xor  %ecx, %ecx
sub  %eax, %ecx     # ecx = 0 - eax

英特尔的文档实际上确实指定了这一点,但没有在伪代码操作部分或指令集参考(第2卷)条目中的标志影响部分中指定neg.

描述部分neg的文本包含此块:

此操作相当于从0减去操作数.

在第1卷中:

7.3.2.4比较和符号变更指令

[关于CMP的段落]

NEG(否定)指令从零中减去有符号整数操作数.

这个文件的存在是通过对这个问题的早期副本的评论来指出的,而这个副本并不是直接措辞的.

我不知道vol.1有一整节解释说明.事实证明,并非英特尔对个别指令所说的一切都在第2卷insn set参考中.


有一些证据表明neg内部解码为与subIntel CPU上的指令相同的uop .(例如,neg [mem]可以使用ALU op对负载进行微熔合,以及对存储地址和存储数据微操作inc [mem]进行微融合. 只能对存储进行微融合,因此它是3个完整的融合域uops).


推荐阅读
author-avatar
手机用户2502854967
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有