Cho các dữ liệu được khai báo như sau:
Data
A DW 1234h
B LABEL BYTE
DW 5678h
C LABEL WORD
C1 DB 9Ah
C2 DB 0BCh
Hỏi các lệnh nào sau đây không hợp lệ?
Trả lời:
Đáp án đúng: C
Câu hỏi này kiểm tra kiến thức về cách sử dụng các lệnh MOV trong hợp ngữ (assembly), đặc biệt là cách di chuyển dữ liệu giữa các thanh ghi và các biến nhớ, cũng như cách sử dụng các từ khóa như LABEL và PTR. Chúng ta cần xem xét kích thước dữ liệu và tính hợp lệ của các toán hạng.
* **Phương án A: MOV AH, B**
* `B` được định nghĩa là `LABEL BYTE`, tức là một nhãn (label) chỉ đến một vị trí nhớ có kích thước byte. `AH` là một thanh ghi 8-bit (byte). Lệnh này hợp lệ vì nó di chuyển một byte dữ liệu từ vị trí nhớ được gán nhãn `B` vào thanh ghi `AH`.
* **Phương án B: MOV CX, C**
* `C` được định nghĩa là `LABEL WORD`, tức là một nhãn chỉ đến một vị trí nhớ có kích thước word (2 byte). `CX` là một thanh ghi 16-bit (word). Lệnh này hợp lệ vì nó di chuyển một word dữ liệu từ vị trí nhớ được gán nhãn `C` vào thanh ghi `CX`.
* **Phương án C: MOV AX, B**
* `B` được định nghĩa là `LABEL BYTE`, tức là một nhãn chỉ đến một vị trí nhớ có kích thước byte. `AX` là một thanh ghi 16-bit (word). Lệnh này không hợp lệ vì bạn đang cố gắng di chuyển một byte vào một thanh ghi word. Kích thước không khớp.
* **Phương án D: MOV BX, WORD PTR B**
* `B` được định nghĩa là `LABEL BYTE`. `WORD PTR B` chỉ định rằng chúng ta muốn lấy một word (2 byte) từ vị trí nhớ được gán nhãn `B`. `BX` là một thanh ghi 16-bit (word). Câu lệnh này là hợp lệ, mặc dù `B` vốn là byte, `WORD PTR` sẽ lấy 2 byte từ vị trí `B` và lưu vào `BX`.
Vậy, lệnh **MOV AX, B** là không hợp lệ do kích thước dữ liệu không tương thích (byte vào word).