이 코드했습니다 :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
할 수 있습니까?
이 코드했습니다 :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
할 수 있습니까?
는 올바르게 제약 필드를 사용해야합니다
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 assembly과 link to the relevant GCC documentation을.
편집 : 당신의 GCC가 표시 피연산자를 처리 할 수없는 것 때문에
감사합니다 Carl (이 질문과 팩 (팝) 질문 모두, 오늘 밤 많은 어려움을 겪고 있습니다.). 그러나 잘못된 코드 : asm : 잘못된 피연산자 번호가 % -letter 뒤에 누락되었습니다. –
메이트 !! 또한 두 유용한 링크를 주셔서 대단히 감사합니다 !! :) –
IT WORKS !!!! 대단히 감사합니다. __asm __ ("movb % [x], % al \ n" –
참조 http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.2 . – dbrank0