Seperti apa sebenarnya kode mesin saat dijalankan?

21

Ketika kode mesin benar-benar dijalankan oleh perangkat keras dan CPU, seperti apa bentuknya?

Apakah akan terlihat seperti biner, seperti dalam instruksi yang diwakili oleh satu dan nol, atau apakah itu sesuatu yang terdiri dari digit heksadesimal di mana opcodes adalah byte yang disajikan sebagai angka hex yang dapat dipecah kembali menjadi angka biner, seperti bytecode?

Tim Hardly
sumber
24
Apa yang akan Anda lihat adalah kabel, gerbang, dan register yang berkedip pada silikon. Misalnya, visual6502.org/JSSim
Nayuki
4
@Nayuki Saya pikir visualisasi ini luar biasa dan layak dijadikan jawaban!
nalzok
2
Bagiku itu tidak terlihat seperti apa pun
Gayus
3
Itu tidak benar-benar ada pada saat itu benar-benar "dieksekusi". Ini "JIT dikompilasi" oleh perangkat (perangkat keras!) Pada CPU ke mikrokode, yang sebenarnya menginstruksikan CPU!
xuq01
2
Salah satu cara cepat untuk memahami bagaimana komputer menerjemahkan adalah dengan membangunnya dari gerbang logika, saya sangat suka menonton yang dibuat oleh Ben Eater youtube.com/playlist?list=PLowKtXNTBypGqImE405J2565dvjafglHU
Ferrybig

Jawaban:

38

Jawaban terbaik yang bisa saya berikan adalah, itu tidak benar-benar "terlihat" seperti apa pun. Instruksi yang saat ini dijalankan oleh CPU diwakili oleh serangkaian kabel, beberapa di antaranya memiliki tegangan tinggi, beberapa di antaranya memiliki tegangan rendah.

Anda dapat mengartikan tegangan tinggi dan rendah sebagai nol dan satu, tetapi Anda juga dapat menginterpretasikan kelompok tegangan tinggi dan rendah dengan baik sebagai digit heksadesimal, atau sebagai instruksi perakitan seperti ADD $0 $1(yang paling dekat dengan bagaimana CPU mengartikannya). Angka-angka dan mnemonik ini sendiri adalah kemudahan bagi manusia untuk membaca; Secara internal, itu tidak lain adalah tegangan pada kabel.

Dari opsi-opsi ini, biner adalah "paling dekat dengan logam", di mana nol dan yang memetakan langsung ke tegangan tinggi dan rendah pada kabel. Tapi tidak ada yang lain yang salah, dan mereka sering lebih berguna: ada alasan orang melihat hex-dumps executable, tetapi hampir tidak pernah binary-dumps.

Draconis
sumber
Jadi, dapatkah Anda membuka program dalam hex editor, dan apakah byte-byte tersebut diwakili dalam hex translate ke kode mesin biner yang dapat dijalankan oleh tegangan yang ditetapkan ke nol, dan tegangan yang ditetapkan ke satu?
Tim Hardly
4
@TimHardly Yap! Hex lebih mudah dibaca. Majelis, demikian pula, bahkan lebih mudah dibaca, tetapi dapat diterjemahkan secara mekanis ke nol dan satu. Itu sebabnya assembler lebih mudah ditulis daripada kompiler.
Draconis
terima kasih, seluruh pertanyaan ini telah memperluas pengetahuan saya dan membersihkan kebingungan saya.
Tim Hardly
1
@TimHardly Assembler hanya memetakan urutan karakter seperti "NOP" ke serangkaian bit seperti "10010000", berulang-ulang, untuk mengubah file assembly menjadi kode mesin. Opcodes ditentukan oleh CPU, karena itu bagian yang akan benar-benar menggunakannya. Semua komputer yang dapat menjalankan executable yang sama memang memiliki set opcode yang sama; set x86 adalah yang paling umum, dan digunakan di hampir semua PC saat ini. Satu lagi yang umum adalah MIPS, digunakan di sejumlah konsol game.
Draconis
1
@TimHardly Jika pertanyaan Anda adalah, dapatkah assembler bertanya kepada CPU apa opcode-nya untuk instruksi NOP, jawabannya adalah tidak. Assembler sudah harus tahu byte apa yang akan dikeluarkan untuk instruksi sebelum dapat berfungsi. Bahkan, assembler dapat menampilkan program untuk satu prosesor, sementara itu sendiri berjalan pada jenis prosesor yang berbeda.
Tn. Lister
11

