어셈 구문해석에 대한 질문 ...

linux777의 이미지

간단한 어셈 소스인데 ... 질문 입니다 ....

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"

부분을 이해하기 쉽게 설명부탁드려요 ..

opt의 이미지

static __inline void 
outb (unsigned char value, unsigned short int port) 
{ 
  __asm__ __volatile__ ("outb %b0,%w1": :"a" (value), "Nd" (port)); 
}

AT&T inline asm syntax 에 대해 저도 잘 모릅니다.
대충 보니.....
outb 는 out을 byte 단위로 하겠다는 소리고,
b0은 첫번째 인자가 byte (unsigned char 니까),
w1은 두번째 인자가 word (unsigned short 이니까)
라는 소리 같습니다.

("outb %b0,%w1": /* 비어있다 */ :"a" (value), "Nd" (port)); 

는 %w1"뒤에가 비어있으니 출력값이 없고,
입력값으로는 value와 port 를 받아들인다는 소리 같네요.

결국 outb value, port 형태가 되니....
원하는 포트에 원하는 값을 집어넣는 간단한 inline asm 같습니다.

dos 환경의 고전적인 outb() 를 구현하기 위한 인라인 함수가 아닌가 싶네요.

----
LUX ET VERITAS | Just for Fun!