相关疑难解决方法(0)

如何访问 C 变量以进行内联汇编操作?

鉴于此代码:

#include <stdio.h>

int main(int argc, char **argv)
{
    int x = 1;
    printf("Hello x = %d\n", x);
}
Run Code Online (Sandbox Code Playgroud)

我想在内联汇编中访问和操作变量 x 。理想情况下,我想使用内联汇编更改其值。GNU 汇编器,并使用 AT&T 语法。

c assembly gcc inline-assembly

5
推荐指数
1
解决办法
4913
查看次数

为什么局部变量不能在 GNU C 基本内联 asm 语句中使用?

main为什么我不能在基本 asm 内联中使用局部变量?它只允许在扩展汇编中使用,但为什么会这样呢?

(我知道局部变量在返回地址之后位于堆栈上(因此一旦函数返回就不能使用),但这不应成为不使用它们的原因)

以及基本汇编的示例:

int a = 10; //global a
int b = 20; //global b
int result;

int main() {
    asm ( "pusha\n\t"
          "movl a, %eax\n\t"
          "movl b, %ebx\n\t"
          "imull %ebx, %eax\n\t"
          "movl %eax, result\n\t"
          "popa");

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

扩展的例子:

int main (void) {
    int data1 = 10;  //local var - could be used in extended
    int data2 = 20;
    int result;

    asm ( "imull %%edx, %%ecx\n\t"
          "movl %%ecx, %%eax" 
          : "=a"(result) …
Run Code Online (Sandbox Code Playgroud)

c gcc language-design inline-assembly

5
推荐指数
2
解决办法
2737
查看次数

比较2个数字与汇编

我有以下代码.我想完成汇编代码,如下所示:

int main(void)
{
    int x = 10;

    int i=0;
    label1:


    asm (.....) // code to add here: if i>=x then jump to label2

    printf("%d\n",i);

    i++;
    asm (.....) // code to add here: jump to label 1
    label2:

    printf("out\n");
}
Run Code Online (Sandbox Code Playgroud)

我的机器是x86,操作系统是Ubuntu 12

c assembly

-2
推荐指数
1
解决办法
1251
查看次数

标签 统计

c ×3

assembly ×2

gcc ×2

inline-assembly ×2

language-design ×1