"Terlihat seperti" menyiratkan metafora. Jika kita mengambil "apa yang akan terlihat seperti" secara harfiah, itu akan terlihat seperti sepotong silikon terukir mewah yang duduk di motherboard-nya. Jelas metafora adalah tujuannya. Untuk membangun metafora, kita perlu melihat apa itu sebenarnya. Lalu kita bisa membangun metafora yang bisa diterima. Ini agak panjang, tapi untungnya, itu berakhir dengan metafora video untuk Anda.

Kode mesin sebenarnya disimpan dalam memori sebagai bit. Chip memori biasanya DRAM , yang menyimpan bit-bit itu sebagai voltase melintasi kapasitor dan elektron. Keduanya terhubung - sulit untuk berbicara tentang tegangan tanpa elektron. Kadang-kadang nyaman untuk berbicara tentang satu atau yang lain, tetapi memahami bahwa di mana seseorang pergi, yang lain mengikuti.

Perjalanan kode mesin dimulai dengan "ambil." Pola voltase tertentu diterapkan pada kabel chip RAM yang menunjukkan bahwa rangkaian bit khusus ini harus dikirim ke CPU. Mengapa? Tidak tahu, tidak peduli. Biasanya sinyal itu dikirim karena CPU menyelesaikan instruksi terakhir dan meminta yang baru sebagai respons naluriah, seperti anjing yang meminta perlakuan kedua setelah Anda memberinya yang pertama. Proses ini dimulai dengan beberapa tendangan primordial di celana yang disebabkan oleh ketidakstabilan alami dalam CPU. Ketika catu daya menerapkan tegangan konstan ke chip, kenaikan tegangan pada akhirnya menyebabkan CPU meletakkan voltase yang benar pada chip RAM untuk mendapatkan instruksi pertama (saya sedikit menggerakkan lapisan BIOS, karena itu tidak penting untuk ceritanya.

Memori modern mengalirkan data secara paralel. Ini berarti bit yang membentuk kode mesin dibagi menjadi "jalur" (32 atau 64 adalah umum) yang merupakan cara logis untuk mengatakan kabel 32/64 dari RAM ke CPU. Tegangan pada saluran tersebut dinaikkan dan diturunkan sesuai kebutuhan untuk mengirimkannya ke CPU.

Setelah di CPU itu bisa melakukan pekerjaannya. Ini adalah bidang mikroarsitektur , dan ini bisa rumit karena ini benar-benar industri yang bernilai miliaran dolar. Tegangan itu memengaruhi transistor, yang memengaruhi voltase lain, dengan cara yang dapat kami gambarkan sebagai "menambahkan bit" atau "perkalian." Mereka benar-benar semua hanya tegangan yang mewakili bit-bit itu, dengan cara yang sama kita dapat menuliskan string 5 karakter "2 + 2 = 4" pada selembar kertas dan mengatakan kita melakukan matematika. Pensil grafit bukan nomor dua. Itu hanya representasi fisik yang kami gunakan untuk nomor itu.

Jadi itulah yang dilakukan sistem sesungguhnya, pada tingkat yang sangat tinggi. Saya telah melewatkan dengan baik ... hampir semuanya ... tetapi cukup layak untuk dapat kembali ke pertanyaan Anda yang sebenarnya. Akan seperti apa [metaforis] itu?

Ketika itu terjadi, saya pikir Martin Molin mungkin telah membangun metafora terbaik, dengan Mesin Marmernya . Kode mesin dikodekan (dengan tangan) ke beberapa strip Lego Technics di tengah sebagai pasak, daripada tegangan pada kapasitor. Ini lebih seperti EPROM daripada DRAM, tetapi keduanya menyimpan data. Kelereng seperti elektron, digerakkan oleh voltase (atau gravitasi, dalam kasus kelereng). Dan ketika elektron bergerak, mereka menerapkan kekuatan ke gerbang yang melakukan sesuatu.

Mesinnya sederhana, dibandingkan dengan CPU modern, tetapi tidak terlalu buruk, sejauh metafora pergi. Dan itu menarik!

Cort Ammon - Pulihkan Monica
sumber
1
Mesin marmer terlalu sederhana untuk ini dalam video. CPU membutuhkan status.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen Benar. Saya kira jika mesin marmer itu memiliki beberapa gerbang yang membiarkannya mengangkat tuas secara otomatis alih-alih Marin harus membaliknya, itu akan lebih dekat.
Cort Ammon - Reinstate Monica
Terima kasih! Mirip dengan pertanyaan yang saya ajukan pada jawaban di atas yang satu ini, apakah kode assembly yang dirakit akan dianggap sebagai kode mesin yang diterjemahkan ke dalam voltase dan yang lainnya?
Tim Hardly
@TimHardly Menggunakan satu-satunya makna untuk "assembled," "Assembly," dan "Machine Code," Produk assembling Assembly didefinisikan sebagai kode mesin (jadi ya, itu bisa dianggap sebagai =)). Sesuatu yang mungkin membantu adalah bahwa baik kode perakitan dan mesin dianggap sebagai konsep "logis", lebih dekat dengan konsep matematika "2 + 2 = 4" dan lebih jauh dari grafit di atas kertas di mana persamaan tersebut ditulis. Kode assembly / mesin adalah kode assembly / mesin apakah itu disimpan pada disk magnetik, ditulis pada selembar kertas, atau disimpan dalam kapasitor dalam DRAM.
Cort Ammon - Reinstate Monica
1
Kalau boleh jadi filosofis, kode mesin adalah kode mesin karena kita memperlakukannya seperti kode mesin. Kami menganggapnya sebagai kode mesin. Saya bisa mengarahkan CPU pada byte yang menggambarkan suara dalam format .wav, dan memang akan menjalankannya sebagai kode mesin. Eksekusi yang dihasilkan kemungkinan tidak akan melakukan sesuatu yang berguna (karena suara itu tidak dibangun menjadi kode mesin), dan itu mungkin berhenti, tetapi itu bisa dieksekusi.
Cort Ammon - Kembalikan Monica
10

