SPAN class=postbodytest.c 에 다음과 같은 함수가 있습니다. br //SPAN TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0 TBODY TR TDSPAN class=genmedB코드:/B/SPAN/TD/TR TR TD class=codeint a(void) br /{ br /nbsp;return(0); br /}/TD/TR/TBODY/TABLESPAN class=postbodybr /br /test.s 에서 어셈블리로 a함수를 호출하려면 어떻게 해야 할까요? br /br /1번: br //SPAN TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0 TBODY TR TDSPAN class=genmedB코드:/B/SPAN/TD/TR TR TD class=code... br /call a br /.../TD/TR/TBODY/TABLESPAN class=postbodybr /br /2번: br //SPAN TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0 TBODY TR TDSPAN class=genmedB코드:/B/SPAN/TD/TR TR TD class=code... br /call _a br /.../TD/TR/TBODY/TABLESPAN class=postbodybr /br /오랜기간 어셈블리를 접해보지 않으신분이라면 2번의 경우는 말도 안된다고 예기할수도 있을법합니다. 왜 2번 보기를 보여야 하는지는 설명하지 않겠습니다. br /br /간략히 이를 매우 명확히 명시하기 위해서 다음과 같이 하는 경우를 보셨을겁니다. br /br /test.c br //SPAN TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0 TBODY TR TDSPAN class=genmedB코드:/B/SPAN/TD/TR TR TD class=codeint a(void) __asm__(myasm_func_a); br /br /int a(void) br /{ br /nbsp;return(0); br /}/TD/TR/TBODY/TABLESPAN class=postbodybr /br /test.s br //SPAN TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0 TBODY TR TDSPAN class=genmedB코드:/B/SPAN/TD/TR TR TD class=code... br /call myasm_func_a br /.../TD/TR/TBODY/TABLESPAN class=postbodybr /br /br /br /br /이것은 함수에만 해당하는 경우가 아닙니다. 아래는 이를 종합적으로 표현하고자 만들어본 예제입니다. 이것은 매우 유용한것이니 꼭 모두 한번쯤 직접 해보시기를 권합니다. br /혹시나 하는 마음에 예기하지만 이것은 Linux환경에서 gcc, gas를 사용한 예제입니다. br /br /test.c br //SPAN TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0 TBODY TR TDSPAN class=genmedB코드:/B/SPAN/TD/TR TR TD class=code#include lt;stdio.hgt; br /int g_my_val __asm__(myasm_dword_val) = 0; br /extern void test_test_test(void) __asm__(test); br /int a(void) __asm__(myasm_func_a); br /int a(void) br /{ br /nbsp;(void)fprintf(stdout, hello %#x\n, g_my_val); br /nbsp;return(0); br /} br /int main(void) br /{ br /nbsp;test_test_test(); br /nbsp;return(0); br /}/TD/TR/TBODY/TABLESPAN class=postbodybr /br /asm.s br //SPAN TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0 TBODY TR TDSPAN class=genmedB코드:/B/SPAN/TD/TR TR TD class=code.code32 br /.extern myasm_func_a br /.extern myasm_dword_val br /.text br /test: br /.globl test br /movl $0x12345678, myasm_dword_val br /call myasm_func_a br /ret br /# End of source/TD/TR/TBODY/TABLESPAN class=postbodybr /br /Makefile br //SPAN TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0 TBODY TR TDSPAN class=genmedB코드:/B/SPAN/TD/TR TR TD class=codeall: test br /clean: ; rm -f test test.o asm.o br /test: test.o asm.o ; gcc -o $@ $^ br /test.o: test.c ; gcc -Wall -Werror -c -o $@ $lt; br /asm.o: asm.s ; as -o $@ $lt;/TD/TR/TBODY/TABLESPAN class=postbodybr //SPAN
크리에이티브 커먼즈 라이센스
Creative Commons License
2007/06/01 23:51 2007/06/01 23:51
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/139

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/139

트랙백 주소 :: http://blog.minzkn.com/trackback/139

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/139

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/139

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/139
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/139