Bagikan melalui


Format instruksi MASM

Sintaks

Instruksi ditulis dalam kode sumber sesuai dengan sintaks ini:

awalandaftar operand mnemonic

Untuk informasi tentang definisi instruksi, opsi, dan pengodean, lihat Manual Pemrograman Produsen Prosesor. Beberapa opsi instruksi dan instruksi mungkin tidak didukung oleh Microsoft Macro Assembler.

Awalan

Anda dapat mengawali beberapa instruksi dengan kata kunci yang mengatur opsi tentang bagaimana instruksi dikodekan. Kata REPkunci , , REPEREPZ, REPNE, dan REPNZ digunakan dengan instruksi string untuk melakukan memcpy atau strlen jenis operasi dalam satu instruksi. Kata LOCK kunci membuat operasi tertentu pada operand memori atom. Anda dapat menggabungkannya dengan XACQUIRE kata kunci dan XRELEASE untuk melakukan Hardware Lock Elision (HLE) pada prosesor yang didukung, yang memungkinkan paralelisme transaksional yang lebih besar dalam kasus tertentu.

Awalan yang tersisa mengontrol bagaimana instruksi AVX dikodekan. Instruksi AVX dikodekan menggunakan VEX awalan, yang muncul sebelum opcode. Ini mengambil tempat awalan instruksi byte tertentu dan byte prospek opcode. Banyak instruksi AVX juga merupakan instruksi AVX-512, yang dikodekan menggunakan EVEX awalan yang mendukung lebih banyak opsi. MASM mencoba mengodekan instruksi sekode mungkin, tetapi kata kunci ini memungkinkan kontrol lebih besar atas pengodean mana yang akan digunakan dengan instruksi tertentu. Formulir ini juga digunakan untuk memaksa pembuatan formulir instruksi AVX yang diperkenalkan setelah instruksi AVX-512 yang sesuai. Misalnya, vex vpdpbusd menentukan bentuk AVX-VNNI dari VPDPBUSD instruksi daripada formulir AVX512-VNNI. Ketika instruksi AVX muncul tanpa kata kunci awalan eksplisit, pengodean yang dipilih tergantung pada pengaturan pengodean AVX saat ini. Direktif OPTION AVXENCODING memungkinkan Anda mengubah pengaturan ini.

Opsi VEX2, , VEXVEX3, dan EVEX tersedia di Visual Studio 2019 versi 16.7 dan yang lebih baru.

Kata kunci Penggunaan
REP Ulangi operasi string dengan hitungan dalam (E)CX.
REPE
REPZ
Ulangi operasi string saat perbandingan sama, dibatasi oleh hitungan dalam (E)CX.
REPNE
REPNZ
Ulangi operasi string saat perbandingan tidak sama, dibatasi oleh hitungan dalam (E)CX.
LOCK Lakukan operasi secara atomik pada operand memori.
XACQUIRE Mulai transaksi HLE, paling sering digunakan dengan LOCK awalan.
XRELEASE Selesaikan transaksi HLE, paling sering digunakan dengan LOCK awalan.
VEX Mengodekan instruksi AVX menggunakan VEX awalan.
VEX2 Mengodekan instruksi AVX menggunakan awalan 2 byte VEX .
VEX3 Mengodekan instruksi AVX menggunakan awalan 3 byte VEX .
EVEX Mengodekan instruksi AVX menggunakan awalan EVEX .

Mnemonic

Mnemonic mengidentifikasi instruksi tertentu, yang menentukan awalan dan pola operand yang diizinkan.

Daftar operand

Sebagian besar instruksi menggunakan daftar operand untuk menentukan operand sumber dan tujuan eksplisit ke instruksi. Daftar operan mungkin berisi referensi memori, register, dan nilai konstanta. Setiap instruksi hanya memungkinkan jenis operand tertentu untuk muncul di setiap posisi dalam daftar operand. Kecuali untuk MOVS instruksi dan CMPS , hanya salah satu operand yang mungkin menjadi referensi memori; semua operand lainnya harus mendaftarkan referensi atau konstanta.

Opsi AVX-512

Beberapa instruksi AVX-512 memungkinkan lebih banyak opsi untuk ditentukan. Opsi ini adalah: masking, nol-masking, siaran tertanam, pembulatan tertanam, dan penindasan pengecualian.

Masking memungkinkan operasi diterapkan hanya ke elemen vektor yang dipilih. Opsi ini dikontrol dengan menempatkan register mask dari {k1} ke {k7} setelah operand tujuan. Jika register mask diikuti oleh {z}, semua elemen tujuan yang tidak dipilih diatur ke nol. Alternatif ini dikenal sebagai zero-masking.

Siaran Tertanam memungkinkan nilai skalar dalam memori diterapkan ke semua elemen vektor. Opsi ini diaktifkan dengan menambahkan ukuran elemen dan kata kunci BCST ke operand memori, yang mirip dengan penggunaan PTR untuk referensi memori normal.

Pembulatan Tertanam mengontrol mode pembulatan untuk instruksi floating-point individual, tanpa harus mengatur dan mengatur ulang mode pembulatan global. Ini diaktifkan dengan mengikuti instruksi dengan mode pembulatan yang diapit kurung kurawal. Ketika diaktifkan, ini juga menekan semua pengecualian hanya untuk instruksi tersebut. Instruksi floating-point yang tidak dibulatkan juga dapat menekan semua pengecualian menggunakan opsi serupa.

  ; Examples of AVX-512 options
  vaddps xmm1 {k1}, xmm2, xmm3            ; merge-masking
  vsubps ymm0 {k4}{z}, ymm1, ymm2         ; zero-masking
  vmulps zmm0, zmm1, dword bcst scalar    ; embedded broadcast
  vdivps zmm0, zmm1, zmm2 {rz-sae}        ; embedded rounding
  vmaxss xmm1, xmm2, xmm3 {sae}           ; suppress all exceptions

Mode pembulatan

Mode Efek
rn-sae Bulat ke terdekat, ikatan ke genap, tekan semua pengecualian.
rz-sae Bulat ke arah nol, tekan semua pengecualian.
rd-sae Bulatkan ke bawah (menuju tak terbatas negatif), tekan semua pengecualian.
ru-sae Bulatkan ke atas (menuju tak terbatas positif), tekan semua pengecualian.
sae Tekan semua pengecualian (tidak diperlukan pembulatan).

Lihat juga

Referensi Perakitan Makro Microsoft
Panduan Pemrograman Produsen Prosesor