JavaScript is required

Giả sử AX=35F7H, BX=126EH, sau lệnh CMP AH,BL lệnh nào sau đây chuyển điều khiển chương trình đến nhãn N?

A.
JG N
B.
JL N
C.
JE N
D.
JA N
Trả lời:

Đáp án đúng: D


Lệnh `CMP AH, BL` thực hiện so sánh giá trị của thanh ghi AH và BL bằng cách lấy AH trừ BL. Kết quả của phép trừ này không được lưu trữ, nhưng các cờ trạng thái (status flags) sẽ được cập nhật dựa trên kết quả đó. Trong trường hợp này, AH = 35H và BL = 6EH (chú ý là ta lấy byte cao của AX và byte thấp của BX). Do đó, AH - BL = 35H - 6EH = một số âm. Các cờ trạng thái quan trọng liên quan đến câu hỏi này là: * **SF (Sign Flag):** Cờ dấu, được set nếu kết quả âm, clear nếu kết quả dương. * **ZF (Zero Flag):** Cờ không, được set nếu kết quả bằng 0, clear nếu kết quả khác 0. * **CF (Carry Flag):** Cờ nhớ, được set nếu có borrow (mượn) trong phép trừ. * **OF (Overflow Flag):** Cờ tràn, được set nếu có tràn số học. Bây giờ, ta xét các lệnh nhảy có điều kiện: * **JG N (Jump if Greater):** Nhảy đến nhãn N nếu AH > BL (có nghĩa là ZF=0 và SF=OF). * **JL N (Jump if Less):** Nhảy đến nhãn N nếu AH < BL (có nghĩa là SF != OF). * **JE N (Jump if Equal):** Nhảy đến nhãn N nếu AH = BL (có nghĩa là ZF=1). * **JA N (Jump if Above):** Nhảy đến nhãn N nếu AH > BL (không dấu, có nghĩa là CF=0 và ZF=0). Vì AH - BL là một số âm (35H - 6EH < 0), suy ra AH < BL. Do đó, lệnh `JL N` sẽ thỏa mãn điều kiện để nhảy đến nhãn N (SF != OF, trong trường hợp này OF=0 nên SF=1).

Câu hỏi liên quan