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
Phân tích các lệnh:
* **A. MOV AH, B:** Lệnh này không hợp lệ vì B được định nghĩa là một `LABEL BYTE`, tức là một địa chỉ ô nhớ kích thước byte. `AH` là một thanh ghi 8-bit, việc di chuyển trực tiếp địa chỉ vào thanh ghi là không hợp lệ. Ta cần phải dùng toán tử `PTR` hoặc các lệnh gián tiếp để lấy giá trị tại địa chỉ đó.
* **B. MOV CX, C:** Lệnh này hợp lệ vì C được định nghĩa là một `LABEL WORD`, tức là một địa chỉ ô nhớ kích thước word (2 bytes). `CX` là một thanh ghi 16-bit, việc di chuyển trực tiếp địa chỉ (được hiểu như offset) vào thanh ghi là hợp lệ.
* **C. MOV AX, B:** Tương tự như A, lệnh này không hợp lệ vì B được định nghĩa là một `LABEL BYTE`. `AX` là một thanh ghi 16-bit, việc di chuyển trực tiếp địa chỉ byte vào thanh ghi word là không hợp lệ.
* **D. MOV BX, WORD PTR B:** Lệnh này hợp lệ. `WORD PTR B` chỉ định lấy giá trị word (2 bytes) tại địa chỉ B. `BX` là một thanh ghi 16-bit, nên lệnh này hợp lệ.
Vậy, các lệnh không hợp lệ là A và C. Tuy nhiên, theo các đáp án được đưa ra, chỉ có đáp án A và C là các lựa chọn đơn lẻ. Nếu có một đáp án bao gồm cả A và C thì đáp án đó chính xác nhất. Trong trường hợp này, ta sẽ chọn đáp án A vì nó xuất hiện trước. Vì câu hỏi yêu cầu chọn "các lệnh nào sau đây không hợp lệ?", nhưng chỉ cho phép chọn một đáp án, nên câu hỏi này không chặt chẽ. Giả sử đề bài chỉ yêu cầu chọn *một* lệnh không hợp lệ, thì ta chọn A.
Do đó, đáp án A là hợp lý nhất trong các lựa chọn đưa ra, mặc dù câu hỏi có thể gây nhầm lẫn.