Sebagian besar konten jawaban ini berasal dari jawaban ini (ditulis sebelum pertanyaan lain ditandai sebagai duplikat). Jadi saya membahas menggunakan nilai 8-bit (meskipun pertanyaan ini menanyakan nilai 32-bit), tapi tidak apa-apa karena nilai 8-bit lebih mudah untuk dipahami secara konseptual, dan konsep yang sama berlaku untuk nilai yang lebih besar seperti aritmatika 32-bit.
Ketika Anda menambahkan dua angka yang 8 bit, angka terbesar yang bisa Anda dapatkan (0xFF + 0xFF = 1FE). Bahkan, jika Anda mengalikan dua angka yang 8-bit, angka terbesar yang bisa Anda dapatkan (0xFF * 0xFF = 0xFE01) masih 16 bit, dua kali dari 8-bit.
Sekarang, Anda mungkin mengasumsikan bahwa prosesor x-bit hanya dapat melacak x-bit. (Misalnya, prosesor 8-bit hanya dapat melacak 8 bit.) Itu tidak akurat. Prosesor 8-bit menerima data dalam potongan 8-bit. ("Potongan" ini biasanya memiliki istilah formal: "kata". Pada prosesor 8-bit, kata 8-bit digunakan. Pada prosesor 64-bit, kata-kata 64 bit dapat digunakan.)
Jadi, ketika Anda memberikan komputer 3 byte:
Byte # 1: Instruksi MUL
Byte # 2: byte orde tinggi (misalnya, 0xA5)
Byte # 3: byte urutan yang lebih rendah (mis., 0xCB)
Komputer dapat menghasilkan hasil yang lebih dari 8 bit. CPU dapat menghasilkan hasil seperti ini:
0100 0000 0100 0010 xxxx xxxx xxxx xxxx 1101 0111
alias:
0x4082xxxxD7
Sekarang, izinkan saya mengartikannya untuk Anda:
0x hanya berarti angka-angka berikut adalah heksadesimal.
Saya akan membahas "40" lebih terinci untuk sementara waktu.
82 adalah bagian dari register "A", yang merupakan rangkaian 8 bit.
xx dan xx adalah bagian dari dua register lain, bernama register "B" dan register "C". Alasan mengapa saya tidak mengisi bit tersebut dengan nol atau yang adalah bahwa instruksi "ADD" (dikirim ke CPU) dapat mengakibatkan bit tersebut tidak berubah oleh instruksi (sedangkan sebagian besar bit lain yang saya gunakan dalam contoh ini mungkin diubah, kecuali untuk beberapa bit bendera).
D7 akan cocok dengan lebih banyak bit, disebut register "D".
Daftar hanyalah sepotong memori. Register dibangun ke dalam CPU, sehingga CPU dapat mengakses register tanpa perlu berinteraksi dengan memori pada RAM stick.
Jadi hasil matematika dari 0xA5 kali 0xCB adalah 0x82D7.
Sekarang, mengapa bit-bit itu dipecah menjadi register A dan D bukannya register A dan B, atau register C dan D? Nah, sekali lagi, ini adalah skenario sampel yang saya gunakan, yang dimaksudkan untuk konsep yang agak mirip dengan bahasa Assembly nyata (Intel x86 16-bit, seperti yang digunakan oleh Intel 8080 dan 8088 dan banyak CPU baru). Mungkin ada beberapa aturan umum, seperti register "C" yang biasanya digunakan sebagai indeks untuk menghitung operasi (tipikal untuk loop), dan register "B" digunakan untuk melacak offset yang membantu menentukan lokasi memori. Jadi, "A" dan "D" mungkin lebih umum untuk beberapa fungsi aritmatika yang umum.
Setiap instruksi CPU harus memiliki beberapa dokumentasi, yang digunakan oleh orang-orang yang memprogram dalam Assembly. Dokumentasi itu harus menentukan register apa yang digunakan oleh setiap instruksi. (Jadi pilihan register mana yang akan digunakan sering ditentukan oleh perancang CPU, bukan programmer bahasa Assembly. Meskipun, mungkin ada beberapa fleksibilitas.)
Sekarang, kembali ke "40" dalam contoh di atas: itu adalah serangkaian bit, sering disebut "flags register". Setiap bit dalam register bendera memiliki nama. Sebagai contoh, ada bit "overflow" yang dapat diatur CPU jika hasilnya lebih besar dari ruang yang dapat menyimpan satu byte hasil. (Bit "overflow" mungkin sering disebut dengan nama singkat "OF". Itu adalah huruf besar, bukan nol.) Perangkat lunak dapat memeriksa nilai bendera ini dan melihat "masalah". Bekerja dengan bit ini sering ditangani secara tak terlihat oleh bahasa tingkat yang lebih tinggi, sehingga programmer pemula sering tidak belajar tentang bagaimana berinteraksi dengan flag-flag CPU. Namun, programer Majelis dapat secara umum mengakses beberapa flag ini dengan cara yang sangat mirip dengan variabel lain.
Misalnya, Anda mungkin memiliki beberapa instruksi ADD. Satu instruksi ADD mungkin menyimpan 16 bit hasil dalam register A dan register D, sedangkan instruksi lain mungkin hanya menyimpan 8 bit rendah dalam register A, mengabaikan register D, dan menentukan bit overflow. Kemudian, nanti (setelah menyimpan hasil register A ke dalam RAM utama), Anda bisa menggunakan instruksi ADD lain yang menyimpan hanya 8 bit tinggi dalam register (mungkin register A.) Apakah Anda perlu menggunakan flag overflow mungkin tergantung pada instruksi perkalian apa yang Anda gunakan.
(Biasanya ada bendera "underflow", jika Anda mengurangi terlalu banyak agar sesuai dengan hasil yang diinginkan.)
Hanya untuk menunjukkan betapa rumitnya hal yang didapat:
Intel 4004 adalah CPU 4-bit
Intel 8008 adalah CPU 8-bit. Itu register 8-bit bernama A, B, C, dan D.
Intel 8086 adalah CPU 16-bit. Itu register 16-bit bernama AX, BX, CX, dan DX.
Intel 80386 adalah CPU 32-bit. Itu register 32-bit bernama EAX, EBX, ECX, dan EDX.
Intel x64 CPU memiliki register 64-bit bernama RAX, RBX, RCX, dan RDX. Chip x64 dapat menjalankan kode 16-bit (dalam beberapa mode operasi), dan dapat menafsirkan instruksi 16-bit. Saat melakukannya, bit yang membentuk register AX adalah setengah dari bit yang membentuk register EAX, yang merupakan setengah dari bit yang membentuk register RAX. Jadi, setiap kali Anda mengubah nilai AX, Anda juga mengubah EAX dan RAX, karena bit yang digunakan oleh AX adalah bagian dari bit yang digunakan oleh RAX. (Jika Anda mengubah EAX dengan nilai kelipatan 65.536, maka 16 bit rendah tidak berubah sehingga AX tidak akan berubah. Jika Anda mengubah EAX dengan nilai yang bukan kelipatan 65.536, maka itu akan mempengaruhi AX juga .)
Ada lebih banyak bendera dan register dari pada yang sudah saya sebutkan. Saya hanya memilih beberapa yang umum digunakan untuk memberikan contoh konseptual sederhana.
Sekarang, jika Anda menggunakan CPU 8-bit, ketika Anda menulis ke memori, Anda mungkin menemukan beberapa batasan untuk bisa merujuk ke alamat 8-bit, bukan alamat 4 bit atau 16-bit. Detailnya akan berbeda-beda berdasarkan CPU, tetapi jika Anda memiliki batasan seperti itu, maka CPU mungkin berurusan dengan kata-kata 8-bit, itulah sebabnya mengapa CPU paling sering disebut sebagai "CPU 8-bit".