c语言关键字asm的用法,在 C语言中,如何通过 asm 关键字嵌入汇编语言代码?

本文详细介绍了C语言中如何通过关键字`asm`嵌入汇编代码,包括声明改动的寄存器、使用占位符代替寄存器名称、给寄存器起别名以及直接使用内存位置进行操作。通过示例代码和汇编代码的解释,阐述了`asm`关键字的使用技巧和注意事项。
摘要由CSDN通过智能技术生成

4. test5.c 声明改动的寄存器

在 test4.c 中,我们没有声明改动的寄存器,所以编译器可以任意选择使用哪些寄存器。从生成的汇编代码 test4.s 中可以看到,gcc 使用了  %edx 寄存器。

那么我们来测试一下:告诉 gcc 不要使用 %edx 寄存器。

#include <stdio.h>

int main()

int data1 = 1;

int data2 = 2;

int data3;

asm("movl %%ebx, %%eax"

"addl %%ecx, %%eax"

: "=a"(data3)

: "b"(data1),"c"(data2)

: "%edx");

printf("data3 = %d ", data3);

return 0;

代码中,asm 指令最后部分 "%edx" ,就是用来告诉 gcc 编译器:在内联汇编代码中,我们会使用到 %edx 寄存器,你就不要用它了。

生成汇编代码指令:

gcc -m32 -S -o test5.s test5.c

来看一下生成的汇编代码 test5.s:

movl$1, -20(%ebp)

movl$2, -16(%ebp)

movl-20(%ebp), %eax

movl-16(%ebp), %ecx

movl%eax, %ebx

#APP

# 10 "test5.c" 1

movl %ebx, %eax

addl %ecx, %eax

# 0 "" 2

#NO_APP

movl%eax, -12(%ebp)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值