Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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