本篇blog只给几个例题来进行快速学习内嵌as汇编。
第一、输入参数中包含输出参数
#include<stdio.h>
int main(void)
{
char string1[]={"this is yzh test code!"};
int len = 25;
char string2[30]= {'\0'};
//asm volatile(
asm (
"rep movsb"
:
:"S"(string1), "D"(string2), "c"(len)
);
printf("%s\n",string2);
return 0;
}
例题中的S和D分别表示esi和edi,c为ecx(可以参考上一篇约束代码表),其实这里的内嵌汇编所要表达的是:ds:esi === >> es:edi,利用rep movsb配合ecx循环的把ds:esi位置上的数据搬运到es:edi上;所以edi作为输入参数同时也是输出参数,那么输出位置只需要:就可以了。
第二、利用占位符替代输入输出寄存器
#include<stdio.h>
int main(void)
{
int data1 = 10;
int data2 = 20;
int result;
as