Q&A

  • asm..어떻게 분석을 해야하는지..
입사하구 처음으로 소스를 분석해서 플로우챠트를 만드는걸
하게되었습니다.
근데..이것이 무슨뜻인지 모르겠습니다.. 흑흑
도움말을 보면 대충 감은 잡히는데 그래두 정리하려니.. 난감하여..
맞는지두 모르겠구..

    function GetPort(port:WORD):String;
      var Ret:WORD;
      begin
            asm
                PUSH DS;
                XOR DX,DX;
                MOV DX ,port;
                IN AL,DX ;
                MOV Ret , AX;
                POP DS;
            end;
           GetPort := Format('%d',[Ret and $00ff]);
      end;
아시는 분은 도와주시길..
2  COMMENTS
  • Profile
    최용일 2003.12.04 00:16
    안녕하세요. 최용일입니다.

    포트억세스 하는 어셈블리 소스네요...

    PUSH DS;   // DS(Data Segment)를 저장한다.
    XOR DX, DX; // DX레지스터를 클리어한다.=>DX에 0 대입
    MOV DX, Port; // DX에 Port값을 넣는다(DX=>포트번호)
    IN AL, DX; // DX에 셋팅된 포트에서 8비트 값을 읽어 AL레지스터에 저장한다.
    MOV Ret, AX; // AX레지스터의 값을 Ret에 넣는다. (AX의 하위바이트인 AL레지스터에는 포트에서 읽어온 값이 들어있습니다. 상위바이트인 AH에는 뭐가 들어있는지 알수 없습니다. 밑에 소스 보니까 어차피 상위바이트는 마스킹 처리해서 안쓰긴 하지만...)
    POP DX; DS(Data Segment)를 복원한다.

    GetPort := Format('%d',[Ret and $00ff]); //포트에서 읽어온 값을 문자열로 표현하여 리턴한다.

    그러니까 소스는 파라매터 Port에 저장된 포트번호를 억세스해서 한바이트 읽어서 Ret에 집어넣고 숫자를 문자열로 변경해서 돌려주는 함수입니다.

    ^^ 항상 즐코하세요...

  • Profile
    윤혜정 2003.12.04 19:03