首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算术恒等式与EFLAGS

算术恒等式与EFLAGS
EN

Stack Overflow用户
提问于 2020-06-05 15:29:22
回答 1查看 273关注 0票数 0

因为a+not x= not(x)+1,这就意味着a-b =−(B)+1,所以

代码语言:javascript
复制
sub rax, rcx

相等于

代码语言:javascript
复制
mov temp, rcx
not temp
add rax, temp
add rax, 1

哪些寄存器被认为是不稳定的?

换句话说,后者是否以完全相同的方式影响EFLAGS?如果没有,又怎能强迫呢?

EN

回答 1

Stack Overflow用户

发布于 2020-06-05 16:03:03

不,他们不一样。例如,如果是rax = 1rcx = 3,那么sub rax, rcx将设置进位标志,因为您要从较小的数字中减去更大的数字。但是在您的第二个指令序列中,在add rax, temp之后,rax将包含-3 (即0xfffffffffffffffd),并且将1添加到-3并不会导致进位。所以在你的第二个指令序列之后,进位标志就会被清除。

我不知道有什么简单的方法可以准确地模拟sub的行为,包括它对标志的影响(除了使用cmp,但这是欺骗,因为它实际上只是隐藏的sub )。原则上,您可以编写一长串指令,手动执行与sub在内部执行的所有相同的测试(参考指令集手册中的精确描述),并使用类似的sahfpopf在末尾设置标志。

这将是很多工作,特别是如果您不打算使用cmp,而我不打算通过它来回答这个问题。特别是因为我也想不出为什么一个人需要这样做,除了作为一个相当没有意义的练习。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62218921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档