Ini adalah pertanyaan yang sangat menarik. Ada jutaan set instruksi di luar sana, tapi hanya segelintir yang sangat umum digunakan.
Hal pertama yang saya lihat adalah asal dan tujuan penggunaan. Jika Anda menduga itu dirancang di Amerika Serikat, Anda akan terutama akan menargetkan prosesor dengan lembar data tersedia dalam bahasa Inggris, misalnya. Jika itu dirancang di Asia, maka ada sejumlah prosesor yang mereka gunakan untuk massa diproduksi perangkat yang insinyur AS jarang melihat. Bahkan Eropa memiliki beberapa prosesor yang lebih umum daripada yang lain.
Saya kemudian akan melihat ukuran dan fungsionalitas kode (dengan asumsi Anda tahu apa yang dilakukan kode ini sampai taraf tertentu). Jika itu beberapa megabyte kode, Anda bisa cukup diskon prosesor 8 bit yang paling tertanam dan mulai melihat perangkat yang lebih besar dengan memori eksternal. Jika beberapa kilobyte atau kurang, maka Anda ingin fokus pada perangkat yang lebih kecil dan lebih murah. Jika fungsionalitasnya sederhana, mungkin itu adalah kode untuk prosesor empat bit.
Pada titik ini, ada baiknya melihat struktur memori. Mungkin ada bagian program dan bagian data minimal. Jika ini adalah file biner (dibandingkan dengan intel hex atau catatan motorola) maka Anda hanya memiliki sedikit wawasan tentang di mana dalam memori, sejumlah data ditempatkan. Editor hex mungkin menunjukkan beberapa pola. Jika itu datang dalam format rekaman hex atau s, Anda mungkin memiliki informasi lebih lanjut tentang struktur memori prosesor yang dimaksudkan. Beberapa prosesor mengatur ulang di lokasi memori program 0, beberapa di lokasi memori tertinggi. Program mungkin menyertakan nilai awal EEPROM di lokasi memori yang terpisah. Jika ini dimaksudkan untuk prosesor yang aman (seperti yang digunakan dalam perbankan) bahkan mungkin memiliki kunci keamanan untuk lokasi memori yang aneh.
Bergantung pada bahasa yang diprogramkan, Anda mungkin memiliki beberapa petunjuk tambahan. Jika diprogram dalam C atau bahasa prosedural yang serupa, maka fungsi akan hampir selalu dimulai dengan urutan instruksi untuk menyimpan register tertentu ke stack (banyak dorongan) kemudian tepat sebelum mengembalikan banyak muncul untuk mengembalikan nilai asli dari stack . Jika Anda dapat melakukan pengenalan pola, Anda akan menemukan banyak dari rangkaian ini di seluruh, dan mungkin dapat menentukan instruksi mana yang paling mungkin instruksi push / pop, kembali, dll, yang dapat mempersempit pilihan Anda sedikit.
Jika itu adalah perangkat yang tertanam dengan interupsi, itu mungkin memiliki tabel vektor interupsi, yang akan terlihat seperti sekelompok lompatan ke lokasi memori yang berbeda semua dalam satu blok besar, mungkin di lokasi yang nyaman (alamat 0x ??? 0 misalnya) . Tabel lompat digunakan di tempat lain untuk hal-hal lain juga, tetapi jika Anda dapat menemukan urutan instruksi yang terlihat sama kecuali untuk apa alamat untuk melompat, Anda mungkin dapat menyimpulkan seperti apa instruksi lompatan itu, dan lagi-lagi mempersempit pilihan Anda ke bawah.
Pada titik itu, saya akan mulai dengan arsitektur prosesor yang paling umum dan melihat apakah ada yang berkorelasi. x86, arm, mips, 8051, avr, pic, powerpc, Z80, 68k, 6502, dll, dll, dll. Ada daftar prosesor dan set instruksi umum - setidaknya di dunia berbahasa Inggris - yang mungkin terbukti membantu.
Saya tidak mengetahui adanya alat otomatis yang akan membantu dengan ini, tapi MAME mengemulasi besar banyak arsitektur prosesor, dan salah satu metode yang mungkin adalah dengan menjalankan kode melalui sejumlah prosesor dan menonton register untuk melihat apakah klik sesuatu sesuai dengan apa yang Anda tahu tentang desain.