Lập trình vi mô so với lập trình ngôn ngữ máy


10

Tôi hơi bối rối giữa cấp độ lập trình vi mô và cấp độ ngôn ngữ máy. Ví dụ:

  1. Trường hợp cả hai loại chương trình cư trú trong khi được thực hiện?
  2. Bạn có ánh xạ 1: 1 để hướng dẫn ngôn ngữ lắp ráp đúng không?
  3. Là định dạng của một trong hai được xác định bởi kiến ​​trúc bộ xử lý?

4
Nếu bạn chưa đọc nó, hãy xem bài viết [Wikipedia] [1]; nó thật tuyệt [1]: vi.wikipedia.org/wiki/Microcode
Shawn J. Goff

5
Microcode có lẽ không phải là những gì bạn đang nói về. Trừ khi bạn đang thiết kế CPU của riêng mình, bạn có thể sẽ không quan tâm đến microcode. Bạn có thể nhầm lẫn giữa 'micro' trong 'microcode' với 'vi điều khiển', nhưng chúng không giống nhau.
davr

1
Không, tôi đang dùng về microcode. Tôi đang nghiên cứu nội bộ CPU và cố gắng hiểu các lớp thấp nhất như microcode.

Câu trả lời:


7

Micro-code là một mức độ trừu tượng khác ngoài mã máy. CPU thực tế đang chạy microcode và một công cụ dịch chuyển đổi mã máy thành microcode khi đang di chuyển. Điều này được thực hiện vì nhiều lý do, bao gồm các bộ xử lý nhanh hơn, nhỏ hơn, dễ dàng tạo ra một bộ xử lý phức tạp với ít gỡ lỗi hơn và để tương thích ngược. Chẳng hạn, tập lệnh x86 chứa một số lệnh xử lý chuỗi hiếm khi được sử dụng. Tuy nhiên, để vẫn tương thích ngược, chúng vẫn phải có sẵn trong các bộ xử lý x86 hiện đại. Thay vì tạo ra một đường dẫn thực thi cho các hướng dẫn này, chúng được chuyển đổi thành microcode và được thực thi. Điều này tiết kiệm silicon, trong khi vẫn còn tương thích ngược.

Trường hợp cả hai loại chương trình cư trú trong khi được thực hiện?

Mã máy nằm trong bộ đệm (sau khi được kéo từ RAM). Mã vi mô nằm trong bộ đệm mã vi, tùy thuộc vào kiến ​​trúc máy cụ thể. Bộ đệm chỉ có thể đủ lớn để chứa đủ microcode để giữ microcode được chuyển đổi từ hướng dẫn mã máy lớn nhất có thể hoặc có thể là bộ đệm lớn hơn lưu trữ kết quả đã chuyển đổi của nhiều mã máy để không cần phải chuyển đổi tất cả mã máy trên mỗi lần lặp cho các vòng nhỏ.

Trong một số kiến ​​trúc, microcode được chuyển đổi không được lưu trữ ở bất cứ đâu - đơn vị tìm nạp / dịch chỉ đơn giản là tạo ra một loạt các hướng dẫn về microcode dựa trên mã máy hiện đang thực thi. Trong trường hợp này, microcode đang thực thi từ một loại ROM nào đó và mã máy về cơ bản là một chỉ mục vào ROM - chỉ vào chuỗi các lệnh vi mã phải được chạy để thực hiện đầy đủ lệnh mã máy.

Bạn có ánh xạ 1: 1 để hướng dẫn ngôn ngữ lắp ráp đúng không?

Mã máy và mã lắp ráp, nói chung là ánh xạ 1: 1 theo hướng dẫn lắp ráp. Nó phụ thuộc vào trình biên dịch. Trình biên dịch cấp cao có thể có một bộ macro lớn cho phép một người viết một dòng mã lắp ráp và trình biên dịch sẽ tạo ra một số mã máy.

Nhưng nói chung, ngôn ngữ lắp ráp "thuần túy" có thể được chuyển đổi trực tiếp thành mã máy bằng cách sử dụng bảng tập lệnh trong hướng dẫn của bộ xử lý.

Tôi không chắc ý của bạn là gì bởi "hướng dẫn đúng". Có lẽ bạn có thể giải thích các tài liệu tham khảo.

Là định dạng của một trong hai được xác định bởi kiến ​​trúc bộ xử lý?

Định dạng của cả mã máy và vi mã được xác định bởi kiến ​​trúc bộ xử lý.


bởi 'true-op', ý tôi là các hướng dẫn KHÔNG phải là hướng dẫn ngôn ngữ lắp ráp tổng hợp hoặc giả. đối với câu hỏi thứ 2, tôi muốn hỏi liệu hướng dẫn vi mã có ánh xạ tới hướng dẫn lắp ráp ngôn ngữ đúng không.

