Misalnya ketika membandingkan dua bilangan bulat sebagai berikut dalam bahasa mirip-C:
if (3 > 2) {
// do something
}
Bagaimana penilaian apakah 3 lebih besar dari 2 (benar) atau tidak (salah) dibuat secara internal?
Misalnya ketika membandingkan dua bilangan bulat sebagai berikut dalam bahasa mirip-C:
if (3 > 2) {
// do something
}
Bagaimana penilaian apakah 3 lebih besar dari 2 (benar) atau tidak (salah) dibuat secara internal?
Jawaban:
Sepanjang jalan ke lubang kelinci, eh? OK, saya akan mencobanya.
Langkah 1. Dari C ke bahasa mesin
Kompiler C mengubah perbandingan Anda dengan opcode yang disimpan dalam bahasa mesin . Bahasa mesin adalah serangkaian angka yang ditafsirkan oleh CPU sebagai instruksi. Dalam hal ini akan ada dua opcode: "kurangi dengan carry" dan "jump if carry." Dengan kata lain, 2 dikurangi dari 3 dalam satu instruksi, dan instruksi selanjutnya memeriksa untuk melihat apakah itu meluap. Ini akan didahului oleh dua instruksi untuk memuat angka 2 dan 3 ke lokasi di mana mereka dapat dibandingkan.
MOV AX, 3 ; Store 3 in register AX
MOV BX, 2 ; Store 2 in register BX
SUB AX, BX ; Subtract BX from AX
JC Label ; If the previous operation overflowed, continue processing at memory location "Label"
Masing-masing di atas memiliki representasi biner; misalnya, kode untuk SUB
adalah 2D
hex, atau 00101101
dalam biner.
Langkah 2. Opcodes ke ALU
Opcodes aritmatika seperti ADD
, SUB
, MUL
, dan DIV
melakukan matematika bilangan bulat dasar menggunakan ALU atau Arithmetic Logic Unit dibangun ke CPU. Nomor disimpan dalam register oleh beberapa opcode; opcodes lainnya menginstruksikan chip untuk memanggil ALU untuk melakukan matematika pada apa pun yang disimpan dalam register pada saat itu.
Catatan: Pada titik ini kami jauh melampaui apa pun yang akan dikhawatirkan oleh insinyur perangkat lunak jika bekerja dengan 3GL seperti C.
Langkah 3. ALU, setengah penambah, dan penambah penuh
Tahukah Anda bahwa semua operasi matematika yang Anda ketahui dapat direduksi menjadi serangkaian operasi NOR ? Dan itulah cara kerja ALU.
ALU hanya tahu cara bekerja dengan angka biner, dan hanya dapat melakukan operasi logis seperti OR, NOT, AND, dan XOR. Implementasi penambahan dan pengurangan biner dilakukan dengan serangkaian operasi logis yang diatur dengan cara tertentu, dalam subsistem yang dikenal sebagai adder . Subsistem ini terdiri dari jaringan "half-adders" yang beroperasi pada dua bit dan menentukan jumlah bit tunggal dan flag carry bit tunggal. Dengan merantai ini bersama-sama, ALU dapat melakukan operasi pada angka dengan bit 8, 16, 32 dll.
Bagaimana dengan pengurangan? Pengurangan hanyalah bentuk tambahan:
A - B = A + (-B)
ALU menghitung -B
dengan mengambil komplemen dua itu dari B
. Setelah dikonversi menjadi negatif, mengirimkan nilai ke penambah akan menghasilkan operasi pengurangan.
Langkah 4: Langkah terakhir: transistor On-chip
Operasi adders diimplementasikan menggunakan kombinasi komponen listrik yang berinteraksi untuk membuat "gerbang logika," seperti yang ditemukan dalam logika transitor-transistor atau TTL, atau dalam CMOS . Klik di sini untuk beberapa contoh untuk melihat bagaimana ini terhubung.
Pada sebuah chip, tentu saja, "sirkuit" ini diimplementasikan dalam jutaan bit kecil bahan konduktif dan nonkonduktif, tetapi prinsipnya sama seperti jika mereka adalah komponen berukuran penuh di papan tempat memotong roti. Tonton video ini yang menunjukkan semua transistor pada microchip melalui lensa mikroskop elektronik.
Beberapa catatan tambahan:
Kode yang Anda tulis sebenarnya akan dikomputasi oleh kompiler dan tidak dieksekusi pada saat dijalankan, karena hanya terdiri dari konstanta.
Beberapa kompiler tidak mengkompilasi ke kode mesin tetapi memperkenalkan lapisan lain, seperti Java bytecode atau .NET intermediate language. Tetapi pada akhirnya semuanya dieksekusi melalui bahasa mesin.
Beberapa operasi matematika tidak benar-benar dihitung; mereka dilihat dalam tabel besar-besaran pada unit pemrosesan aritmatika, atau berisi kombinasi pencarian dan perhitungan atau interpolasi. Contohnya adalah fungsi untuk menghitung akar kuadrat . CPU PC modern masing-masing memiliki unit pengolahan titik mengambang yang dibangun ke dalam setiap inti CPU.
CMP
akan digunakan, tidak SUB
- tetapi sekali lagi itu lebih atau kurang " SUB
jika hasilnya diabaikan dan hanya bendera yang ditetapkan"
if
semuanya , langsung ke pengkodeando something
.