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
Không có tóm lược sửa đổi
Dòng 8:
Mọi [[vi xử lý]] hay họ vi xử lí đề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ử lí thuộc cùng một kiến trúc máy tính. Những thiết kế vi xử lí kế thừa thường bao gồm các chỉ thị của vi xử lí tiền nhiệm cùng với các chỉ thị mới. Đôi khi, các thiết kế kế thừa 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ử lí đồng bộ cận hoàn toàn cũng có những hành vi bị thay đổi đố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ử lí.
 
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 (như 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 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. 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ử lí ID trong kiến trúc x86 ghi giá trị vài 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ằng số phạm vi rộng hơn, '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.
Not all machines or individual instructions have explicit operands. An accumulator machine has a combined left operand and result in an implicit accumulator for most arithmetic instructions. Other architectures (such as 8086 and the x86-family) have accumulator versions of common instructions, with the accumulator regarded as one of the general registers by longer instructions. A stack machine has most or all of its operands on an implicit stack. Special purpose instructions also often lack explicit operands (CPUID in the x86 architecture writes values into four implicit destination registers, for instance). This distinction between explicit and implicit operands is important in machine code generators, especially in the register allocation and live range tracking parts. A good code optimizer can track implicit as well as explicit operands which may allow more frequent constant propagation, constant folding of registers (a register assigned the result of a constant expression freed up by replacing it by that constant) and other code enhancements.
 
== Chương trình ==