1️⃣Modes

Có 3 modes chính:

  • Xử lí thanh ghi: register addressing

  • Xử lí trực tiếp: Immediate addressing

  • Xử lí bộ nhớ: Memory addressing

Register Addressing

Mỗi thanh ghi chứa một toán hạng. Phụ thuộc vào các instruction, thanh ghi có thể là toán hạng thứ nhất hoặc toán hạng thứ hai hoặc cả. Ví dụ:

mov dx, buffer   ; Register is first operand
mov count, cx	   ; Register in second operand
mov eax, ebx	   ; Both the operands are in registers

Vì việc xử lý dữ liệu giữa các thanh ghi không liên quan đến bộ nhớ nên nó xử lý dữ liệu rất nhanh.

Immediate Addressing

Một toán hạng immediate có một giá trị hằng số hoặc một biểu thức. Khi một instruction với 2 toán hạng sử dụng immediate addressing, thì toán hạng thứ nhất có thể là một thanh ghi hoặc một địa chỉ bộ nhớ và toán hạng thứ hai là một hằng số immediate(trực tiếp). Toán hạng đầu tiên xác định độ dài của dữ liệu. Ví dụ:

section .data
byte_value  db  150    ; A byte value is defined
word_value  dw  300    ; A word value is defined
section .text
    global _start
_start:
add  byte_value, 65    ; An immediate operand 65 is added
mov  ax, 0x45           ; Immediate constant 0x45 is transferred to AX

Direct Memory Addressing

Hiểu đơn giản thì mode này sẽ tương tác trực tiếp với các dữ liệu trong .data section, truy cập tới các vùng nhớ cụ thể, với các thanh ghi hoặc ngược lại. Đặc điểm của mode này là tương đối chậm vì phải truy cập và thao tác với memory.Ưu thế của mode này là việc truy cập đến bộ nhớ nhanh

Direct-Offset Addressing

Chế độ xử lí này sử dụng các toán tủ số học để sửa đổi một địa chỉ. Ví dụ

Các thao tác sau truy cập dữ liệu từ các Tables trong bộ nhớ vào các thanh ghi:

Indirect Memory Addressing

Để tham chiếu tới địa chỉ của các thanh ghi ta sẽ có syntax như sau: [RAX]. Cách này gián tiếp gán địa chỉ của một data segment cho một thanh ghi sau đó tương tác địa chỉ bộ nhớ đó trên thanh ghi. Ví dụ:

The MOV Instruction

Mov instruction được sử dụng để chuyển data từ một storage space đến một nơi khác. Mov instruction sẽ lấy 2 operand (toán hạng).

Syntax:

mov instruction có 5 ràng buộc:

Lưu ý:

  • Cả hai toán hạng khi muốn sử dụng mov instruction phải cùng kích thước

  • Giá trị của toán hạng nguồn không thay đổi

Tôi có trường hợp sau:

Nếu bạn nhìn như kia thì bạn sẽ không thể biết nó di chuyển một byte hay một word. Trong những trường hợp như vậy, nó sẽ sử dụng một type specifier.

Một vài type specifier chung:

Type Specifier
Bytes addressed

BYTE

1

WORD

2

DWORD

4

QWORD

8

TBYTE

10

Nhìn bảng trên thì nó là byte :v. Lí do: 100 --> 0x6e < 0xff --> byte

Bài tập:

Chương trình sau đây minh họa một số khái niệm được thảo luận ở trên. Nó lưu trữ "Mot trăm ngàn đồng". Viết một chương trình thay thế thành "Hai trăm ngàn đồng" :)))

Last updated