JavaScript is required

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ệ?  

A.

MOV AH,B

B.

MOV CX,C

C.

MOV AX,B

D.
MOV BX,WORD PTR B
Trả lời:

Đáp án đúng: C


Câu hỏi yêu cầu xác định lệnh MOV nào không hợp lệ dựa trên khai báo dữ liệu cho trước. * **A. MOV AH, B:** `B` được định nghĩa là một `LABEL BYTE`, tức là một địa chỉ (offset) kiểu byte. Thanh ghi `AH` là thanh ghi 8-bit. Lệnh `MOV AH, B` cố gắng di chuyển *địa chỉ* (offset) của `B` vào `AH`. Trong kiến trúc x86, việc gán trực tiếp một địa chỉ (offset) của một label byte cho thanh ghi 8-bit không được hỗ trợ trực tiếp, do địa chỉ offset thường lớn hơn 8 bit. Do đó, lệnh này không hợp lệ. * **B. MOV CX, C:** `C` được định nghĩa là một `LABEL WORD`, tức là một địa chỉ (offset) kiểu word. Thanh ghi `CX` là thanh ghi 16-bit. Lệnh `MOV CX, C` cố gắng di chuyển địa chỉ (offset) của `C` vào `CX`. Điều này hợp lệ vì địa chỉ offset của một label word phù hợp với kích thước của thanh ghi CX (16 bit). * **C. MOV AX, B:** Tương tự như đáp án A, `B` là một `LABEL BYTE`. Thanh ghi `AX` là thanh ghi 16-bit. Lệnh `MOV AX, B` cố gắng di chuyển *địa chỉ* (offset) của `B` vào `AX`. Mặc dù `AX` là thanh ghi 16-bit, nhưng việc gán trực tiếp một địa chỉ của một label byte cho thanh ghi nói chung không được khuyến khích và có thể không hợp lệ trong một số trình biên dịch/hợp ngữ. Tuy nhiên, so với lỗi rõ ràng của A, nó ít sai hơn. * **D. MOV BX, WORD PTR B:** `B` là một `LABEL BYTE`. `WORD PTR B` chỉ định rằng chúng ta muốn lấy *giá trị* (word - 2 bytes) tại địa chỉ được trỏ bởi `B`. `BX` là thanh ghi 16-bit. Do đó, lệnh này sẽ cố gắng di chuyển 2 bytes dữ liệu từ địa chỉ `B` vào thanh ghi `BX`. Điều này hợp lệ. Như vậy, lệnh **A. MOV AH, B** là lệnh không hợp lệ nhất vì cố gắng gán một địa chỉ (offset) byte vào thanh ghi 8-bit `AH` mà không có sự chuyển đổi hoặc xử lý kích thước rõ ràng.

Câu hỏi liên quan