첫 번째 어셈블리 포함 C 프로그램
7560 단어 집성
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Array{
char* chlist;
int size;
}array;
char* StrCopy(array *a1,array *a2){
//int i;
register char* _res;
printf(" 1: %s
",a1->chlist);
printf(" 2: %s
",a2->chlist);
if(a1->size>a2->size){
a2->chlist=(char*)malloc(a1->size*sizeof(char));
a2->size=a1->size;
}
/*for(i=0;i<a1->size;i++){
a2->chlist[i]=a1->chlist[i];
}
return a2->chlist;*/
asm(
"cld
" //
"\tmovl %%esi,%%ebx
\t" // a2->chlist
"1: decl %3
\t " //size--
"js 4f
\t" //if(size<0) 4
"lodsb
\t" //ds:[esi]->al esi++
"stosb
\t" //al->es[edi] edi++
"jmp 1b
\t" // 1
"4:
\t"
"movl %%ebx,%%esi
\t" // esi
:"=S"(_res)\
:"D"(a2->chlist),"S"(a1->chlist),"c"(a1->size)\
:"ebx"
);
return _res;
}
int main(void){
array l1;
array l2;
char* str;
l1.chlist=l2.chlist=NULL;
l1.size=l2.size=0;
l1.chlist="hello World!";
l1.size=strlen(l1.chlist)+1;
//**************************
str=StrCopy(&l1,&l2);
printf(" 2:%s
",str);
return 0;
}
문자열을 복사했습니다.시작할 때 어셈블리 부분의 마지막 줄은 다음과 같다.
:"edi","esi","ecx","ebx"
컴파일 오류:StrCopy.c:23:2: : can’t find a register in class ‘CREG’ while reloading ‘asm’
StrCopy.c:23:2: : ‘asm’
인터넷에서 원인을 찾아보니 블로그에서'edi','esi','ecx'가 이미 입력 목록에서 제시되었는데 레지스터 목록을 수정하여 다시 제시하면 gcc가 오류를 보고할 것이다.수정 후 컴파일이 통과되었습니다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
첫 번째 어셈블리 포함 C 프로그램최근 이틀 동안 linux 핵을 배우기 시작했는데 조형 박사의 《linux 핵 완전 주석》을 보니 이득이 적지 않았다.오늘 제3장이 어셈블리 부분에 박혀 있는 것을 보고 작은 프로그램을 써서 시험해 보았는데 gcc로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.