Ví dụ: khi so sánh hai số nguyên như sau trong một ngôn ngữ giống như C:
if (3 > 2) {
// do something
}
Làm thế nào để đánh giá liệu 3 lớn hơn 2 (đúng) hay không (sai) được thực hiện trong nội bộ?
Ví dụ: khi so sánh hai số nguyên như sau trong một ngôn ngữ giống như C:
if (3 > 2) {
// do something
}
Làm thế nào để đánh giá liệu 3 lớn hơn 2 (đúng) hay không (sai) được thực hiện trong nội bộ?
Câu trả lời:
Tất cả các cách xuống lỗ thỏ, eh? OK tôi sẽ thử.
Bước 1. Từ C sang ngôn ngữ máy
Trình biên dịch C biến đổi so sánh của bạn với opcodes được lưu trữ trong ngôn ngữ máy . Ngôn ngữ máy là một chuỗi các số mà CPU diễn giải theo hướng dẫn. Trong trường hợp này sẽ có hai opcodes: "trừ khi mang" và "nhảy nếu mang". Nói cách khác, 2 được trừ từ 3 trong một lệnh và lệnh tiếp theo sẽ kiểm tra xem nó có bị tràn không. Những điều này sẽ được đi trước bởi hai hướng dẫn để tải các số 2 và 3 vào các vị trí có thể so sánh chúng.
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"
Mỗi ở trên có một đại diện nhị phân; ví dụ, mã cho SUB
là 2D
hex hoặc 00101101
ở dạng nhị phân.
Bước 2. Mã hóa thành ALU
Opcodes số học thích ADD
, SUB
, MUL
, và DIV
thực hiện các toán số nguyên cơ bản sử dụng một ALU hoặc số học Đơn vị logic được xây dựng vào CPU. Số được lưu trữ trong sổ đăng ký bởi một số opcodes; các opcodes khác hướng dẫn chip gọi ALU để làm toán trên bất cứ thứ gì được lưu trữ trong các thanh ghi tại thời điểm đó.
Lưu ý: Tại thời điểm này, chúng tôi vượt xa mọi thứ mà bất kỳ kỹ sư phần mềm nào cũng lo lắng nếu làm việc với 3GL như C.
Bước 3. ALU, nửa bộ cộng và bộ cộng đầy đủ
Bạn có biết rằng tất cả các phép toán mà bạn biết có thể được giảm xuống thành một loạt các phép toán NOR không? Và đó chính xác là cách ALU hoạt động.
ALU chỉ biết cách làm việc với các số nhị phân và chỉ có thể thực hiện các hoạt động logic như OR, NOT, AND và XOR. Việc thực hiện phép cộng và phép trừ nhị phân được thực hiện bằng một loạt các phép toán logic được sắp xếp theo một cách nhất định, trong một hệ thống con được gọi là bộ cộng . Các hệ thống con này bao gồm một mạng "nửa cộng" hoạt động trên hai bit và xác định tổng bit đơn của chúng và cờ mang bit đơn. Bằng cách kết hợp những thứ này lại với nhau, ALU có thể thực hiện các thao tác trên các số có bit 8, 16, 32, v.v.
Còn phép trừ thì sao? Phép trừ chỉ là một hình thức bổ sung khác:
A - B = A + (-B)
ALU tính -B
bằng cách lấy bổ sung của hai số B
. Khi nó được chuyển đổi thành âm, việc gửi giá trị cho bộ cộng sẽ dẫn đến một phép toán trừ.
Bước 4: Bước cuối cùng: Bóng bán dẫn trên chip
Các hoạt động của các bộ cộng được thực hiện bằng cách sử dụng kết hợp các thành phần điện tương tác để tạo ra "cổng logic", chẳng hạn như các bộ phận được tìm thấy trong logic transitor-transitor hoặc TTL, hoặc trong CMOS . Nhấn vào đây để xem một vài ví dụ để xem làm thế nào chúng được nối dây.
Trên một con chip, tất nhiên, các "mạch" này được thực hiện trong hàng triệu bit vật liệu dẫn điện và không dẫn điện nhỏ, nhưng nguyên tắc này giống như khi chúng là các thành phần có kích thước đầy đủ trên một chiếc bánh mì. Xem video này cho bạn thấy tất cả các bóng bán dẫn trên một vi mạch thông qua ống kính của kính hiển vi điện tử.
Một số lưu ý bổ sung:
Mã bạn đã viết thực sự sẽ được trình biên dịch tiền mã hóa và không được thực thi trong thời gian chạy, bởi vì nó chỉ bao gồm các hằng số.
Một số trình biên dịch không biên dịch thành mã máy mà giới thiệu một lớp khác, chẳng hạn như mã byte trung gian Java hoặc ngôn ngữ trung gian .NET. Nhưng cuối cùng tất cả được thực hiện thông qua ngôn ngữ máy.
Một số phép toán không thực sự được tính toán; chúng được tra cứu trong các bảng lớn trên một đơn vị đồng xử lý số học hoặc chứa kết hợp tra cứu và tính toán hoặc nội suy. Một ví dụ sẽ là hàm để tính căn bậc hai . Mỗi CPU PC hiện đại đều có bộ xử lý điểm nổi được tích hợp trong mỗi lõi CPU.
CMP
sẽ được sử dụng, không phải SUB
- nhưng sau đó một lần nữa ít nhiều là " SUB
trong đó kết quả bị bỏ qua và chỉ các cờ được đặt"
if
hoàn toàn , đi thẳng vào mã hóado something
.