2013-10-14 2 views
3

이 코드했습니다 :GCC 인라인 ASM 입력 변수

void geninterrupt (int x) { 
    __asm__(
    "movb x, %al \n" 
     "movb %al, genint+1 \n" 
     "jmp genint \n" 
    "genint: \n" 
     "int $0 \n" 
    ); 
} 

가 어떻게 geninterrupt()의 인수를 사용 movb 할 수 있습니까?

+0

참조 http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.2 . – dbrank0

답변

2

는 올바르게 제약 필드를 사용해야합니다

void geninterrupt (int x) { 
    __asm__(" movb %[x], %%al \n" 
      " movb %%al, genint+1 \n" 
      " jmp genint \n" 
      "genint: \n" 
      " int $0 \n" 
     : /* no outputs */ 
     : [x] "m" (x) /* use x as input */ 
     : "al" /* clobbers %al */ 
     ); 
} 

Here's a good how-to about GCC inline assemblylink to the relevant GCC documentation을.

편집 : 당신의 GCC가 표시 피연산자를 처리 할 수없는 것 때문에

+0

감사합니다 Carl (이 질문과 팩 (팝) 질문 모두, 오늘 밤 많은 어려움을 겪고 있습니다.). 그러나 잘못된 코드 : asm : 잘못된 피연산자 번호가 % -letter 뒤에 누락되었습니다. –

+0

메이트 !! 또한 두 유용한 링크를 주셔서 대단히 감사합니다 !! :) –

+0

IT WORKS !!!! 대단히 감사합니다. __asm ​​__ ("movb % [x], % al \ n" –

관련 문제