Làm thế nào để một bộ xử lý 'biết' các lệnh khác nhau có nghĩa là gì?
Tôi đang nghĩ về các lệnh cấp độ lắp ráp như MOV, PUSH, CALL, v.v ...
Làm thế nào để một bộ xử lý 'biết' các lệnh khác nhau có nghĩa là gì?
Tôi đang nghĩ về các lệnh cấp độ lắp ráp như MOV, PUSH, CALL, v.v ...
Câu trả lời:
Khi một máy tính diễn giải các hướng dẫn cấp độ lắp ráp , các hướng dẫn này được chuyển thành tương đương nhị phân của chúng để CPU đọc. Khi CPU thực hiện các hướng dẫn, nó diễn giải phần opcode của hướng dẫn thành các "chương trình vi mô" riêng lẻ, chứa các mã tương đương của chúng. Để bạn biết, một hướng dẫn lắp ráp đầy đủ bao gồm một opcode và bất kỳ dữ liệu áp dụng nào đi kèm với nó, nếu được yêu cầu (ví dụ: tên đăng ký, địa chỉ bộ nhớ).
Các hướng dẫn vi mã cực kỳ ở mức độ thấp (hơn nữa là lắp ráp) và kiểm soát các tín hiệu số thực tế điều khiển luồng logic trong bộ vi xử lý. Ví dụ: một lệnh vi mã có thể cập nhật cờ thanh ghi mã điều kiện với giá trị mới hoặc kết nối thanh ghi CPU với một trong các đơn vị ALU . Các tác vụ phức tạp hơn là có thể, nhưng điều này cho bạn thấy ý tưởng chung về việc sử dụng microcode nào.
Luồng chung từ biên dịch đến thực thi như sau. Các hướng dẫn lắp ráp được lắp ráp (biến thành các số 0 và 1 tương đương nhị phân của chúng, hoặc từ giờ trở đi, tín hiệu logic). Các tín hiệu logic này lần lượt được CPU giải thích và biến thành các tín hiệu logic mức thấp hơn để điều hướng dòng chảy của CPU thực hiện lệnh cụ thể. Việc này có thể mất một hoặc nhiều chu kỳ xung nhịp, tùy thuộc vào kiến trúc và thiết kế của bộ xử lý (hầu hết các hướng dẫn tham khảo bộ xử lý cho bạn biết cần bao nhiêu chu kỳ đồng hồ để thực hiện một lệnh cụ thể, ví dụ như hướng dẫn này ).
Tất cả điều này được thực hiện với microcode được lập trình cứng (được nhúng vật lý trong bộ xử lý trong một số loại ROM , được thiết lập trong quá trình sản xuất), điều hướng dòng chảy qua các cổng logic mức thấp thực tế . Điều này cung cấp một giao diện giữa các hướng dẫn lắp ráp trừu tượng và logic điện vật lý trong bộ xử lý.
Vì vậy, tóm lại, hướng dẫn bộ xử lý được lắp ráp và tải bởi bộ xử lý. Sau đó, bộ xử lý sẽ sử dụng các hướng dẫn này để tra cứu chương trình vi mô (dưới dạng vi mã) tương ứng với hướng dẫn cụ thể đó, đó là những gì "thực sự" thực hiện hướng dẫn. Khi các vi mã cho lệnh cụ thể đã được thực thi (có thể mất một hoặc nhiều chu kỳ xung nhịp), bộ xử lý sẽ thực thi mã micro để tìm nạp lệnh tiếp theo và chu trình lặp lại.
Bộ xử lý không thực sự 'biết' các lệnh là gì. Các lệnh chỉ là các mẫu nhị phân làm cho bộ xử lý thực hiện những gì chúng ta diễn giải các lệnh có nghĩa.
Ví dụ: hoạt động ADD-R1-vào-R2 sẽ khiến các giá trị của thanh ghi 1 và 2 đạt ALU (đơn vị số học và logic), khiến ALU sử dụng đầu ra của bộ cộng thay vì các công cụ khác và gây ra đầu ra của ALU để thay thế giá trị trong thanh ghi 2. Có các mạch logic đơn giản để đạt được tất cả những điều này ( bộ ghép kênh , bộ cộng , bộ đếm , ...), mặc dù bộ xử lý thực sử dụng tối ưu hóa rất phức tạp.
Nó giống như bạn đang hỏi làm thế nào một chiếc xe biết giảm tốc độ khi bạn nhấn phanh. Chiếc xe không biết, bàn đạp phanh chỉ xảy ra gián tiếp để kiểm soát cách các miếng đệm cứng được ép vào các bánh xe.
Lấy ví dụ, hướng dẫn yêu cầu bộ xử lý x86 / IA-32 chuyển giá trị 8 bit ngay lập tức vào thanh ghi. Mã nhị phân cho hướng dẫn này là 10110, theo sau là mã định danh 3 bit để đăng ký sử dụng. Mã định danh cho thanh ghi AL là 000, do đó mã máy sau đây tải thanh ghi AL với dữ liệu 01100001.
10110000 01100001
Mã máy tính nhị phân này có thể được làm cho con người dễ đọc hơn bằng cách biểu thị nó dưới dạng thập lục phân như sau
B0 61
Ở đây, B0 có nghĩa là 'Di chuyển một bản sao của giá trị sau vào AL' và 61 là biểu diễn thập lục phân của giá trị 01100001, là 97 trong số thập phân. Ngôn ngữ lắp ráp Intel cung cấp MOV ghi nhớ (viết tắt của di chuyển) cho các hướng dẫn như thế này, do đó, mã máy ở trên có thể được viết như sau bằng ngôn ngữ lắp ráp, hoàn thành với một nhận xét giải thích nếu được yêu cầu, sau dấu chấm phẩy. Điều này dễ đọc và dễ nhớ hơn nhiều.
http://en.wikipedia.org/wiki/Assembler_lingu
Nói cách khác, khi bạn 'lắp ráp' chương trình lắp ráp của mình, các hướng dẫn của bạn như
MOV AL, 61h
được chuyển đổi thành số, mà CPU liên kết một ý nghĩa đặc biệt và sau đó hành động tương ứng.
Cách đọc được đề nghị:
Đồng thời kiểm tra các ghi chú khóa học từ CS52: Kiến trúc và Kỹ thuật máy tính tại UC Berkeley, một khóa học trong đó sinh viên thực hiện CPU.
Nếu bạn google cho "cpu xây dựng tại nhà", bạn sẽ tìm thấy nhiều quà tặng.
Ở mức cực thấp nhất, tất cả các CPU có thể làm là thêm. Ngoài ra, nó có thể trừ, nhân và chia (xem như đây chỉ là bổ sung theo một cách khác). CPU sử dụng điều này để di chuyển dữ liệu xung quanh trong bộ nhớ bằng cách áp dụng các bổ sung cho các địa chỉ bộ nhớ.
Hãy ghi nhớ rằng đây là mức thấp nhất có thể. CPU thực tế "hiểu" một số lệnh nhất định, dưới dạng vi mã. Xem câu trả lời của Đột phá, nó được viết rất tốt.
Tôi đã đưa ra một câu trả lời có liên quan tại lập trình viên.stackexchange.com, xem Máy tính hoạt động như thế nào? nơi tôi đi nhanh qua tất cả mọi thứ từ đầu về cách máy tính diễn giải các hướng dẫn để di chuyển các điện tử.