gpt4 book ai didi

c++ - 使用 C++ 函数中的汇编器为循环编码

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:13:49 25 4
gpt4 key购买 nike

我一直对汇编很感兴趣,但是到目前为止我还没有真正的机会以最好的方式面对它。现在,当我确实有时间时,我开始使用 C++ 中的汇编程序编写一些小程序,但那只是小程序,即定义 x,将其存储在某处等等。我想在汇编程序中实现 foor 循环,但我做不到,所以我想问问这里是否有人用过它,很高兴在这里分享。一些功能的例子是

for(i=0;i<10;i++) { std::cout<< "A"; }

有人知道如何在汇编程序中实现它吗?

edit2:ISA x86

最佳答案

这是这段代码的 GCC 未优化输出1:

void some_function(void);

int main()
{
for (int i = 0; i < 137; ++i) { some_function(); }
}


    movl    $0, 12(%esp)            // i = 0; i is stored at %esp + 12
jmp .L2
.L3:
call some_function // some_function()
addl $1, 12(%esp) // ++i
.L2:
cmpl $136, 12(%esp) // compare i to 136 ...
jle .L3 // ... and repeat loop less-or-equal

movl $0, %eax // return 0
leave // --"--

通过优化-O3,加法+比较变成减法:

    pushl   %ebx          // save %ebx
movl $137, %ebx // set %ebx to 137

// some unrelated parts

.L2:
call some_function // some_function()
subl $1, %ebx // subtract 1 from %ebx
jne .L2 // if not equal to 0, repeat loop

1可以通过使用 -S 标志调用 GCC 来检查生成的程序集。

关于c++ - 使用 C++ 函数中的汇编器为循环编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153491/

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