Bagaimana cara CPU 'mengetahui' perintah dan instruksi apa sebenarnya yang dimaksud?

73

Bagaimana prosesor 'tahu' apa arti perintah yang berbeda?

Saya sedang memikirkan perintah tingkat perakitan seperti MOV, PUSH, CALL, dll ...

Simon Verbeke
sumber
Ini sangat informatif, tetapi yang saya cari adalah apakah yang memungkinkan CPU menerima dan mengirim perintah?
Saya tidak mengerti komentar itu. CPU "menerima" instruksi dari memori, dengan menanyakannya berdasarkan alamat. Satu-satunya perintah yang "dikirim" oleh CPU (setidaknya dalam tampilan sederhana) adalah perintah ke memori untuk mengirimkan data, dan perintah pada bus I / O, untuk mengoperasikan perangkat I / O.
Daniel R Hicks
Inti dari setiap CPU adalah beberapa logika yang (secara harfiah) tertanam untuk menjalankan prosedur sederhana: Ambil nilai dari register alamat instruksi, kirim ke memori, ambil instruksi yang memori kembali, dan kemudian selai itu menjadi lebih sarang kompleks logika bawaan yang "mengerti" apa arti instruksi dan bagaimana cara mengeksekusinya. Oh, dan di suatu tempat ada kenaikan daftar alamat instruksi.
Daniel R Hicks
Pembaca mungkin tertarik dengan pertanyaan Bagaimana cara kerja komputer? lebih pada Ilmu Komputer .
Raphael

Jawaban:

88

Ketika komputer menafsirkan instruksi tingkat perakitan , instruksi ini diubah menjadi setara binernya agar CPU dapat membaca. Ketika CPU mengeksekusi instruksi, itu menginterpretasikan bagian opcode dari instruksi ke dalam "mikroprogram" individual, berisi mikrokode mereka yang setara. Asal tahu saja, instruksi perakitan lengkap terdiri dari opcode dan semua data yang berlaku yang menyertainya, jika diperlukan (mis. Nama register, alamat memori).

Instruksi mikrokode adalah level yang sangat rendah (lebih dari perakitan), dan mengontrol sinyal digital aktual yang mengontrol aliran logika dalam mikroprosesor. Misalnya, satu instruksi mikrokode dapat memperbarui bendera register kode kondisi dengan nilai baru, atau menghubungkan register CPU dengan salah satu unit ALU . Tugas yang lebih kompleks mungkin dilakukan, tetapi ini menunjukkan kepada Anda gambaran umum tentang apa yang digunakan untuk mikrokode.

Alur umum dari kompilasi ke eksekusi adalah sebagai berikut. Instruksi perakitan dirakit (diubah menjadi biner 0s dan 1s, atau mulai sekarang, sinyal logika). Sinyal-sinyal logika ini pada gilirannya ditafsirkan oleh CPU, dan berubah menjadi sinyal-sinyal logika tingkat lebih rendah yang mengarahkan aliran CPU untuk menjalankan instruksi tertentu. Ini dapat mengambil satu atau beberapa siklus jam, tergantung pada arsitektur dan desain prosesor (kebanyakan manual referensi prosesor memberi tahu Anda berapa banyak siklus clock yang diperlukan untuk menjalankan instruksi tertentu, seperti yang ini misalnya ).

Semua ini dilakukan dengan mikrokode yang diprogram dengan susah payah (secara fisik tertanam di dalam prosesor dalam beberapa jenis ROM , diatur selama pembuatan), yang mengarahkan aliran melalui gerbang logika tingkat rendah yang sebenarnya . Ini memberikan antarmuka antara instruksi perakitan abstrak dan logika listrik fisik dalam prosesor.


Jadi, secara ringkas, instruksi prosesor dirakit dan dimuat oleh prosesor. Prosesor kemudian akan menggunakan instruksi ini untuk mencari mikroprogram (dalam bentuk mikrokode) yang sesuai dengan instruksi tertentu, yang merupakan "sebenarnya" yang menjalankan instruksi. Setelah mikrokode untuk instruksi tertentu telah dieksekusi (yang dapat mengambil satu atau beberapa siklus clock), prosesor mengeksekusi mikrokode untuk mengambil instruksi berikutnya, dan siklus berulang.

Penerobosan
sumber
2
Ok, saya mengerti, saya pikir :) Jadi, bit perintah beralih "switch" yang akan membuat prosesor melakukan hal-hal tertentu dengan data yang diterimanya?
Simon Verbeke
4
@Simon Verbeke, tepatnya benar. Mereka hanya mengaktifkan sakelar untuk mengarahkan aliran sinyal listrik di prosesor (yang juga dapat mengarahkannya untuk memuat ulang lebih banyak perintah!). Analogi saklar itu baik, karena semuanya digital (baik logika 1/0, atau benar / salah). Asal tahu saja, level logika adalah tegangan aktual. Terserah insinyur untuk menentukan apa itu 0 atau 1 (misalnya, logika 1 dapat ditentukan lebih dari 2 volt).
Terobosan
1
"Instruksi setara biner" yang digunakan oleh kompiler atau assembler semuanya disebut opcodes. Jika Anda melihat struktur opcode dari arsitektur RISC seperti MIPS atau ARM, Anda dapat melihat bagaimana berbagai bit dalam peta opcode untuk operasi tertentu. Intel karena umur panjang dan kecenderungannya untuk diperpanjang waktu dan waktu lagi tidak lagi memiliki struktur pemetaan sederhana.
LawrenceC
3
Tidak, saya katakan karena umur panjang dan waktu-dan-waktu-perpanjangan-lagi dari arsitektur x86, pemetaan bit individu dalam opcode ke operasi mikro tidak memotong-dan-kering rapi seperti di MIPS atau ARM ke tingkat tertentu (lihat d.umn.edu/~gshute/spimsal/talref.html , misalnya, opcode Intel tidak seperti ini). Saya tidak berpikir ada banyak gagasan tentang "RISC" ketika Intel memperkenalkan CPU x86 pada tahun 1978.
LawrenceC
5
Tidak perlu dicatat bahwa hanya beberapa CPU yang diberi kode mikro. Beberapa (sebagian besar perangkat yang lebih kecil) beroperasi langsung dari opcode rakitan. Tergantung arsitekturnya.
Nama Palsu
37

