JavaScript is required

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à:

A.

C1H

B.

83H

C.

9BH

D.

07H

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

Câu hỏi liên quan