2012-04-25 29 views
9

Có vẻ như có nhiều ý kiến ​​về mã máy thực sự là gì. Tôi đã nghe một số người nói đó là lắp ráp, hoặc nhị phân, hoặc hex.Mã máy thực tế trông như thế nào ở các điểm khác nhau?

Có đúng là mã máy chủ yếu là bộ hướng dẫn cho một bộ xử lý cụ thể không? Nếu vậy, tôi hình dung chúng có thể được biểu diễn dưới dạng ký hiệu nhị phân hoặc thập lục phân hoặc lắp ráp. Nhưng mã máy "thực tế" không được dịch như thế nào? Nó có dựa trên kích thước từ của kiến ​​trúc không? Hoặc là hệ thập lục phân cho tất cả các ý định và mục đích đại diện mặc định?

Trông giống như thế nào khi ngồi trên ổ cứng? Nó trông như thế nào khi ngồi trong sổ đăng ký? Làm thế nào về khi nó đang được xử lý, nó chỉ đơn giản là một bộ thay đổi điện áp tại thời điểm đó?

+6

Đó là giá trị nhị phân với ý nghĩa duy nhất để xử lý cụ thể. Bạn có thể biểu diễn nó dưới dạng hex nếu bạn muốn, hoặc bất kỳ cơ sở nào khác bạn thích. Nó "trông giống như" tuy nhiên bạn chọn để đại diện cho nó. –

+2

Nó không phải là lắp ráp, nhị phân, hoặc hex, đó là tất cả chúng :-) Họ là tất cả chỉ là đại diện của cùng một điều. Cuối cùng lắp ráp và hex cả hai bản đồ xuống đến nhị phân. Bản đồ nhị phân đó chuyển xuống trạng thái của một loạt các bóng bán dẫn trong CPU. Trạng thái đó có thể đại diện cho một lệnh để được xử lý, hoặc nó có thể đại diện cho dữ liệu được làm việc. – Benj

+1

Đó là số không và số, không có gì khác. Hex và hướng dẫn lắp ráp dành cho mọi người, không phải máy tính. –

Trả lời

15

Mã máy chỉ đơn giản là dữ liệu nhị phân tương ứng với hướng dẫn CPU cho kiến ​​trúc bộ vi xử lý cụ thể.

Tôi sẽ không đi vào cách nó được lưu trữ quá nhiều, bởi vì điều đó phụ thuộc vào nơi nó được lưu trữ. Trên đĩa, ví dụ, nó thường được lưu trữ như là một chuỗi các khu vực từ hóa. Mã máy không khác với dữ liệu nhị phân khác trong khía cạnh lưu trữ. Nếu câu hỏi của bạn là nhiều hơn về cách dữ liệu được lưu trữ trên máy tính, bạn nên nghiên cứu các thiết bị lưu trữ dữ liệu khác nhau trong một máy tính, như HDD, RAM và đăng ký, để đặt tên một vài.

Cách dễ nhất để trực quan hóa cách mã máy được lưu trữ là xem một số trong trình chỉnh sửa hex. Điều này cho bạn thấy dữ liệu nhị phân được biểu thị bằng số thập lục phân. Ví dụ, đi hướng dẫn:

0xEB 0xFE 

Điều này có thể dễ dàng được viết 1110101111111110, hoặc 60414. Nó phụ thuộc vào cách bạn muốn chuyển đổi nhị phân thành hình dạng con người có thể đọc được.

Hướng dẫn này thể hiện vòng lặp vô hạn. (Đây là giả định nó đang được chạy trên một CPU x86 khác CPU có thể giải thích nó tuy nhiên họ muốn..) Nó có thể được mã hóa trong lắp ráp như thế này:

j: 
jmp j 

Khi bạn chạy lắp ráp, phải mất mã ở trên và biến nó thành mã máy nhị phân ở trên.

