gpt4 book ai didi

c - 循环索引比较未按预期组装

转载 作者:行者123 更新时间:2023-11-30 17:12:25 25 4
gpt4 key购买 nike

我正在尝试使用 GDB 来理解 C,我正在调试的程序是:

#include <stdio.h>

int main()
{
int i;
for(i=0; i < 10; i++) {
puts("Hello, world!\n");
}
return 0;
}

当我调试它时,我看到在汇编中 i 的值与 10 进行比较,而不是 9,我认为它应该与 9 进行比较,因为我没有在循环间隔中包含 10。这是 GDB 输出:

(gdb) x/i $rip
=> 0x100000f36 <main+22>: cmp DWORD PTR [rbp-0x8],0xa

rbp-0x8 指向的值是 i 值,rbp-0x8 现在等于预期的 0

最佳答案

来自Wikipedia关于cmp说明:

Performs a comparison operation between arg1 and arg2. The comparison is performed by a (signed) subtraction of arg2 from arg1, the results of which can be called Temp. Temp is then discarded. If arg2 is an immediate value it will be sign extended to the length of arg1. The EFLAGS register is set in the same manner as a sub instruction.

所以cmp如果左侧值小于、大于或等于右侧值,指令会设置一个标志。如果你检查下一条指令,你可能会发现它是 jge ,这意味着它跳出循环 if i <= 10

关于c - 循环索引比较未按预期组装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31549242/

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