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 về cú pháp hợp lệ của các lệnh hợp ngữ (assembly) liên quan đến các biến kiểu DW (Define Word - 2 byte).
* **A. MOV var1, var1**: Lệnh này có vẻ đúng, nhưng thực tế là sai. Trong kiến trúc x86, không có phép MOV từ bộ nhớ vào chính nó. Mặc dù hợp ngữ (assembler) có thể không báo lỗi, nhưng nó không thực hiện hành động nào.
* **B. ADD 30h, AX**: Sai. ADD là phép cộng. 30h là một hằng số (giá trị tức thời). AX là một thanh ghi. Không thể cộng trực tiếp hằng số vào thanh ghi. Phải load hằng số vào thanh ghi trước rồi mới cộng.
* **C. SUB var1, AX**: Đúng. SUB là phép trừ. Var1 là một biến kiểu DW (2 byte). AX là một thanh ghi 16-bit (2 byte). Lệnh này thực hiện phép trừ giá trị trong AX khỏi giá trị tại địa chỉ của var1, và kết quả được lưu lại tại địa chỉ của var1.
* **D. MUL AX, BX**: Sai. MUL (Multiply - phép nhân) trong hợp ngữ thường dùng để nhân AX với một toán hạng khác. Kết quả của phép nhân 16 bit * 16 bit sẽ được lưu vào cặp thanh ghi DX:AX (DX chứa phần cao, AX chứa phần thấp). Cú pháp này không đúng với cách sử dụng thông thường của MUL.
Vậy, đáp án đúng là C.