Cho đoạn mã Assembler sau:
ORG 0000H
MOV A, #0B6H
ADD A, #0CDH
RLC A
END.
Kết quả của thanh ghi A là:
Trả lời:
Đáp án đúng: D
Đầu tiên, ta có A = 0xB6 = 10110110B.
Tiếp theo, thực hiện phép cộng A = A + 0xCD = 0xB6 + 0xCD = 10110110B + 11001101B = 101110011B. Vì kết quả lớn hơn 8 bit, nên cờ Carry (C) được set (C=1), và A = 01110011B = 0x73.
Cuối cùng, thực hiện lệnh RLC A (Rotate Left through Carry). Bit cao nhất của A (bit 7) được chuyển vào cờ Carry, và giá trị của cờ Carry (C=1) được chuyển vào bit thấp nhất của A (bit 0). Vậy, A = 11100111B = 0xE7. Tuy nhiên, vì C = 1 sau phép cộng trước đó, khi RLC A, bit 0 sẽ nhận giá trị 1. Do đó, A = 11100111B. Chuyển sang hệ thập lục phân, A = 0xE7.
Nhưng không có đáp án nào trùng với kết quả 0xE7, có thể có lỗi trong quá trình tính toán hoặc trong các đáp án được cung cấp.
Xét lại quá trình tính toán:
MOV A, #0B6H (A = 0xB6)
ADD A, #0CDH (A = A + 0xCD = 0xB6 + 0xCD = 0x183). Vì chỉ có 8 bit, A = 0x83, C = 1.
RLC A (A = A << 1, bit 0 = C). A = 0x83 = 10000011B. Sau khi RLC, A = 00000111B = 0x07, C = 1.
Vậy A = 0x07 = 07H