Lihat video ini , khususnya 1:00 hingga 1:17. Seperti itulah tepatnya ketika sebuah program berjalan di komputer. Dua baris lampu menunjukkan isi saat ini dari register alamat dan register data. PDP-11 tidak memiliki register instruksi, tetapi jika ada satu dan ada lampu di bagian depan untuk menunjukkan isinya, itu akan terlihat hampir sama. 16 lampu - beberapa dari mereka menyala, beberapa dari mereka mati.

Jika Anda benar-benar menyukai lampu berkedip, Anda bisa memiliki lebih banyak lampu untuk menunjukkan isi saat ini dari enam register, penunjuk tumpukan, penghitung program ... untuk 32768 lampu selanjutnya Anda bisa memiliki lampu untuk setiap bit cache. Anda bahkan dapat memiliki cahaya untuk setiap bit memori ... tapi itu benar-benar akan banyak lampu.

Ini adalah PDP11-70 yang beroperasi pada 15,2 MHz, dan setiap instruksi membutuhkan sekitar 1,5 mikrodetik untuk dijalankan. Mata manusia dapat mendeteksi perubahan hingga 1/10 detik, dan pada saat itu, PDP-11 dapat menjalankan 60.000 instruksi. Pada dasarnya, semuanya kabur.

JavaLatte
sumber
Wow, itu contoh yang bagus, saya pernah melihat orang lain menyukainya, sesuatu di sepanjang garis di mana Anda dapat melihat lampu dan hal-hal lainnya. youtube.com/watch?v=yOyaJXpAYZQ
Tim Hardly
6

