Làm thế nào để CPU 'biết' các lệnh và hướng dẫn thực sự có nghĩa là gì?


73

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 ...


Điều này rất nhiều thông tin, nhưng điều tôi đang tìm kiếm là cái gì cho phép CPU nhận và gửi lệnh?

Tôi không hiểu bình luận đó. CPU "nhận" hướng dẫn từ bộ nhớ, bằng cách yêu cầu chúng theo địa chỉ. Các lệnh duy nhất mà CPU "gửi" (trong chế độ xem đơn giản, ít nhất) là các lệnh đến bộ nhớ để phân phối dữ liệu và các lệnh trên các bus I / O, để vận hành các thiết bị I / O.
Daniel R Hicks

Trung tâm của bất kỳ CPU nào là một số logic (theo nghĩa đen) được thiết lập để thực hiện một quy trình đơn giản: Lấy giá trị từ thanh ghi địa chỉ lệnh, gửi nó vào bộ nhớ, truy xuất lệnh mà bộ nhớ trả về, sau đó kẹt nó vào một cách khác tổ hợp logic phức tạp "hiểu" ý nghĩa của hướng dẫn và cách thực hiện nó. Oh, và một nơi nào đó dọc theo đó tăng đăng ký địa chỉ hướng dẫn.
Daniel R Hicks

Độc giả có thể quan tâm đến câu hỏi Máy tính hoạt động như thế nào? trên Khoa học máy tính .
Raphael

Câu trả lời:


88

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 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.


2
Ok, tôi hiểu rồi, tôi nghĩ vậy :) Vì vậy, các bit lệnh chuyển đổi "công tắc" sẽ khiến bộ xử lý làm một số việc nhất định với dữ liệu mà nó nhận được?
Simon Verbeke

4
@Simon Verbeke, chính xác. Họ chỉ chuyển đổi các công tắc để điều hướng luồng tín hiệu điện trong bộ xử lý (cũng có thể điều hướng nó để tải lại nhiều lệnh hơn!). Sự tương tự chuyển đổi là tốt, vì mọi thứ đều là kỹ thuật số (logic 1/0 hoặc đúng / sai). Chỉ để bạn biết, mức logic là một điện áp thực tế. Kỹ sư chỉ định 0 hoặc 1 là gì (ví dụ, logic 1 có thể được chỉ định là nhiều hơn 2 volt).
Đột phá

1
"Các hướng dẫn tương đương nhị phân" mà trình biên dịch hoặc trình biên dịch mã hóa mọi thứ được gọi là opcodes. Nếu bạn xem cấu trúc opcode của kiến ​​trúc RISC như MIPS hoặc ARM, bạn có thể thấy các bit khác nhau trong bản đồ opcode cho các hoạt động cụ thể. Intel do tuổi thọ và xu hướng kéo dài hết lần này đến lần khác không còn có cấu trúc ánh xạ đơn giản.
LawrenceC

3
Không, tôi đã nói vì sự mở rộng lâu dài và hết lần này đến lần khác của kiến ​​trúc x86, ánh xạ các bit riêng lẻ trong opcodes sang các hoạt động vi mô không bị cắt và khô như trong MIPS hoặc ARM ở một mức độ nào đó (xem d.umn.edu/~gshute/spimsal/talref.html , ví dụ, các mã của Intel không giống như thế này). Tôi không nghĩ có nhiều khái niệm về "RISC" khi Intel giới thiệu CPU x86 vào năm 1978.
LawrenceC

5
Cần lưu ý rằng chỉ một số CPU được mã hóa. Một số (hầu hết các thiết bị nhỏ hơn) hoạt động trực tiếp từ các opcode lắp ráp. Nó phụ thuộc vào kiến ​​trúc.
Tên giả

37

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.


5
Tương tự tốt đẹp với những chiếc xe đạp đạp.
rjmunro

10

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.


2
Cũng cần lưu ý rằng việc gán biểu tượng ghi nhớ "Mov" cho mẫu bit đặc biệt này là hoàn toàn tùy ý. Về nguyên tắc tôi có thể viết một trình biên dịch gọi lệnh đó là "oof" và nó cũng hoạt động tốt, ngoài việc khó nhớ hơn.
dmckee

6

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.


4

Ở 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.


7
Các hoạt động logic như AND, OR và NOT, cũng như bẻ khóa là cơ bản hơn so với việc thêm. Thêm thực sự có thể được thể hiện dưới dạng các hoạt động này. Thực tế, có những IC riêng biệt (sê-ri LS của Texas) không làm gì ngoài việc thực hiện các hoạt động này và có thể xây dựng một loại CPU trong số chúng. Google "sơ đồ" để xem cách một trò chơi, ví dụ, được tạo ra, mà không cần CPU.
LawrenceC

Ý tôi là từ quan điểm phần mềm nhiều hơn :) Có phần cứng / logic khôn ngoan, bạn có một số lượng cổng NAND và NOR điên rồ. Điểm tốt.
n0pe

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.