Hướng dẫn thực sự là hai phần. Đầu tiên là cái được gọi là opcode, và là 0xEB. Khi mã này đi vào CPU, điều đó có nghĩa là: Đọc một byte từ chương trình và bỏ qua nhiều byte dữ liệu đó. Sau đó, CPU đọc byte 0xFE. Vì nó mong đợi một số nguyên có dấu, nó giải thích dữ liệu nhị phân là số -2. Hướng dẫn sau đó được thực hiện đang được đọc, và con trỏ chỉ dẫn di chuyển về phía trước 2 byte. Sau đó lệnh được thực hiện, làm cho con trỏ chỉ thị di chuyển về phía trước -2 (0xFE) byte, nó sẽ đặt con trỏ lệnh thành giá trị giống như khi nó được bắt đầu.

Tôi hy vọng điều này sẽ trả lời câu hỏi của bạn. Nếu bạn đang băn khoăn về các hoạt động bên trong của CPU, hãy đọc trên các cổng logic và mã hóa điện tử. Về cơ bản, đó là một loạt các sự khác biệt điện áp, chẳng hạn như 1 bit là một phí 5 volt và 0 bit là một khoản phí 0 bit.

+0

Vì vậy, để làm rõ, nó chính xác hơn để tham khảo mã máy như mã byte, không thực sự đại diện như mã nhị phân. Chắc chắn, một tập hợp các bit tạo thành một byte, nhưng kích thước nguyên tử tối thiểu của các lệnh máy thực sự tồn tại ở mức byte? –

+0

Trong thực tế, hầu như luôn luôn, vì công nghệ hiện tại được thiết kế để làm việc với byte chứ không phải bit. Về lý thuyết, không. Ví dụ, một CPU dựa trên ngôn ngữ não * ck có thể có hướng dẫn 3 bit. –

+0

Cảm ơn Kendall, bạn nên hiểu rằng việc trừu tượng dữ liệu không bắt đầu cho đến khi bạn nhận được hướng dẫn đa bit (thường là byte). Tôi đoán rõ ràng bây giờ tôi nói điều đó, nhưng đó là một sự mặc khải. –

-2

Giải thích cho người mới bắt đầu

Từ mặt đất lên một máy tính có rất nhiều 'công tắc'. Ví dụ đèn LED có thể được tắt
hoặc bật, chỉ có 2 tùy chọn (1 = hoặc 0 = tắt). Nếu bạn có 2 đèn LED, bạn có thể tắt đèn LED 1 và
2 và ngược lại, hoặc bạn có thể bật hoặc tắt cả hai đèn LED. Hiện nay có nhiều khả năng hơn.

Bạn có thể tính toán có bao nhiêu khả năng khác nhau.
1 đèn = 2^= 2 khả năng
2 đèn = 2^= 4 khả năng
8 đèn = 2^= 256 khả năng

Vì vậy, các máy tính chỉ đọc Zero và của một người. Máy tính có nhiều công tắc tùy thuộc vào dung lượng CPU. Để nói với máy tính để kích hoạt một chiếc đèn bạn cần phải thêm 0 và 1 vào hệ thống và đó sẽ là một nhiệm vụ rất khó khăn. Để tránh điều này, họ đã chuyển đổi các khả năng thành một số thập lục phân. Lắp ráp chỉ là một ngôn ngữ máy tính sẽ chuyển đổi các chữ cái bạn đã nhập vào 0 và 1 (mã nhị phân) và làm theo hướng dẫn.

6

Giống như tôi, bạn dường như tò mò về cách máy tính hoạt động dưới mui xe. Tôi không biết đủ để trả lời câu hỏi của bạn tốt (và đó là một chủ đề lớn anyway), nhưng tôi rất khuyên bạn nên Steve Gibson của "Hãy thiết kế một máy tính" loạt podcast. Dưới đây là một đoạn trích từ bảng điểm "Ngôn ngữ máy", để cho bạn một hương vị của nó. . .

