JavaScript is required

Cho đoạn mã Assembler sau:

ORG 0000H

MOV R1, #8

MOV A, #3BH

LAP: RR A

DJNZ R1, LAP

END.

Kết quả của thanh ghi A là:

A.

67H

B.

D9H

C.

3BH

D.

CEH

Trả lời:

Đáp án đúng: C


Đoạn mã Assembly thực hiện các bước sau: 1. **ORG 0000H**: Khởi tạo chương trình bắt đầu từ địa chỉ 0000H. 2. **MOV R1, #8**: Gán giá trị 8 (08H) vào thanh ghi R1. R1 đóng vai trò là bộ đếm vòng lặp. 3. **MOV A, #3BH**: Gán giá trị 3BH vào thanh ghi A. Đây là giá trị khởi đầu mà chúng ta sẽ thực hiện phép toán. 4. **LAP: RR A**: Lệnh `RR A` (Rotate Right Accumulator) thực hiện dịch phải vòng (rotate right) nội dung của thanh ghi A đi 1 bit. Bit thấp nhất (LSB) sẽ được chuyển sang bit cao nhất (MSB). 5. **DJNZ R1, LAP**: Lệnh `DJNZ R1, LAP` (Decrement and Jump if Not Zero) giảm giá trị của thanh ghi R1 đi 1. Nếu R1 khác 0, chương trình sẽ nhảy về nhãn `LAP` để tiếp tục vòng lặp. Vòng lặp này sẽ được thực hiện 8 lần. 6. **END**: Kết thúc chương trình. Bây giờ, ta sẽ mô phỏng 8 lần lặp của vòng lặp `LAP` để xem giá trị của thanh ghi A thay đổi như thế nào: * **Lần 1:** A = 3BH = 00111011B. Sau khi `RR A`: A = 10011101B = 9DH * **Lần 2:** A = 9DH = 10011101B. Sau khi `RR A`: A = 11001110B = CEH * **Lần 3:** A = CEH = 11001110B. Sau khi `RR A`: A = 01100111B = 67H * **Lần 4:** A = 67H = 01100111B. Sau khi `RR A`: A = 10110011B = B3H * **Lần 5:** A = B3H = 10110011B. Sau khi `RR A`: A = 11011001B = D9H * **Lần 6:** A = D9H = 11011001B. Sau khi `RR A`: A = 11101100B = ECH * **Lần 7:** A = ECH = 11101100B. Sau khi `RR A`: A = 01110110B = 76H * **Lần 8:** A = 76H = 01110110B. Sau khi `RR A`: A = 00111011B = 3BH Vậy, sau khi thực hiện xong đoạn mã, giá trị của thanh ghi A là 3BH.

Câu hỏi liên quan