@Louis - Nói chung không có mã lắp ráp được xuất bản mà là bản dịch 1: 1 sang microcode. Intel và AMD (và những người khác) giữ quyền sở hữu vi mã của họ, vì nó cung cấp cái nhìn sâu sắc rất mạnh mẽ về kiến ​​trúc bên trong của bộ xử lý. Tôi đã nghe nói rằng vì một số mục đích chuyên biệt, họ sẵn sàng cung cấp thông tin về nó cho các nhà nghiên cứu để họ có thể lấy 1% hiệu suất cuối cùng ra khỏi máy cho một số ứng dụng nhất định, nhưng đối với hầu hết các thông số kỹ thuật được công bố bao gồm mã máy và mô tả kiến ​​trúc chung.
Adam Davis

8

Về cơ bản, microcode mở rộng một tập lệnh CPU giới hạn để chứa các hướng dẫn cấp cao hơn sẽ khó thực hiện trong phần cứng, nhưng tương đối dễ xây dựng với các hướng dẫn hiện có. Microcode cho phép bộ xử lý với một tập lệnh nhỏ hoạt động như một bộ có tập lệnh lớn hơn.

Giả sử bạn đang làm việc với một tập lệnh MARIE và bạn muốn có chức năng Thêm x, y, nhưng kiến ​​trúc chỉ cho phép Thêm x (chỉ thêm những gì hiện có trong thanh ghi vào x) để bạn thêm một lệnh vi mã:

LOAD x //Load x into the register
ADD y //Add y to the value in the register

Bây giờ khi mã ngôn ngữ máy của bạn nói:

ADD x,y

nó tìm kiếm chức năng ADD mà bạn đã thêm vào ROM (microcode của bạn) và thực thi nó. Điều này thật tuyệt vời vì nó làm tăng tập lệnh của bạn, cho phép mã máy dễ đọc hơn và vì vi mã của bạn được lưu trong ROM, nên cũng nhanh hơn một chút so với gọi LOAD và ADD từ RAM.

Tôi đã từng làm việc tại một công ty thực sự đã viết microcode để thực hiện các phép đo tùy chỉnh ở tốc độ rất cao trên các hệ thống cũ của họ. Tuy nhiên, với những tiến bộ trong các GPU, họ đã chuyển sang những cái đó, nhanh hơn nhiều (vì bạn thực sự đang thực hiện "hướng dẫn tùy chỉnh" trong phần cứng thay vì ROM).


Làm thế nào bạn viết và thực thi microcode?
Erik Kaplun

@ErikAllik Bạn chỉ có thể làm điều đó bằng cách xây dựng máy tính của riêng bạn từ đầu.
dùng253751

5

Nhiều bộ xử lý được điều khiển bởi một máy trạng thái có trình tự chuyển tiếp bị ảnh hưởng bởi các hướng dẫn được thực thi. "Hướng dẫn" của Microcode thường chỉ định các tương tác giữa các thanh ghi và bus khác nhau theo cách mà một lập trình viên không thể nhìn thấy.

Ví dụ: một lệnh vi mã cho CPU 8 bit ở trạng thái # 1 có thể chỉ định rằng đầu ra cho phép cả hai nửa của bộ đếm chương trình phải hoạt động (làm cho bộ đếm chương trình được xuất ra trên bus địa chỉ bên trong và bên dưới), Tín hiệu tăng bộ đếm chương trình phải được kích hoạt, tín hiệu chốt địa chỉ bên ngoài sẽ được kích hoạt (vì vậy bus địa chỉ bên ngoài sẽ theo dõi tín hiệu bên trong) và tín hiệu đọc RAM sẽ được kích hoạt và bộ điều khiển sẽ chuyển sang trạng thái # 2.

Ở trạng thái # 2, bus dữ liệu ngoài sẽ cung cấp cho bus dữ liệu chính bên trong và thanh ghi lệnh, đọc từ bus đó, nên được tải. Bộ đếm chương trình nên như trước là đầu ra trên cả hai nửa của bus địa chỉ và một bộ đọc RAM khác được phát hành. Các bit 5-7 của thanh ghi lệnh nên được tải vào các bit 0-2 của bộ điều khiển trạng thái, bit 3 của thanh ghi trạng thái phải được đặt trừ khi các bit 1-7 của thanh ghi lệnh đều được đặt và các bit khác của thanh ghi trạng thái nên rõ ràng, kết quả cuối cùng là trạng thái tiếp theo sẽ là # 7- # 15.

Lưu ý rằng microcode không thực sự được xác định theo các hướng dẫn, mà là về mặt kết hợp các tín hiệu điều khiển. Phần cứng sẽ không được thiết lập để cho phép các hướng dẫn sử dụng chung trong microcode, mà là để tải hoặc xuất các thanh ghi khác nhau từ / đến các xe buýt mà chúng ngồi hoặc kết nối các xe buýt khác nhau với nhau và sử dụng các bit hoặc kết hợp khác nhau để chọn các trạng thái khác nhau. Nhiều khía cạnh của thiết kế sẽ được kết nối cứng (ví dụ: mã FE và FF có thể được đặt trong phần cứng thay vì trong vi mã). Ý tưởng với microcode không phải là để chạy các chương trình, mà là để thay thế logic.

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.