Udostępnij za pośrednictwem


MASM dla wersji x64 (ml64.exe)

Program Visual Studio zawiera zarówno 32-bitowe, jak i 64-bitowe wersje oprogramowania MASM (Microsoft Macro Assembler) przeznaczone dla kodu x64. Nazwany ml64.exe to asembler, który akceptuje język asemblera x64. Narzędzia wiersza polecenia MASM są instalowane podczas wybierania obciążenia C++ podczas instalacji programu Visual Studio. Narzędzia MASM nie są dostępne jako oddzielny plik do pobrania. Aby uzyskać instrukcje dotyczące pobierania i instalowania kopii programu Visual Studio, zobacz Instalowanie programu Visual Studio. Jeśli potrzebujesz tylko narzędzi wiersza polecenia, a nie pełnego środowiska IDE, pobierz narzędzia Build Tools for Visual Studio.

Aby użyć ml64.exe w wierszu polecenia, uruchom wiersz polecenia dewelopera dla elementów docelowych x64. Wiersz polecenia dewelopera ustawia wymaganą ścieżkę i inne zmienne środowiskowe. Aby uzyskać informacje na temat uruchamiania wiersza polecenia dla deweloperów, zobacz Kompilowanie kodu C/C++ w wierszu polecenia.

Aby uzyskać informacje na temat ml64.exe opcji wiersza polecenia, zobacz Ml i ML64 Command-Line Reference (Dokumentacja wiersza polecenia ML i ML64).

Wbudowany asembler lub użycie słowa kluczowego ASM nie jest obsługiwane dla obiektów docelowych x64 ani ARM64. Aby portować kod x86 używający asemblera wbudowanego do x64 lub ARM64, możesz przekonwertować kod na język C++, użyć funkcji wewnętrznych kompilatora lub utworzyć pliki źródłowe języka asemblera. Kompilator języka Microsoft C++ obsługuje funkcje wewnętrzne, aby umożliwić korzystanie z instrukcji specjalnych funkcji, na przykład uprzywilejowanego, skanowania bitowego lub testowania, zakleszczenia itd., w możliwie zbliżony sposób do wielu platform. Aby uzyskać informacje na temat dostępnych funkcji wewnętrznych, zobacz Funkcje wewnętrzne kompilatora.

Dodawanie pliku języka asemblera do projektu Visual Studio C++

System projektu programu Visual Studio obsługuje pliki języka asemblera skompilowane przy użyciu oprogramowania MASM w projektach języka C++. Rozwiązanie MASM w pełni obsługuje pliki źródłowe języka asemblera x64 i kompiluje je w pliki obiektów. Następnie możesz połączyć te pliki obiektów z kodem C++ utworzonym dla obiektów docelowych x64. Jest to jeden ze sposobów przezwyciężenia braku asemblera wbudowanego x64.

Aby dodać plik języka asemblera do istniejącego projektu Visual Studio C++

  1. Wybierz projekt w Eksplorator rozwiązań. Na pasku menu wybierz pozycję Projekt, Skompiluj dostosowania.

  2. W oknie dialogowym Pliki dostosowywania kompilacji visual C++ zaznacz pole wyboru obok pozycji masm(.targets,.props). Wybierz przycisk OK , aby zapisać wybór i zamknąć okno dialogowe.

  3. Na pasku menu wybierz pozycję Projekt, Dodaj nowy element.

  4. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Plik C++ (.cpp) w środkowym okienku. W kontrolce Edytowanie nazwy wprowadź nową nazwę pliku, która ma .asm rozszerzenie zamiast .cpp. Wybierz pozycję Dodaj , aby dodać plik do projektu i zamknąć okno dialogowe.

Utwórz kod języka asemblera w dodanym .asm pliku. Podczas kompilowania rozwiązania asembler MASM jest wywoływany w celu utworzenia .asm pliku w pliku obiektu, który jest następnie połączony z projektem. Aby ułatwić dostęp do symboli, zadeklaruj funkcje asemblera tak jak extern "C" w kodzie źródłowym języka C++, zamiast używać konwencji dekoracji nazw języka C++ w plikach źródłowych języka asemblera.

dyrektywy specyficzne dla ml64

Następujące dyrektywy specyficzne dla ml64 można użyć w kodzie źródłowym języka asemblera, który jest przeznaczony dla x64:

Dyrektywa PROC została również zaktualizowana do użytku z ml64.exe.

Tryb adresu 32-bitowego (zastępowanie rozmiaru adresu)

Program MASM emituje przesłonięć rozmiar adresu 0x67, jeśli operand pamięci zawiera rejestry 32-bitowe. Na przykład następujące przykłady powodują emitowanie przesłonięcia rozmiaru adresu:

mov rax, QWORD PTR [ecx]
mov eax, DWORD PTR [ecx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10d+0100h]
prefetch [eax]
movnti rax, QWORD PTR [r8d]

MasM zakłada, że adresowanie 64-bitowe, jeśli 32-bitowe przemieszczenie pojawia się samodzielnie jako operand pamięci. Obecnie nie ma obsługi adresowania 32-bitowego z takimi operandami.

Na koniec mieszanie rozmiarów rejestrów w operandie pamięci, jak pokazano w poniższym kodzie, generuje błąd.

mov eax, DWORD PTR [rcx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10+0100h]

Zobacz też

Microsoft Macro Assembler — dokumentacja