Prosesor tidak benar-benar 'tahu' apa perintahnya. Perintah hanyalah pola biner yang menyebabkan prosesor melakukan apa yang kami artikan perintah artinya.

Misalnya, operasi ADD-R1-into-R2 akan menyebabkan nilai register 1 dan 2 mencapai ALU (unit aritmatika dan logika), menyebabkan ALU menggunakan output dari penambah alih-alih berbagai hal lainnya, dan menyebabkan output ALU untuk menggantikan nilai dalam register 2. Ada sirkuit logika sederhana untuk mencapai semua hal ini ( multiplexer , adder , counter , ...), meskipun prosesor nyata menggunakan optimasi yang sangat rumit.

Sepertinya Anda bertanya bagaimana mobil bisa melambat ketika Anda menginjak rem. Mobil tidak tahu, pedal rem kebetulan secara tidak langsung mengontrol bagaimana bantalan keras ditekan ke roda.

Craig Gidney
sumber
5
Analogi yang bagus dengan pedal patah mobil.
rjmunro
10

Ambil, misalnya, instruksi yang memberi tahu prosesor x86 / IA-32 untuk memindahkan nilai 8-bit langsung ke dalam register. Kode biner untuk instruksi ini adalah 10110 diikuti oleh pengenal 3-bit yang digunakan register. Pengidentifikasi untuk register AL adalah 000, jadi kode mesin berikut memuat register AL dengan data 01100001.

10110000 01100001

Kode komputer biner ini dapat dibuat lebih dapat dibaca oleh manusia dengan mengekspresikannya dalam heksadesimal sebagai berikut

B0 61

Di sini, B0 berarti 'Pindahkan salinan dari nilai berikut ke dalam AL', dan 61 adalah representasi heksadesimal dari nilai 01100001, yang merupakan 97 dalam desimal. Bahasa assembly Intel menyediakan MOV mnemonik (singkatan dari move) untuk instruksi seperti ini, sehingga kode mesin di atas dapat ditulis sebagai berikut dalam bahasa assembly, lengkap dengan komentar penjelasan jika diperlukan, setelah titik koma. Ini jauh lebih mudah dibaca dan diingat.

http://en.wikipedia.org/wiki/Assembler_language

Dengan kata lain, ketika Anda 'mengumpulkan' program perakitan Anda, instruksi Anda seperti

MOV AL, 61h

dikonversi menjadi angka, yang diasosiasikan CPU dengan makna khusus dan kemudian bertindak sesuai.

Nate
sumber
2
Perlu juga dicatat bahwa penetapan simbol mnemonik "mov" untuk pola bit khusus ini sepenuhnya arbitrer. Saya pada prinsipnya dapat menulis assembler yang menyebut instruksi itu "oof" dan itu akan berhasil juga, selain menjadi lebih sulit untuk diingat.
dmckee
6

Bacaan yang disarankan:

Lihat juga catatan kursus dari CS152: Arsitektur dan Rekayasa Komputer di UC Berkeley, kursus di mana siswa menerapkan CPU.

Jika Anda mencari "cpu buatan sendiri" di Google, Anda akan menemukan banyak barang.

nibot
sumber
4

Pada level paling rendah yang paling ekstrem, yang bisa dilakukan CPU hanyalah menambahkan. Dari penjumlahan, ia dapat mengurangi, melipatgandakan, dan membagi (mengingat ini hanya penambahan dengan cara yang berbeda). CPU menggunakan ini untuk memindahkan data di dalam memori dengan menerapkan penambahan ke alamat memori.

Perlu diingat bahwa ini berada pada level serendah mungkin. CPU sebenarnya "memahami" perintah tertentu, dalam bentuk mikrokode. Lihat jawaban Breakthrough, itu ditulis dengan sangat baik.

n0pe
sumber
7
Operasi logis seperti DAN, ATAU, dan BUKAN, serta bithifting lebih mendasar daripada menambahkan. Menambahkan sebenarnya dapat dinyatakan dalam operasi ini. Sebenarnya ada IC diskrit (seri Texas Instruments LS) yang tidak melakukan apa pun kecuali melakukan operasi ini dan dimungkinkan untuk membangun semacam CPU dari mereka. Google "Pong schematic" untuk melihat bagaimana gim, misalnya, dibuat, tanpa CPU.
LawrenceC
Maksud saya dari sudut pandang perangkat lunak yang lebih banyak :) Ya perangkat keras / logika Anda memiliki jumlah gerbang NAND dan NOR yang gila. Poin bagus.
n0pe
2

Saya telah memberikan jawaban terkait di programmers.stackexchange.com, lihat Bagaimana cara kerja komputer? di mana saya berjalan dengan singkat atas segala sesuatu dari bawah ke atas tentang bagaimana komputer pergi menafsirkan instruksi untuk memindahkan elektron.

Lie Ryan
sumber