Bagikan melalui


__asm

Khusus Microsoft

Kata __asm kunci memanggil perakit sebaris dan dapat muncul di mana pun pernyataan C atau C++ legal. Ini tidak dapat muncul dengan sendirinya. Ini harus diikuti dengan instruksi perakitan, sekelompok instruksi yang diapit kurung kurawal, atau, minimal, sepasang kurung kurawal kosong. Istilah "__asm blok" di sini mengacu pada instruksi atau sekelompok instruksi, baik dalam kurung kurawal atau tidak.

Catatan

Dukungan MSVC untuk kata kunci C++ asm Standar terbatas pada fakta bahwa pengkompilasi tidak akan menghasilkan kesalahan pada kata kunci. Namun, asm blok tidak akan menghasilkan kode yang bermakna. Gunakan __asm alih-alih asm.

Tatabahasa

asm-block:
__asm assembly-instruction;Memilih
__asm { assembly-instruction-list};Memilih

assembly-instruction-list:
opt instruksi;perakitan

Keterangan

Jika digunakan tanpa kurung kurawal, __asm kata kunci berarti bahwa sisa baris adalah pernyataan bahasa perakitan. Jika digunakan dengan kurung kurawal, itu berarti bahwa setiap baris antara kurung kurawal adalah pernyataan bahasa perakitan. Untuk kompatibilitas dengan versi sebelumnya, _asm adalah sinonim kecuali __asm opsi /Za pengompilasi (Nonaktifkan ekstensi bahasa) ditentukan.

__asm Karena kata kunci adalah pemisah pernyataan, Anda dapat menempatkan instruksi perakitan pada baris yang sama.

Sebelum Visual Studio 2005, instruksi

__asm int 3

tidak menyebabkan kode asli dihasilkan saat dikompilasi dengan /clr; pengkompilasi menerjemahkan instruksi ke instruksi pemutusan CLR.

__asm int 3 sekarang menghasilkan pembuatan kode asli untuk fungsi tersebut. Jika Anda ingin fungsi menyebabkan titik henti dalam kode Anda dan jika Anda ingin fungsi tersebut dikompilasi ke MSIL, gunakan __debugbreak.

Contoh

Fragmen kode berikut adalah blok sederhana __asm yang diapit kurung kurawal:

__asm {
   mov al, 2
   mov dx, 0xD007
   out dx, al
}

Atau, Anda dapat menempatkan __asm di depan setiap instruksi perakitan:

__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al

__asm Karena kata kunci adalah pemisah pernyataan, Anda juga dapat menempatkan instruksi perakitan pada baris yang sama:

__asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al

Ketiga contoh menghasilkan kode yang sama, tetapi gaya pertama (mengapit __asm blok dalam kurung kurawal) memiliki beberapa keuntungan. Kurung kurawal memisahkan kode rakitan dengan jelas dari kode C atau C++ dan menghindari pengulangan kata kunci yang __asm tidak perlu. Kurung kurawal juga dapat mencegah ambiguitas. Jika Anda ingin menempatkan pernyataan C atau C++ pada baris yang sama dengan __asm blok, Anda harus mengapit blok dalam kurung kurawal. Tanpa kurung kurawal, pengompilasi tidak dapat mengetahui di mana kode perakitan berhenti dan pernyataan C atau C++ dimulai. Terakhir, karena teks dalam kurung kurawal memiliki format yang sama dengan teks MASM biasa, Anda dapat dengan mudah memotong dan menempelkan teks dari file sumber MASM yang ada.

Tidak seperti kurung kurawal di C dan C++, kurung kurawal yang __asm melingkupi blok tidak memengaruhi cakupan variabel. Anda juga dapat menumpuk __asm blok; bersarang tidak memengaruhi cakupan variabel.

END Khusus Microsoft

Lihat juga

Kata kunci
Perakitan Sebaris