Perancang perangkat keras menerapkan dan menguji (dan menguji dan menguji) prosesor sebenarnya menggunakan model visual untuk melihat apa yang sedang dilakukan desain mereka. Sebagian besar (jika tidak semua) alat simulasi HDL menampilkan tampilan gelombang dari semua register dan kabel untuk memudahkan proses debug. Tangkapan layar di bawah (diambil dari sini ) menunjukkan gelombang ini dari simulator VCS untuk prosesor RISC-V yang menjalankan beberapa instruksi.

Gelombang DVE untuk RISC-V

Ini adalah contoh yang cukup sederhana yang menunjukkan sebagian kecil dari logika yang terlibat dalam desain prosesor penuh. Anda bisa membuka tampilan ini untuk seluruh prosesor dan menonton data menyebar melalui logika. Jika Anda ingin melihat kode mesin berjalan, seperti yang Anda sebutkan, Anda bisa melihat gelombang untuk register instruksi atau bus yang digunakan prosesor untuk membaca instruksi dari memori. Sebagian besar pemirsa gelombang memiliki opsi tampilan fleksibel untuk bus dan register yang memungkinkan Anda menampilkan nilainya sebagai biner, hex, oktal, dan bahkan sebagai label enum. Dalam beberapa, Anda bahkan dapat menentukan fungsi Anda sendiri untuk memetakan pola bit melakukan nilai yang ditampilkan.

Perlu dicatat bahwa ini hanyalah representasi dari simulasi prosesor. Tidak ada cara untuk mendapatkan tampilan seperti ini untuk chip prosesor yang sudah dibuat.

pertama
sumber
2

Bayangkan seorang buta yang tersandung di gang di bawah konstruksi. Di mana-mana ada lubang dan celah, jadi secara alami ia harus jatuh. Bukan orang buta ini, karena ia memiliki gulungan kertas dengan instruksi, kapan harus menunggu, kapan harus pindah, ke mana harus pindah dan bagaimana memanipulasi lingkungannya untuk mencapai ujung jalan. Itulah yang dimaksud dengan kumpulan, daftar instruksi yang diikuti secara membabi buta - mereka hanya masuk akal untuk gang ini dan untuk orang buta ini. Secara teori Anda bahkan dapat merekonstruksi model 3d dari instruksi saja (Mengurai).

Setiap perubahan pada platform, buatlah itu perlu untuk mengkompilasi ulang instruksi untuk orang buta. Anda perlu mengetahui perangkat keras (tata letak situs konstruksi), instruksi niat yang diketik manusia (Kode Tingkat Tinggi) seperti "Saya ingin Anda melompati semua pagar yang Anda temui berturut-turut sampai Anda memiliki 12 pagar di belakang Anda" dan kemampuan pria buta (CPU). Apakah dia memiliki ingatan jangka pendek, kemampuan untuk melakukan beberapa hal sekaligus?

Mengambil semua informasi ini dan membentuk scroll instruksi yang koheren adalah tugas kompiler.

Jadi bisakah saya menggambarkan bagaimana suatu program terlihat? Tidak. Tetapi bisakah kita menggambarkan bagaimana rasanya menjalankannya? Ya, itu akan terasa seperti melompat dan berlari, seperti mirror-edge tanpa melihat sesuatu, mengikuti daftar instruksi yang tepat, di mana pun itu membawa Anda.

Huruf pika
sumber