"运算符是如何实现的(在 32 位整数上)?-6ren"> "运算符是如何实现的(在 32 位整数上)?-假设环境是 x86。 编译器如何在 32 位整数上编译“>”运算符。从逻辑上讲,我的意思是。没有任何组装知识。 假设高级语言代码是: int32 x, y; x = 123; y = 456; boo-6ren">
gpt4 book ai didi

x86 - ">"运算符是如何实现的(在 32 位整数上)?

转载 作者:行者123 更新时间:2023-12-01 11:57:45 24 4
gpt4 key购买 nike

假设环境是 x86。

编译器如何在 32 位整数上编译“>”运算符。从逻辑上讲,我的意思是。没有任何组装知识。

假设高级语言代码是:

int32 x, y;
x = 123;
y = 456;
bool z;
z = x > y;

编译器如何计算表达式 x > y

它是否执行类似的操作(假设 x 和 y 是正整数):

w = sign_of(x - y);
if (w == 0)
// expression is 'false'
else if (w == 1)
// expression is 'true'
else
// expression is 'false'

这些资料有引用资料吗?

最佳答案

嗯,从逻辑上讲,它是某事。问题是“比较两个整数”通常是几乎所有机器上的基本操作,所以从机器的角度来看,如果只是进行比较。确切的细节因架构而异,但总的来说,您会有类似于 CMP 指令的东西,它会为“小于”、“等于”和“大于”留下条件代码或其他此类控制信号。所以生成的代码会是这样的

         LD A, X    ; value of x into register A
LD B, y ;
CMP ; compare reg A with reg B

此时结果代码有答案。如果你想存储结果,那么你可以使用你拥有的那种条件——

         JMPGE @FALSE ; goto label FALSE if >=
STO Z, 0x1 ; put a hex 1 into location Z
JMP @END ; jump to the end
FALSE: STO Z, 0x0
END:

关于x86 - ">"运算符是如何实现的(在 32 位整数上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4516474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com