CPU thực hiện chương trình bằng cách thực hiện tuần tự các lệnh trong bộ nhớ chính 1.4.7.1 Cấu trúc lệnh
Cấu trúc của một lệnh có thể có các dạng sau:
-Mã lệnh: là phần chứa thông tin xác định các thao tác hoặc công việc cần được thực hiện. CPU x86 thực hiện một tập các nhóm lệnh:
37 - Nhóm lệnh chuyển số liệu: MOV, PUSH, POP ...
- Nhóm lệnh rẽ nhánh và điều khiển: JMP, CALL, RET, INT, LOOP, CLI, STI, ... - Nhóm lệnh vào ra: IN, OUT
- Các lệnh khác: logic, thao tác bít, xử lý xâu...
- Phần địa chỉ: là phần thông tin xác định nơi chứa toán hạng. Các nơi có thể chứa toán hạng:
+ Tức thời trong lệnh (giá trị toán hạng nằm ngay trong lệnh). + Các thanh ghi của CPU.
+ Bộ nhớ.
1.4.7.2 Các phương pháp xác định địa chỉ toán hạng
Các phương pháp xác định địa chỉ toán hạng (Các phương pháp định vị toán hạng) cho phép xác định nơi chứa toán hạng. Nơi chứa toán hạng có thể là: Trên lệnh, thanh ghi và bộ nhớ. Bộ nhớ mặc định được hiểu là đoạn dữ liệu, xác định địa chỉ ô nhớ là xác định địa chỉ offset hiệu dụng của ô nhớ trong đoạn đó. Trong các trường hợp khác cần chỉ rõ đoạn nhớ cần truy nhập, ví dụ ES: [địa chỉ offset].
Có ba nhóm chế độ định vị toàn hạng + Định vị tức thời
+ Định vị thanh ghi + Định vị bộ nhớ.
Các thao tác có thể xẩy ra giữa các đối tượng sau: Thanh ghi Tức thời
Thanh ghi Thanh ghi Bộ nhớ Tức thời
Bộ nhớ Thanh ghi
- Định vị tức thời: Dữ liệu nằm ngay trong câu lệnh
Ví dụ: MOV AX. 0F000h: đưa giá trị F000h vào AX
- Định vị thanh ghi : Các thanh ghi đa năng, các thanh ghi địa chỉ hoặc các thanh ghi đoạn của CPU là nơi chứa dữ liệu.
Ví dụ: MOV AX. BX: đưa giá trị ở BX và AX
- Định vị bộ nhớ: Phương pháp định vị bộ nhớ cho phép xác định địa chỉ offset (địa chỉ lệch) của ô nhớ chứa toán hạng, ô nhớ mặc định nằm trong đoạn dữ liệu.
Có các phương pháp định vị bộ nhớ sau: - Định vị trực tiếp - Định vị gián tiếp. - Định vị cơ sở - Định vị chỉ số - Định vị cơ sở chỉ số - Định vị đầy đủ.
+ Định vị trực tiếp : Địa chỉ ô nhớ chứa dữ liệu nằm ngay trong lệnh. Địa chỉ offset = [giá trị cụ thể]
38 Ví dụ: MOV AX, [1000h]: Đưa nội dung ô nhớ có địa chỉ
DS: 1000h vào AX
MOV AX. ALFA: ALFA là tên tiến đã được khai báo
+ Định vị gián tiếp (thanh ghi).
Các thanh ghi địa chỉ BX, BP, SI, DI, SP là nơi chứa địa chỉ ô dữ liệu. Ví dụ: MOV AX, [BX] ;
Trong đó [BX]: = 1000h : lệnh thực hiện đưa nội dung ô nhớ có địa chỉ DS:1000h vào AX.
+ Định vị cơ sở :
Phương pháp định vị cơ sở thường được dùng trong các thao tác với phần tử mảng dữ liệu hoặc với các cấu trúc dữ liệu tương đương.
Ví dụ: MOV AX, [BX + 10h] ;
Trong đó [BX] = 1000h, lệnh thực hiện đưa nội dung ô nhớ có địa chỉ DS:1010h vào AX.
39 + Định vị chỉ số :
Ví dụ: MOV AX, [SI + 1000h] ;
Trong đó [SI] = 10h. lệnh thực hiện đưa nội dung ô nhớ có địa chỉ DS:1010h vào AX.
Điều khác biệt giữa phương pháp định vị chỉ số so với phương pháp định vị cơ sở bắt đầu từ hệ 32 bit là có thể viết (SI*bội số). (DI*bội số). Bội số là 1, 2, 4, 8.
Sự khác nhau giữa định vị chỉ số và định vị cơ sở ?
Ví dụ : 1 chuỗi dữ liệu được chứa trong các ô nhớ có địa chỉ A, A+1, A+2. Muốn chuyển chuỗi này tới vị trí B, B+1, B+2
Phương án đưa ra là : Mov B,A Mov B+1, A+1 Mov B+2,A+2
Thực hiện bằng phương pháp định vị gián tiếp : Dùng 2 thanh ghi sau mỗi lần thực hiện lệnh 2 thanh ghi lại tăng lên 1.
Một giải pháp khác đưa ra là sử dụng 1 thanh ghi chỉ số. Khi này địa chỉ ô nhớ sẽ gồm 2 phần : Nội dung thanh ghi chỉ số và một hằng số (bằng tổng thanh ghi chỉ số cộng với hằng số). Với cách này chỉ cần dùng một thanh ghi cho vòng lặp sao chép bằng cách khởi động cho thanh ghi chỉ số bằng 0 (SI=0) rồi tăng dần nội dung thanh ghi này lên 1 lượng bằng kích thước của khối dữ liệu cần sao chép.
- Định vị cơ sở chỉ số :
40 trong đó [BX] =1000h, [SI] =10h. Lệnh thực hiện đưa nội dung ô nhớ có địa chỉ DS:1010h vào AX.
Phương pháp định vị cơ sở chỉ số thường được dùng trong các thao tác với mảng dữ liệu hoặc với các cấu trúc dữ liệu tương đương.
- Định vị đầy đủ :
Địa chỉ offset= [Thanh ghi cơ sở + Thanh ghi chỉ số + khoảng dịch].
Phương pháp định vị này thường được dùng trong các thao tác với mảng dữ liệu hai chiều hoặc với các cấu trúc dữ liệu phức tạp.