VAL1 là biến nhớ kiểu DW, hãy cho biết dòng lệnh nào trong các câu lệnh sau không đúng:
Đáp án đúng: A
VAL1 là biến kiểu DW (Define Word - 2 byte). Điều này có nghĩa là VAL1 chiếm 2 byte trong bộ nhớ.
A. MOV VAL1, 20: Lệnh này gán giá trị 20 (là một giá trị byte) vào biến VAL1 (kiểu word). Về mặt cú pháp, điều này có thể không gây ra lỗi ngay lập tức trong một số trình biên dịch, nhưng nó có thể dẫn đến việc chỉ một phần của VAL1 được cập nhật, gây ra hành vi không mong muốn. Tuy nhiên, theo ngữ cảnh câu hỏi, đây không phải là lỗi *rõ ràng* nhất.
B. MOV AX, VAL1: Lệnh này di chuyển nội dung của VAL1 (2 byte) vào thanh ghi AX (2 byte). Đây là một thao tác hợp lệ vì kích thước phù hợp.
C. MOV VAL1, AX: Lệnh này di chuyển nội dung của thanh ghi AX (2 byte) vào biến VAL1 (2 byte). Đây là một thao tác hợp lệ vì kích thước phù hợp.
D. MOV VAL1, AX: Lệnh này giống hệt như phương án C, MOV VAL1, AX: Lệnh này di chuyển nội dung của thanh ghi AX (2 byte) vào biến VAL1 (2 byte). Đây là một thao tác hợp lệ vì kích thước phù hợp.
Vì cả C và D giống nhau và đều đúng, nên câu hỏi này có vẻ như có lỗi. Tuy nhiên, nếu phải chọn một đáp án *ít đúng* nhất (hoặc gây ra vấn đề tiềm ẩn nhất), thì đáp án A có thể được xem xét, do nó chỉ gán một byte vào một biến word. Nhưng, cả C và D là đáp án đúng và giống nhau. Do đó, câu hỏi có vẻ không chính xác.
Tuy nhiên, theo cách hiểu thông thường, lệnh A có thể gây ra cảnh báo hoặc lỗi tiềm ẩn khi biên dịch trong một số trình biên dịch, vì nó cố gắng gán một giá trị byte (20) vào một vùng nhớ word (VAL1). Các lệnh B, C, D đều hợp lệ vì chúng di chuyển dữ liệu giữa các đơn vị có kích thước tương ứng (word sang word). Vì vậy, nếu phải chọn một đáp án *sai* nhất, thì A là lựa chọn hợp lý nhất.