Thứ hai dùng lệnh gián tiếp để chuyển giá trị 00H vào vị trí được trỏ bởi R0 Lệnh thứ

Một phần của tài liệu Thiết kế và thi công máy tính tiền siêu thị cửa hàng (Trang 40 - 41)

IV. THIẾT KẾ CHƯƠNG TRÌNH DÙNG CÁC NGẮT:

thứ hai dùng lệnh gián tiếp để chuyển giá trị 00H vào vị trí được trỏ bởi R0 Lệnh thứ

3 tăng giá trị con trỏ đến địa chỉ tiếp theo. Và lệnh cuối kiểm tra xem con trỏ đến cuối khối chưa. Lệnh kiểm tra dùng giá trị 80H chứ không phải giá trị 7FH vì việc xây ra sau việc dịch chuyển gián tiếp. Như vậy chắc chắn cuối cùng sẽ được ghi trước khi kết thúc.

Định vị tức thời :

Khi một toán hạng nguồn là một hằng số không phải là một biến. Hằng số có

thể được gom vào trong lệnh như một đữ liệu tức thời. Byte được thêm vào sẽ chứa giá trị.

Opcode Immediate data

Trong ngôn ngữ assembly toán hạng tức thời được đặt trước bằng ký hiệu số (#). Toán hạng có thể là một hằng số, ký hiệu hoặc toán tử. Trình biên dịch sẽ tính

toán giá trị và gán dữ liệu tức thời vào lệnh.

Tất cả các lệnh dùng định vị tức thời đều sử dụng hằng dữ liệu 8 bit. Ngoại trừ

khi khởi động thanh ghi con trỏ dữ liệu (DPTR)

MOV DPTR, #40000H;

Là một lệnh 3 bytes nạp số 16 bit vào thanh ghi con trỏ. Định vị tương đối:

Định vị tương đối chỉ dùng trong các lệnh jump. Địa chỉ tương đối (offset) là một số 8 bit có dấu được cộng vào thanh ghi đếm chương trình để chỉ ra địa chỉ của lệnh tiếp theo phải thi hành. Vì offset là một số 8 bit có dấu nên tầm nhảy chỉ giới

hạn trong khoảng cách +127 và —128 vị trí.

Trước khi cộng, thanh ghi đếm chương trình tăng lên đến địa chỉ sau lệnh Jump. Vì vậy, địa chỉ mới là tương đối so với địa chỉ lệnh kế tiếp chứ không phải địa chỉ lệnh jump.

Thông thường chỉ tiết này không liên quan đến người lập trình, khi mà đích nhảy đến được mô tả bằng một nhãn. Trình biên địch sẽ định giá trị offset tương đối

tương ứng.

Opcode Relative offset

Chương III: Tóm tắt tập lệnh

Ví dụ nếu nhãn THERE được đặt tại lệnh có địa chỉ 1040H và lệnh

SJMP THERE (adsbygoogle = window.adsbygoogle || []).push({});

Ở tại vị trí 1000H và 1001H. Trình biên dịch sẽ gán giá trị offset tương đối là 3EH tại

byte thứ hai của lệnh. Định vị tuyệt đối:

Định vị tuyệt đối chỉ dùng đối với các lệnh ACALL, AJMP. Lệnh 2 byte này cho phép rẽ nhánh trong phạm vi 2Kbytes bộ nhớ. 5bit cao của địa chỉ đích là 5 bit cao hiện thời trong thanh ghi đếm chương trìng. Vì vậy lệnh theo sau lệnh rẽ nhánh

và lệnh kết thúc rẽ nhánh kết thuác nằm trong phạm vi 2Kbytes.

|_ Addr 10— Addr8 Opcode 5-bit Addr7 - Addr0

Định vị xa:

Định vị xa chỉ sử dụng cho các lệnh LCALL và LMP. Các lệnh 3-byte này có

địa chỉ đích là số 16-bit đặt trong byte 2 và byte 3. Điễu thuận tiện là toàn bộ vùng mã lệnh đều có thể được sử dụng. Nhưng một điều bất tiện là lệnh 3-byte quá đài và

phụ thuộc vị trí (posiion-dependent). Phụ thuộc vị trí là một điệu bất tiện bởi vì chương trình không thể thi hành tại một địa chỉ khác.

Opcode Addr15 — Addr§ Addr7 —- Addr0

Định vị chỉ số :

Định vị chỉ số dùng một thanh ghi cơ sở (PC hoặc DPTR) và một thanh ghi làm offset (ACC) tạo ra một địa chỉ sẽ bị tác động bởi các lệnh JMP hoặc MOVC.

Thanh ghi nền Offset địa chỉ tác động

PC or DPTR + ACC =

Các ví dụ được cung cấp trong phụ lục cho các lệnh:

MOVC A, ®A+ <thanh ghi nễn>

JMP @®A+DPTR

Một phần của tài liệu Thiết kế và thi công máy tính tiền siêu thị cửa hàng (Trang 40 - 41)