프로그램 세그먼트 접두사
Program Segment PrefixPSP(Program Segment Prefix)는 프로그램 상태를 저장하기 위해 DOS 시스템에서 사용되는 데이터 구조다.CP/M 운영체제의 Zero 페이지를 닮았다.PSP는 다음과 같은 구조를 가지고 있다.
| 오프셋 | 크기 | 내용물 |
|---|---|---|
| 00h-01h | 2바이트(코드) | CP/M-80 유사 종료(항상 INT 20h 포함)[1][2] |
| 02h-03h | 단어(2바이트) | 프로그램에 할당된 메모리를 초과하는 첫 번째 바이트의 세그먼트 |
| 04시 | 바이트 | 내성적이다. |
| 05h-09h | 5바이트(코드) | CP/M-80 유사 DOS 원호 입력 및 프로그램 세그먼트 크기[1][3] |
| 0Ah-0Dh | dword (4바이트) | 이전 프로그램의 주소 종료(이전 INT 22시간) |
| 어-11시 | 드워드 | 이전 프로그램의 주소 끊기(이전의 INT 23h) |
| 12시-15분 | 드워드 | 이전 프로그램의 심각한 오류 주소(이전의 INT 24시간) |
| 16시간-17시간 | 단어 | 상위 PSP 세그먼트(일반적으로 Command).COM - 내부) |
| 18h-2Bh | 20바이트 | 작업 파일 테이블(JFT)(내부) |
| 2Ch–2Dh | 단어 | 환경 세그먼트 |
| 2에-31시간 | 드워드 | 마지막 INT 21h 통화에 대한 SS:SP 입력(내부) |
| 32h-33h | 단어 | JFT 크기(내부) |
| 34시간-37시간 | 드워드 | JFT에 대한 포인터(내부) |
| 38h-3Bh | 드워드 | 이전 PSP에 대한 포인터(DOS 3.3 이상에서 SHARE에 의해서만 사용됨 |
| 3장 3절 | 4바이트 | 내성적이다. |
| 40h-41h | 단어 | 반환할 DOS 버전(DOS 4 이상, DOS 5 이상에서 SETVER를 통해 변경 가능) |
| 42h-4fh | 14바이트 | 내성적이다. |
| 50h-52h | 3바이트(코드) | DOS에 대한 Unix 유사 원호 입력(항상 INT 21h + RETF 포함) |
| 53h-54h | 2바이트 | 내성적이다. |
| 55h-5Bh | 7바이트 | 예약됨(첫 번째 FCB를 확장 FCB로 만드는 데 사용할 수 있음) |
| 5Ch–6Bh | 16바이트 | 미개봉 표준 FCB 1 |
| 6차-7시 | 20바이트 | 미개봉 표준 FCB 2(FCB 1이 열린 경우 덮어쓰기) |
| 80시간 | 1바이트 | 명령줄의 바이트 수 |
| 81-FFH | 127바이트 | 명령줄 테일(0Dh로 종료됨)[4][5] |
PSP는 DOS 프로그램의 명령줄 인수를 얻기 위해 가장 자주 사용된다. 예를 들어, "FO" 명령어.EXE /A /F"는 FOO를 실행한다.'/A'와 '/F' 인수가 있는 EXE.
명령줄 길이에 대한 PSP 항목이 0이 아니고 환경 세그먼트에 대한 포인터가 0000h 또는 FFFFh가 아닌 경우 프로그램은 PSP에서 명령줄을 추출하기 전에 환경 변수 %CMDLINE%에서 명령줄을 먼저 검색해 보아야 한다.이렇게 하면 126자 이상의 명령줄을 애플리케이션에 전달할 수 있다.
PSP의 세그먼트 주소는 프로그램이 실행될 때 DS 레지스터에서 전달된다.또한 나중에 Int 21h 함수 51h 또는 Int 21h 함수 62h를 사용하여 결정할 수 있다.두 기능 모두 레지스터 BX의 PSP 주소를 반환한다.[6]
또는 에서 입니다.오프셋에 로드된 COM 프로그램100h위에 나열된 오프셋을 사용하는 것만으로 PSP를 직접 처리할 수 있다.오프셋000hPSP의 시작을 가리키며,0FFh끝점 등
예를 들어, 다음 코드는 명령줄 인수를 표시한다.
조직화하다100시간 ; .COM - ds를 사용하지 않음 ; INT 21h 하위 기능 9에서 문자열을 종료하려면 '