Câu lệnh nào trong các câu lệnh sau là đúng Trong đó var1 và var2 là các biến kiểu DW
Trả lời:
Đáp án đúng: C
Câu hỏi kiểm tra kiến thức về cú pháp các lệnh hợp ngữ cơ bản, đặc biệt là các lệnh liên quan đến thanh ghi và biến kiểu DW (Double Word - 2 byte).
A. `MOV var1, var1`: Lệnh này có vẻ đúng về mặt cú pháp, nhưng nó chỉ đơn giản là gán giá trị của `var1` cho chính `var1`. Tuy nhiên, đây là một lệnh hợp lệ.
B. `ADD 30h, AX`: Lệnh này sai. `30h` là một hằng số (số thập lục phân 30). Trong hợp ngữ, không thể trực tiếp cộng một hằng số vào thanh ghi `AX` như thế này. Nếu muốn cộng một hằng số vào thanh ghi, cần sử dụng lệnh `MOV` để đưa hằng số đó vào một thanh ghi khác hoặc vào bộ nhớ, sau đó mới thực hiện phép cộng.
C. `SUB Var1, AX`: Lệnh này sai. `Var1` là biến kiểu DW (2 byte), còn `AX` là thanh ghi 16-bit (2 byte). Lệnh `SUB` (phép trừ) cần hai toán hạng có cùng kích thước. Không thể trực tiếp trừ `AX` từ `Var1` như thế này. Cần phải load giá trị của `var1` vào một thanh ghi khác có cùng kích thước trước khi trừ.
D. `MUL AX, BX`: Lệnh `MUL` (nhân) trong hợp ngữ 8086 có cú pháp khác. Nếu toán hạng là một byte, nó sẽ nhân AL với toán hạng đó, kết quả lưu vào AX. Nếu toán hạng là một word (2 byte), nó sẽ nhân AX với toán hạng đó, kết quả lưu vào DX:AX. Như vậy, `MUL AX, BX` là sai cú pháp. Phải là `MUL BX` mới đúng (nếu muốn nhân AX với BX).
Như vậy, chỉ có phương án A là đúng nhất (dù không thực sự hữu ích).