[ASM] 프로그램 진입을 위한 원거리 프로시저
글쓴이: gurumong / 작성시간: 월, 2010/08/16 - 8:22오후
IBM PC 어셈블리 프로그래밍 (PETER ABEL저, 5판) 책을 보고있습니다
첫번째 EXE 코드를 설명하기에 MAIN 프로시저는 프로그램의 진입점이기 때문에 원거리(FAR)여야 한다고 설명하고 있습니다
그런데 아래의 두번째 COM프로그램의 코드를 설명할때에는 책에서 설명한 이 원칙이 지켜지지 않고
그냥 코드의 레이블을 진입점으로 사용하고 있습니다
이런 차이를 어떻게 이해 해야 할까요?
PAGE 60,132 TITLE A04ASM1 Segments for an .EXE Program ; ------------------------------------------ STACK SEGMENT PARA STACK 'Stack' STACK ENDS ; ------------------------------------------ DATA SEGMENT PARA 'Data' DATA ENDS ; ------------------------------------------ CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ;프로그램 진입점을 위한 원거리 프로시저!! ... ... ... MAIN ENDP CODESEG ENDS END MAIN ;진입점을 MAIN프로시저로 지정!
TITLE A05COM2 COM program to move and add data .MODEL TINY .CODE ORG 100H BEGIN: JMP MAIN ;프로시저가 아닌 특정 코드의 레이블을 진입지점으로... ;----------------------------------------------- FLDD DW 215 FLDE DW 125 FLDF DW ? ;----------------------------------------------- MAIN PROC NEAR MOV AX,FLDD ADD AX,FLDE MOV FLDF,AX MOV AX,4C00H INT 21H MAIN ENDP END BEGIN ;진입점을 BEGIN 레이블 주소로 지정!
Forums:
정답은 아니지만
정답은 아니지만 아마 com과 exe의 실행 방식의 차이때문인 것 같습니다.
com은 하나의 세그먼트에 넣기 때문에 로더로부터 실행 될 때 같은 세그먼트내의 오프셋 이동으로 인하여 near이어도 되고 exe는 여러 세그먼트를 이용 할 수도 있기때문에 로더의 재배치에 의해 main함수가 저장된 세그먼트와 엔트리 포인트의 세그먼트 사이에 이동이 필요 할 수도 있기 때문에 far로 main을 작성 한 것 같습니다.
정답은 아닙니다만 아마도 그런 이유때문에 그렇게 작성한 것 같습니다.
완벽한 정답은 아랫분께서 말씀해 주시겠죠
댓글 달기