相关疑难解决方法(0)

意外的GCC内联ASM行为(被覆盖的被破坏的变量)

在我的计算机上,编译的可执行文件省略了在循环顶部执行"mov%2,%% ax"

当"添加%1,%% ax"取消注释时.

有人要进行双重检查或评论?

#include <stdio.h>

int main() {

short unsigned result, low ,high;

    low  = 0;
    high = 1;

    __asm__ (   
        "movl $10, %%ecx \n\t"

        "loop: mov  %2, %%ax \n\t"

//      "add    %1, %%ax \n\t"      // uncomment and result = 10
        "mov    %%ax, %0     \n\t"

        "subl   $1, %%ecx \n\t"                 
        "jnz loop"                              
        : "=r" (result)
        : "r" (low) , "r" (high)
        : "%ecx" ,"%eax" );        

    printf("%d\n", result);  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

跟随生成的程序集

movl $1, %esi
xorl %edx, %edx
/APP
movl …
Run Code Online (Sandbox Code Playgroud)

assembly gcc inline-assembly i386

3
推荐指数
1
解决办法
314
查看次数

标签 统计

assembly ×1

gcc ×1

i386 ×1

inline-assembly ×1