입사하구 처음으로 소스를 분석해서 플로우챠트를 만드는걸
하게되었습니다.
근데..이것이 무슨뜻인지 모르겠습니다.. 흑흑
도움말을 보면 대충 감은 잡히는데 그래두 정리하려니.. 난감하여..
맞는지두 모르겠구..
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;
아시는 분은 도와주시길..
포트억세스 하는 어셈블리 소스네요...
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에 집어넣고 숫자를 문자열로 변경해서 돌려주는 함수입니다.
^^ 항상 즐코하세요...