Và tất cả các phương tiện bỏ qua là, thay vì thêm một vào bộ đếm chương trình, chúng tôi thêm hai hoặc thêm một lần, thực tế là các máy này hoạt động trở lại như thế nào. Và điều đó chỉ khiến chúng tôi bỏ qua một bước nhảy. Vì vậy, về cơ bản điều đó có nghĩa là chúng ta có thể chi nhánh đến bất cứ nơi nào chúng ta muốn trong bộ nhớ hoặc tiếp tục trên con đường của chúng ta, cho chúng ta, mặc dù điều đó rất đơn giản, mang lại cho chúng ta đủ sức mạnh để cho phép máy móc đưa ra quyết định. Và chúng tôi có đầu vào/đầu ra; chúng ta có toán; chúng tôi có khả năng chuyển dữ liệu từ một vị trí này sang bộ nhớ khác. Đó là tất cả các yếu tố cần thiết của cách máy hoạt động. Đó là ngôn ngữ máy.

Bây giờ, một lớp nhân loại được đặt lên trên đó là những gì được gọi là "ngôn ngữ lắp ráp", đó là gì, nhưng đặt tên cho mọi thứ. Ví dụ, bạn tạo ra một loại gọi là ghi nhớ cho các hướng dẫn khác nhau. Vì vậy, ví dụ, nạp bộ tích lũy sẽ là LDA. Lưu trữ bộ tích lũy, STA. Bạn muốn chúng ngắn gọn vì bạn sẽ đánh máy rất nhiều. Hãy nhớ rằng bạn sẽ sử dụng rất nhiều hướng dẫn nhỏ để hoàn thành công việc. Và sau đó điều duy nhất khác thực sự là ngôn ngữ lắp ráp, nó cho phép bạn đặt tên các vị trí trong bộ nhớ.

Vì vậy, ví dụ: bạn có thể nói LDA, cho trình tích lũy tải, điểm hiện tại. Và điểm số hiện tại sẽ chỉ đơn giản là tham chiếu đến, giống như một biến cơ bản, một vị trí trong bộ nhớ mà bạn đã gắn nhãn "điểm hiện tại". Và sau đó nếu bạn đã STA, lưu trữ ắc quy, điểm số mới, tốt, trước tiên nó sẽ tải điểm số hiện tại vào ắc quy, và sau đó lưu trữ nó vào một vị trí khác được gọi là điểm số mới. Vì vậy, thực sự đó là tất cả những gì chúng ta đang nói đến là một số từ viết tắt đơn giản để giúp nhớ và sử dụng các hướng dẫn riêng lẻ này và các nhãn thuận tiện cho các vị trí trong bộ nhớ để bạn không phải nhớ, ồ, đó là ở vị trí 329627. Ý tôi là, ai có thể làm vậy? Vì vậy, thay vào đó bạn chỉ, bạn gắn nhãn vị trí đó bằng tiếng Anh, một cụm từ chữ và số của một số loại, và sau đó bạn tham khảo vị trí đó theo cụm từ chứ không phải bằng số thực của nó.

Và thực tế bạn không quan tâm số đó là gì. Đó là một trong những điều mà người lắp ráp sẽ làm cho bạn là bạn chỉ nói rằng tôi cần bộ nhớ gọi là những thứ này. Và nó lo lắng về nơi họ đi bởi vì nó không thực sự quan trọng với bạn miễn là họ liên tục được nhắc tới. Và đó là toàn bộ quá trình. Đó là ngôn ngữ máy và ngôn ngữ lắp ráp. Và đó là cách nó đã được 50 năm trước, và nhiều hơn hoặc ít hơn đó là cách nó bây giờ.

. .nhưng anh ta còn lùi xa hơn thế này và bắt đầu với các bóng bán dẫn và các cổng logic. Từ những gì tôi có thể nói, đây là loạt đầy đủ (và khán giả nghe đã góp phần sơ đồ hữu ích trong wiki):

Nếu bất cứ ai có vấn đề với bất cứ điều gì Steve nói trong các tập phim, những nơi tốt nhất để cung cấp thông tin phản hồi là http://www.grc.com/feedback.htm hoặc http://www.grc.com/discussions.htm hoặc https://twitter.com/SGgrc