Mengakses Data C atau C++ di Blok __asm
Khusus Microsoft
Kenyamanan besar rakitan sebaris adalah kemampuan untuk merujuk ke variabel C atau C++ berdasarkan nama. Blok __asm
dapat merujuk ke simbol apa pun, termasuk nama variabel, yang berada dalam cakupan tempat blok muncul. Misalnya, jika variabel var
C berada dalam cakupan, instruksi
__asm mov eax, var
menyimpan nilai var
dalam EAX.
Jika anggota kelas, struktur, atau serikat memiliki nama unik __asm
, blok hanya dapat merujuknya menggunakan nama anggota, tanpa menentukan variabel atau typedef
nama sebelum operator periode (.). Namun, jika nama anggota tidak unik, Anda harus menempatkan variabel atau typedef
nama segera sebelum operator periode. Misalnya, jenis struktur dalam contoh berbagi same_name
berikut sebagai nama anggota mereka:.
Jika Anda mendeklarasikan variabel dengan jenis
struct first_type hal;
struct second_type oat;
semua referensi ke anggota same_name
harus menggunakan nama variabel karena same_name
tidak unik. Tetapi anggota weasel
memiliki nama yang unik, sehingga Anda hanya dapat merujuknya menggunakan nama anggotanya:
// InlineAssembler_Accessing_C_asm_Blocks.cpp
// processor: x86
#include <stdio.h>
struct first_type
{
char *weasel;
int same_name;
};
struct second_type
{
int wonton;
long same_name;
};
int main()
{
struct first_type hal;
struct second_type oat;
__asm
{
lea ebx, hal
mov ecx, [ebx]hal.same_name ; Must use 'hal'
mov esi, [ebx].weasel ; Can omit 'hal'
}
return 0;
}
Perhatikan bahwa menghilangkan nama variabel hanyalah kenyamanan pengkodian. Instruksi rakitan yang sama dihasilkan apakah nama variabel ada atau tidak.
Anda dapat mengakses anggota data di C++ tanpa memperhatikan pembatasan akses. Namun, Anda tidak dapat memanggil fungsi anggota.
END Khusus Microsoft
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk