Khác biệt giữa bản sửa đổi của “Ngôn ngữ máy”

Nội dung được xóa Nội dung được thêm vào
n →‎Hợp ngữ: sửa chính tả 1, replaced: , → , using AWB
n replaced: xử lí → xử lý (15) using AWB
Dòng 3:
Mã máy nhị phân (khác với mã hợp ngữ) có thể được xem như là phương thức biểu diễn thấp nhất của một chương trình đã biên dịch hay hợp dịch, hay là [[ngôn ngữ lập trình]] nguyên thủy phụ thuộc vào phần cứng (ngôn ngữ lập trình thế hệ đầu tiên). Mặc dù chúng ta hoàn toàn có thể viết chương trình trực tiếp bằng mã nhị phân, việc này rất khó khăn và dễ gây ra những lỗi nghiêm trọng vì ta cần phải quản lí từng [[bit]] đơn lẻ và tính toán các địa chỉ và hằng số học một cách thủ công. Do đó, ngoại trừ những thao tác cần tối ưu và gỡ lỗi chuyên biệt, chúng ta rất hiếm khi làm điều này.
 
Hiện nay, hầu như tất cả các chương trình máy tính trong thực tế đều được viết bằng các ngôn ngữ bậc cao hay (đôi khi) hợp ngữ, và sau đó được dịch thành mã máy thực thi bằng các công cụ phụ trợ như trình biên dịch, trình hợp dịch hay trình liên kết. Ngoài ra, các chương trình được viết bằng ngôn ngữ [[Thông dịch (máy tính)|thông dịch]] thì được dịch sang mã máy nhờ trình thông dịch tương ứng (có thể xem như là trình thực thi hay trình xử ). Các trình thông dịch này thường bao gồm các mã máy thực thi trực tiếp (sinh ra từ mã nguồn hợp ngữ hay các ngôn ngữ bậc cao).
 
== Các chỉ thị mã máy ==
Mọi [[vi xử lý]] hay họ vi xử đều có những tập chỉ thị mã máy riêng biệt. Các chỉ thị này là các mẫu bit được thiết kế tương ứng với những lệnh khác nhau của máy tính. Do đó, những tập chỉ thị này là riêng biệt của một lớp vi xử thuộc cùng một kiến trúc máy tính. Những thiết kế vi xử kế thừa thường bao gồm các chỉ thị của vi xử tiền nhiệm cùng với các chỉ thị mới. Đôi khi, các thiết kế kế thừa lại loại bỏ hay thay đổi chức năng một số mã chỉ thị (vì chúng cần dùng cho mục đích mới), gây ảnh hưởng đến sự đồng bộ mã nguồn ở một mức độ nhất định. Thậm chí, các vi xử đồng bộ cận hoàn toàn cũng có những sự biến đổi hành vi đối với một số chỉ thị, nhưng điều này rất hiếm xảy ra. Các hệ thống còn có thể khác nhau ở một số thành phần khác như phương thức sắp xếp bộ nhớ, hệ điều hành hay thiết bị ngoại vi. Vì các chương trình hay phụ thuộc vào các yếu tố này, các hệ thống khác nhau khó có thể chạy cùng một mã máy, ngay cả khi chúng sử dụng cùng một loại vi xử .
 
Một tập chỉ thị có thể có độ dài chỉ thị thống nhất hay biến động. Cách các bit được sắp xếp thay đổi rất lớn giữa các kiến trúc khác nhau hay các loại chỉ thị khác nhau. Hầu hết các chỉ thị có một hay nhiều vùng mã vận hành để phân biệt các chỉ thị cơ sở (như tính toán hay nhảy) và các chỉ thị thực (như cộng hay so sánh), và các vùng khác biểu diễn loại toán hạng, phương thức biểu diễn địa chỉ, các chỉ số địa chỉ hay các giá trị thực (các toán hạng hằng được chứa trong chỉ thị như vậy được gọi là ''giá trị tức thời).''
 
Không phải tất cả các máy tính hay chỉ thị đơn lẻ đều có toán hạng hiện (rõ ràng). Một máy tính thanh chứa có sự kết hợp giữa toán hạng trái và kết quả tính toán lưu trong một thanh chứa ẩn đối với hầu hết các chỉ thị đại số. Một số kiến trúc khác (như 8086 hay x86) có phiên bản sử dụng thanh chứa của các chỉ thị thông dụng, và thanh chứa được xem như là một trong những thanh ghi tổng quát nhất của chỉ thị dài. Trong khi đó, một máy tính ngăn xếp lại lưu hầu hết các toán hạng trong một ngăn xếp ẩn. Những chỉ thị chuyên biệt cũng thường thiếu toán tử hiện (ví dụ, vi xử ID trong kiến trúc x86 ghi giá trị vào bốn thanh ghi địa điểm ẩn). Sự khác biệt giữa toán tử hiện và ẩn cho phép sử dụng nhiều hơn hằng số có phạm vi rộng, 'uốn nắn' các thanh ghi liên tục (lưu giá trị hằng số khác đè lên giá trị đã có của thanh ghi) và rất nhiều ưu điểm vượt trội khác.
 
== Chương trình ==
[[Chương trình máy tính]] thực chất chỉ là một chuỗi những chỉ thị viết bằng mã máy được thực thi bởi [[CPU]]. Trong khi một số vi xử đơn giản thực thi lần lượt các chỉ thị, vi xử đa luồng có khả năng thực thi đồng loạt nhiều chỉ thị.
 
Mạch chạy của chương trình chịu ảnh hưởng của những chỉ thị "nhảy" đặc biệt có khả năng thay đổi tiến trình đến một chỉ thị khác với chỉ thị có thứ tự sau đó. Những bước nhảy điều kiện được thực thi hay không là tùy thuộc vào các trạng thái nhất định.
 
== Hợp ngữ ==
[[Hợp ngữ]], một phiên bản gần hơn với ngôn ngữ tự nhiên của ngôn ngữ máy, sử dụng những kí hiệu dễ nhớ để thể hiện các chỉ thị mã máy, thay vì sử dụng trực tiếp các chuỗi nhị phân. Ví dụ, trên vi xử Zilog Z80, mã nhị phân <code>00000101</code>, dùng để giảm giá trị của thanh ghi <code>B</code> của vi xử , được viết bằng hợp ngữ như sau <code>DEC B</code>.
 
== Ví dụ ==
Dòng 42:
 
== Mối quan hệ giữa ngôn ngữ máy và vi mã ==
Trong một số [[Kiến trúc máy tính]], ngôn ngữ máy được cài đặt bởi một lớp chương trình cơ sở hơn ở dưới nó, gọi là vi chương trình (microprogram). Vi chương trình tạo một giao diện ngôn ngữ máy thống nhất giữa các mô hình máy tính khác nhau, với những mạch xử dữ liệu khác nhau, trong cùng một dòng hay họ. Điều này đã giúp việc chuyển chương trình mã máy qua các mô hình máy tính khác nhau dễ dàng hơn rất nhiều. Họ máy tính và vi xử IBM System/360 là một ví dụ điển hình. Mặc dù dòng xử dữ liệu có độ lớn khác nhau, từ 8 bits đến lớn hơn 16 bits, nhưng tất cả máy tính thuộc cùng một dòng đều sử dụng một kiến trúc máy tính thống nhất ở mức độ ngôn ngữ máy.
 
Ngoài ra, việc sử dụng vi mã (microcode) để cài đặt giả lập cho phép một máy tính sao chép kiến trúc của một máy tính hoàn toàn khác. Nhờ đó, dòng System/360 có thể chạy chương trình của những máy tính IBM đời cũ đến cả những họ máy tính đời mới, như giả lập IBM 1401/1440/1460 trên máy tính IBM S/360 mẫu 40.