간단한 어셈 소스인데 ... 질문 입니다 ....
static __inline void outb (unsigned char value, unsigned short int port) { __asm__ __volatile__ ("outb %b0,%w1": :"a" (value), "Nd" (port)); }
("outb %b0,%w1": :"a" (value), "Nd"
부분을 이해하기 쉽게 설명부탁드려요 ..
AT&T inline asm syntax 에 대해 저도 잘 모릅니다. 대충 보니..... outb 는 out을 byte 단위로 하겠다는 소리고, b0은 첫번째 인자가 byte (unsigned char 니까), w1은 두번째 인자가 word (unsigned short 이니까) 라는 소리 같습니다.
("outb %b0,%w1": /* 비어있다 */ :"a" (value), "Nd" (port));
결국 outb value, port 형태가 되니.... 원하는 포트에 원하는 값을 집어넣는 간단한 inline asm 같습니다.
dos 환경의 고전적인 outb() 를 구현하기 위한 인라인 함수가 아닌가 싶네요.
---- LUX ET VERITAS | Just for Fun!
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
[code:1]static __inline void outb &#
AT&T inline asm syntax 에 대해 저도 잘 모릅니다.
대충 보니.....
outb 는 out을 byte 단위로 하겠다는 소리고,
b0은 첫번째 인자가 byte (unsigned char 니까),
w1은 두번째 인자가 word (unsigned short 이니까)
라는 소리 같습니다.
는 %w1"뒤에가 비어있으니 출력값이 없고,
입력값으로는 value와 port 를 받아들인다는 소리 같네요.
결국 outb value, port 형태가 되니....
원하는 포트에 원하는 값을 집어넣는 간단한 inline asm 같습니다.
dos 환경의 고전적인 outb() 를 구현하기 위한 인라인 함수가 아닌가 싶네요.
----
LUX ET VERITAS | Just for Fun!
댓글 달기