AT&T기반 인라인 어셈블리어 질문..
글쓴이: gyxor / 작성시간: 화, 2005/11/08 - 12:51오후
#include <stdio.h> int value=0; main() { __asm__ __volatile__ ( "jmp a20\n" "a10:" ".long 0xcccccccc\n" "a20:" "movl a10,%%eax\n" "movl %%eax,%0\n" :"=g"(value) ); printf("%x\n",value); }
위소스는 정상적으로 수행이 됩니다. 어셈블리어 코드에서 c의 전역변수로 값을 저장하게 되는데요..
Basic inline assembly문장은 __asm__영역에서 여러번 사용해도 상관이 없었지만..
"movl %%eax,%0\n"
:"=g"(value)
이 부분처럼 Extended Inline Assembly 문장을 두번이상 사용하게 되면 오류가 납니다.
따라서 __asm__영역을 다시 잡아서 사용해야 하는데요..
뒤에 생략된 옵션 (: input_registers : clobbered_registers ) 때문에 그런것인지..
아니면 원래 그렇게 설정이 된것인지 알고싶습니다.
http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html
페이지를 참고했습니다.
답변부탁드립니다...
Forums:
[code:1]#include <stdio.h>int
이렇게 하시면 안돼시는 이유가 있나요?
두 번째로 코드 세그먼트에 데이터가 들어가면
나중에 버그를 어떻게 처리하시려구요?
답변 감사합니다... 그런데.....
원래.. Memory to Memory MOV명령은..안되서요..
중간에..변수값은 코드 맨 앞에 JMP가 있어서 괜찮습니다.
메모리 참조명령은 __asm__지시자 안에서 한번만 써야 하는것 같습니다..
댓글 달기