Saya membaca beberapa kode emulator dan saya telah membalas sesuatu yang sangat aneh:
switch (reg){
case 'eax':
/* and so on*/
}
Bagaimana ini mungkin? Saya pikir Anda hanya bisa switch
pada tipe integral. Apakah ada beberapa tipuan makro yang sedang terjadi?
int
, jadi legal. Namun, nilai konstanta multi-karakter ditentukan oleh implementasi, jadi kode mungkin tidak berfungsi seperti yang diharapkan pada compiler lain. Sebagai contoh, eax
mungkin 0x65
, 0x656178
, 0x65617800
, 0x786165
, 0x6165
, atau sesuatu yang lain.
'eax' != 'ebx'
, tentu saja, itu hanya gagal satu atau dua contoh Anda. Meskipun mungkin ada beberapa kode di suatu tempat yang berlaku *(int*)("eax") == 'eax'
, dan karena itu gagal sebagian besar contoh Anda.
'eax'
mungkin membandingkan sama dengan 'ebx'
atau dengan 'ax'
, dan pernyataan sakelar tidak akan berfungsi sebagaimana mestinya.
'eax'
dan itu menghitung nilai integer konstan