Tập lệnh mã ngữ của họ MCS-51 được xây dựng trên cơ sở mã ngữ của các bộ vi xử lý 8 bít, với những phát triến nhằm tối ưu hóa cho các ứng dụng điều khiển. Mỗi lệnh mã ngữ sẽ xử lý một byte hoặc một bít số liệu nằm ở một thanh ghi hoặc ô nhớ nào đó, nên trong lệnh phải có địa chỉ của số liệu để CPU tìm được số liệu cần xử lý.Cấu trúc mỗi lệnh mã ngữ của MCS-51 gồm có một mã lệnh 8 bít quy định thao tác sử lý, kèm theo từ 0 đến 2 byte toán hạng là số liệu hoặc địa chỉ cần thiết cho việc thực hiện lệnh. Các lệnh mã ngữ sử dụng nhiều phương pháp định địa chỉ khác nhau, vì thế trước hết chúng ta cần tìm hiểu chúng.
TS Nguyễn Lâm Đông
Học viện kỹ thuật quân sự
Tập lệnh mã ngữ của họ MCS-51 được xây dựng trên cơ sở mã ngữ của các bộ vi xử lý 8 bít, với những phát triến nhằm tối ưu hóa cho các ứng dụng điều khiển. Mỗi lệnh mã ngữ sẽ xử lý một byte hoặc một bít số liệu nằm ở một thanh ghi hoặc ô nhớ nào đó, nên trong lệnh phải có địa chỉ của số liệu để CPU tìm được số liệu cần xử lý. Cấu trúc mỗi lệnh mã ngữ của MCS-51 gồm có một mã lệnh 8 bít quy định thao tác sử lý, kèm theo từ 0 đến 2 byte toán hạng là số liệu hoặc địa chỉ cần thiết cho việc thực hiện lệnh. Các lệnh mã ngữ sử dụng nhiều phương pháp định địa chỉ khác nhau, vì thế trước hết chúng ta cần tìm hiểu chúng.
Các phương pháp định địa chỉ được sử dụng trong các lệnh mã ngữ là địa chỉ tức thì, địa chỉ trực tiếp, địa chỉ gián tiếp, địa chỉ thanh ghi, địa chỉ tương đối, địa chỉ tuyệt đối, địa chỉ dài và địa chỉ chỉ số.
Các lệnh sử dụng địa chỉ tức thì có một toán hạng (ký hiệu là #data) chính là số liệu cần xử lý, trình biên dịch nhận biết toán hạng số liệu tức thì nhớ ký tự # đặt trước toán hạng đó.
Các lệnh sử dụng địa chỉ trực tiếp chỉ được dùng để truy cập vùng 128 byte thấp của bộ nhớ RAM trong và các thanh ghi chức năng đặc biệt SFR có địa chỉ ở vùng 128 byte cao của bộ nhớ RAM trong, chúng có toán hạng (ký hiệu là Direct) là địa chỉ 8 bít của ô nhớ hoặc tên thanh ghi SFR chứa số liệu cần xử lý.
Phương pháp địa chỉ gián tiếp cho phép xác định hoặc tính toán địa chỉ của biến để truy cập đến các ô nhớ có giá trị biến đổi khi chương trình chạy, điều này không thể thực hiện được bằng địa chỉ trực tiếp. Các lệnh sử dụng địa chỉ gián tiếp để truy cập đến bộ nhớ RAM trong phải dùng các thanh ghi R0 hoặc R1 làm con trỏ dữ liệu (ký hiệu là @Ri, với i = 0 hoặc 1) Các lệnh truy cập đến bộ nhớ RAM ngoài phải dùng các thanh ghi RO, R1 hoặc thanh ghi 16 bít DPTR làm con trỏ dữ liệu (ký hiệu là @DPTR). Ký hiệu @Ri được hiểu là ô nhớ được trỏ bởi Ri, nghĩa là Ri chứa địa chỉ của ô nhớ cần truy cập, do đó cần thiết lập địa chỉ. của ô nhớ chứa số liệu cần xử lý ở thanh ghi dùng làm con trỏ trước khi thực hiện lệnh dùng con trỏ.
Các lệnh sử dụng địa chỉ thanh ghi chỉ được dùng cho các thanh ghi của băng thanh ghi hiện thời, chúng có toán hạng là tên của một trong các thanh ghi R0-R7 (kí hiệu Rn là thanh ghi thứ n, với n = 0-7).

Bảng 1: Nhóm các lệnh số học
Chỉ có các lệnh nhẩy sử dụng địa chỉ tương đối, chúng có một toán hạng (ký hiệu là Rel) là tên nhãn của điểm nhẩy đến và sẽ được trình biên dịch tính thành giá trị Offset bằng khoảng cách từ lệnh tiếp theo đến vị trí của nhãn, do đó địa chỉ tuyệt đối của điểm nhẩy đến sẽ bằng giá trị hiện tại của bộ đếm chương trình PC cộng với giá trị Offset. Do Offset là giá trị 8 bít có dấu nên tầm nhẩy khi sử dụng địa chỉ tương đối bị giới hạn trong khoảng cách 127 byte đến -128 byte từ vị trí của lệnh tiếp sau lệnh nhẩy.
Chỉ có các lệnh ACALL và AJMP sử dụng địa chỉ tuyệt đối, chúng có một toán hạng là tên nhãn của điểm nhẩy đến và sẽ được trình biện dịch tính thành giá trị 11 bít Absolute bằng khoảng cách từ lệnh tiếp theo đến vị trí của nhãn và đó chính là 11 bít thấp của địa chỉ, còn 5 bít cao của địa chỉ sẽ là 5 bít cao hiện thời của bộ đếm chương trình PC, do đó các lệnh trên chỉ có thể rẽ nhánh chương trình trong giới hạn 2K của bộ nhớ chương trình.
Chỉ có các lệnh LCALL và LJMP sử dụng kiểu định địa chỉ dài, chúng có một toán hạng là tên nhãn của điểm nhẩy đến và sẽ được trình biên dịch tính thành giá trị địa chỉ 16 bít, do đó các lệnh trên cho phép rẽ nhánh chương trình trong không gian 64K của bộ nhớ chương trình.
Chỉ có các lệnh MOVC và JMP sử dụng địa chỉ chỉ số, chúng có một toán hạng là địa chỉ chỉ số được tính bằng tổng của chỉ số được cất trong thanh chứa A với một giá trị cơ sở là nội dung hiện thời của bộ đếm chương trình PC hoặc con trỏ dữ liệu DPTR (ký hiệu là @A+PC hoặc @A+DPTR). Kiểu địa chỉ chỉ số cho phép truy cập chính xác đến các phần tử của bảng số liệu và được dùng để lập bảng rẽ nhánh chương trình.
Tập lệnh mã ngữ của họ MCSL51 được chia thành 5 nhóm là nhóm các lệnh số học, nhóm các lệnh logic, nhóm các lệnh di chuyển số liệu, nhóm các lệnh rẽ nhánh và nhóm các lệnh xử lý bít. Mỗi dạng lệnh mã ngữ thực hiện một thao tác nhất định dối với số liệu, nhưng khi sử dụng với các kiểu địa chỉ khác nhau sẽ tạo ra nhiều lệnh cụ thể, mỗi lệnh có mã lệnh và yêu cầu các toán hạng kèm theo khác nhau. Để ngắn gọn và tiện cho độc giả sử dụng sau này, chúng tôi trình bày tập lệnh mã ngữ của họ MCS-51dưới dạng các bảng theo từng nhóm lệnh. Trong các bảng, cột (4) là số byte của lệnh; Cột (5) là số chu kỳ máy TM cần thiết để thực hiện lệnh, mỗi chu kỳ máy bằng 6 chu kỳ xung nhịp Tc từ đó tính được thời gian thực hiện một lệnh bằng 6.TM.TC ; Cột (6) là byte mã lệnh < thực được lệnh khi sau lập) hoặc (xóa đổi thay bị thể có cờ các là (7) Cột lệnh; một của theo kèm aaaaH) eeH, bbH, (aaH, chỉ địa (ddH) thì tức liệu số byte và phân) nhị Hexa dạng tiên đầu>

Bảng 2: Nhóm các lệnh logic

Bảng 3: Nhóm các lệnh truyền số liệu

Bảng 4: Nhóm các lệnh rẽ nhánh chương trình

Bảng 5: Nhóm các lệnh xử lý bít
Các bảng trên cung cấp đầy đủ thông tin về tập lệnh mã ngữ của họ MCS-51 để độc giả có thể viết các chương trình ứng dụng. Nếu độc giả muốn tìm hiểu chi tiết hơn về cả phần cứng và phần mềm của họ MCS-51, hãy tìm đọc tài liệu "Họ vi điều khiển 8051" của các tác giả Tống Văn On và Hoàng Đức Hải do Nhà xuất bản Lao động phát hành năm 2001, hoặc tài liệu “8 bít CMOS Single - Chíp Microcontroller 80C51/80C52 - Use"s Manual” của các hãng lntel, Siemens.
HIENDAIHOA.COM(theo: Tạp chí TĐHNN)































