Windows NT 대 한 32 비트 플랫 메모리 모델 MASM 코드

만료된 KB 콘텐츠 고지 사항

이 문서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 작성되었습니다. 따라서 이 문서는 “있는 그대로" 제공되며 더 이상 업데이트되지 않습니다.

요약

Microsoft 매크로 어셈블러 (MASM) 버전 6.0 a 패치와 및 차후의 지원 32 비트 플랫 메모리 생성을 통해 코드 모델은. 지시문을 플랫 모델입니다. 해당 KERNEL32 CVTOMF 및 LINK32 유틸리티와 결합 합니다. LIB 라이브러리 배포 Windows NT 소프트웨어 개발 키트 (SDK) 또는 링크 유틸리티 및 해당 KERNEL32. LIB 라이브러리와 Microsoft Visual C++ 대 한 Windows NT 배포 MASM Windows NT 환경에 대 한 32 비트 플랫 메모리 모델 응용 프로그램을 생성할 수 있습니다.


버전 6.0 MASM _stdcall 규칙을 제대로 지원 하지 않는 Windows NT 환경에 대 한 응용 프로그램 생성에 사용할 수 없습니다.

자세한 내용

해당 파일에 일부 MASM 코드 이름은 FLAT32입니다. ASM 여기서 진입점은 _start, Windows NT 환경에 대 한 32 비트 플랫 메모리 모델 응용 프로그램에이 코드를 조립 하는 다음 네 단계로 수행 합니다.

  1. 이전에 코드의 위치는.386 또는.486 지시문은. 모델 플랫, stdcall 지시문을 코드 및 데이터 세그먼트를 32 비트 플랫 메모리 모델 응용 프로그램에 대해 제대로 초기화 되었는지 확인 합니다.
  2. 다음 명령을 사용 하 여 소스 코드를 조합 하는.
    ML /c flat32.asm입니다.
    /C 어셈블러 옵션에서 MASM 함께 제공 되는 16 비트 링커 호출 MASM은을 방지 합니다.
  3. MASM 6.0 a 패치와 또는 6.0b에 대 한 Windows NT SDK와 함께 제공 되는 CVTOMF 유틸리티를 사용 하 여 생성 된 개체 파일 형식 OMF에서에서 COFF 형식으로 변환 하려면. 명령이 아래와 같습니다.
    cvtomf flat32.obj
    이 단계는 MASM 버전 6.1 사용 하 여 불필요 한 형식이 COFF 개체 파일을 생성 합니다 때문에 /coff 스위치를 사용 하면 이후.
  4. 개체 모듈에 연결 된 Visual C++ 대 한 Windows NT 제공 하는 링크 또는 Windows NT SDK 유틸리티와 함께 제공 되는 LINK32 유틸리티를 사용 합니다. KERNEL32에 대 한 경로 지정 합니다. LIB입니다. 명령줄은 다음과 같습니다.
    link32 -subsystem:console -entry:_start -out:flat32.exe flat32.obj kernel32.lib
    기호화 된 디버깅 정보가 포함 된 실행 모듈 만들려면 스위치-Zi 어셈블러 옵션 (단계 2)를 추가 하 고 링커 명령줄에 다음 스위치를 추가:-디버그: 전체-debugtype: cv.
LINK32 Windows NT sdk에서를 사용 하는 INCLUDELIB 지시문을 사용 하지 않는 고 MASM 코드에서 END 지시문 뒤 원본 레이블 배치 하지 마십시오. Windows NT SDK와 함께 제공 되는 LINK32 유틸리티 개체 파일에서 기본 라이브러리 이름을 무시 하 고 필요한-항목 스위치를 링커 명령줄 시작 주소를 지정 하려면.


Windows NT MASM 버전 6.0 a 패치와 및 6.0b와 함께 제공 된 MLX 드라이버를 지원 하지 않습니다. 또한, Windows NT MS-DOS 확장 MASM 버전 6.1 및 6.1a를 지원 하지 않습니다. 따라서 Windows NT 실행 하는 컴퓨터에서 다른 단계를 실행 하는 동안 MS-DOS를 실행 하는 컴퓨터에서 어셈블리 단계를 수행 해야 할 수도 있습니다. 또 다른 옵션은 MASM 6.11 버전으로 업그레이드 합니다.


아래의 코드는 "Hello, world" 응용 프로그램의 Windows NT 32 비트 플랫 메모리 모델을 사용 하 여 어셈블러에서 개발 합니다.

샘플 코드

; Assemble options needed: /c
.386
.MODEL flat, stdcall

STD_OUTPUT_HANDLE EQU -11

GetStdHandle PROTO NEAR32 stdcall,
nStdHandle:DWORD

WriteFile PROTO NEAR32 stdcall,
hFile:DWORD, lpBuffer:NEAR32, nNumberOfBytesToWrite:DWORD,
lpNumberOfBytesWritten:NEAR32, lpOverlapped:NEAR32

ExitProcess PROTO NEAR32 stdcall,
dwExitCode:DWORD

.STACK 4096

.DATA

msg DB "Hello, world.", 13, 10
written DW 0
hStdOut DD 0

.CODE
_start:
INVOKE GetStdHandle,
STD_OUTPUT_HANDLE ; Standard output handle
mov hStdOut, eax

INVOKE WriteFile,
hStdOut, ; File handle for screen
NEAR32 PTR msg, ; Address of string
LENGTHOF msg, ; Length of string
NEAR32 PTR written, ; Bytes written
0 ; Overlapped mode

INVOKE ExitProcess,
0 ; Result code for parent process

PUBLIC _start
END

속성

문서 ID: 94314 - 마지막 검토: 2017. 2. 7. - 수정: 1

피드백