Phương thức địa chỉ và cách sử dụng
| Phương thức |
Ví dụ (MOV đích, nguồn) |
Vị trí tham số |
Đặc điểm |
| **Số ngay** |
MOV ECX, 0x5A3F |
Trong lệnh |
Đưa giá trị hằng trực tiếp vào thanh ghi. |
| **Thanh ghi** |
MOV EDX, ECX |
Thanh ghi CPU |
Tốc độ nhanh nhất, dùng cho thao tác giữa các thanh ghi. |
| **Trực tiếp** |
MOV EAX, [0x7000] |
Địa chỉ bộ nhớ cố định |
Truy cập biến tĩnh qua địa chỉ cụ thể. |
| **Gián tiếp thanh ghi** |
MOV EBX, [EDX] |
Bộ nhớ chỉ bởi thanh ghi |
Thanh ghi đóng vai trò con trỏ, dùng cho duyệt mảng. |
| **Thanh ghi + lệch** |
MOV EAX, [ESI + 0x12] |
[Thanh ghi cơ sở + lệch] |
Truy cập trường cấu trúc hoặc phần tử mảng (lệch cố định). |
| **Cơ sở + chỉ số** |
MOV EAX, [EBX + EDI] |
[Thanh ghi cơ sở + thanh ghi chỉ số] |
Phù hợp cho mảng 2 chiều (cơ sở hàng + chỉ số cột). |
| **Cơ sở + chỉ số tỷ lệ** |
MOV EAX, [ECX + EDI*8 + 0x30] |
[Cơ sở + chỉ số*phân số + lệch] |
Cơ chế linh hoạt nhất cho mảng (phân số 1,2,4,8 tương ứng với BYTE, WORD, DWORD, QWORD). |
1. Số ngay
Giá trị hằng được nhúng trực tiếp vào mã lệnh.
- Định dạng: MOV thanh_ghi_mục_tiêu, số_ngay
- Ví dụ:
MOV BL, 0xAA ; Gán giá trị 8-bit AA vào BL
MOV DX, 0x1234 ; Gán giá trị 16-bit vào DX
MOV RAX, 0x12345678 ; Gán giá trị 32-bit vào RAX
- Lưu ý: Số ngay chỉ dùng làm nguồn. Kích thước phải khớp với thanh ghi đích.
2. Thanh ghi
Tham số nằm trực tiếp trong thanh ghi CPU.
- Định dạng: MOV thanh_ghi_mục_tiêu, thanh_ghi_nguồn
- Ví dụ:
MOV EDX, EAX ; Sao chép giá trị từ EAX sang EDX
ADD EDX, ECX ; EDX = EDX + ECX
XOR EBX, EBX ; Xóa EBX (hiệu quả hơn MOV EBX, 0)
- Lưu ý: Phương thức nhanh nhất, không truy cập bộ nhớ.
3. Trực tiếp
Sử dụng địa chỉ bộ nhớ cụ thể.
4. Gián tiếp thanh ghi
Thanh ghi chứa địa chỉ truy cập bộ nhớ.
5. Thanh ghi + lệch
Kết hợp thanh ghi và lệch cố định.
- Định dạng: MOV thanh_ghi, [thanh_ghi + lệch]
- Ví dụ:
MOV EAX, [EBX + 0x10] ; Truy cập trường cấu trúc
MOV EAX, [EBP - 0x20] ; Truy cập biến cục bộ
MOV EAX, [ESI + 0x40] ; Truy cập phần tử mảng thứ 10 (0x40 = 10*4)
- Lưu ý: Lệch có thể âm/dương, hỗ trợ truy cập cấu trúc dữ liệu.
6. Cơ sở + chỉ số
Kết hợp hai thanh ghi để tính địa chỉ.
7. Cơ sở + chỉ số tỷ lệ
Cơ sở + chỉ số * hệ số tỷ lệ (1,2,4,8) + lệch.
Phương pháp chọn lựa
- Tối ưu tốc độ: Ưu tiên thanh ghi (không truy cập bộ nhớ).
- Biến cục bộ: Dùng [EBP +/- lệch] (thanh ghi + lệch).
- Mảng: Dùng cơ sở + chỉ số tỷ lệ (ví dụ [EDX + ECX*4]).
- Con trỏ: Dùng gián tiếp thanh ghi ([ESI]).