JavaScript is required

Cho đoạn mã Assembler sau:MOV R1, #3MOV A, #17LOOP: SETB CSUBB A, #2DJNZ R1, LOOPKết quả của thanh ghi A là:

A.

10

B.

11

C.

17

D.

8

Trả lời:

Đáp án đúng: D


Đoạn mã Assembler thực hiện các thao tác sau: 1. **MOV R1, #3**: Khởi tạo thanh ghi R1 với giá trị 3. R1 là bộ đếm vòng lặp. 2. **MOV A, #17**: Khởi tạo thanh ghi A (Accumulator) với giá trị 17. 3. **LOOP:** Bắt đầu vòng lặp. 4. **SETB C**: Đặt bit Carry (C) lên 1. Lệnh này quan trọng vì nó ảnh hưởng đến phép trừ có nhớ. 5. **SUBB A, #2**: Trừ 2 khỏi A, có xét đến bit Carry. Vì Carry được set (SETB C), thực tế ta trừ A cho (2 + Carry), tức là A = A - 3. 6. **DJNZ R1, LOOP**: Giảm R1 đi 1. Nếu R1 khác 0, quay lại LOOP. Nếu R1 bằng 0, kết thúc vòng lặp. Vòng lặp sẽ thực hiện 3 lần, mỗi lần A giảm đi 3. Vậy sau 3 lần lặp, A sẽ là: A = 17 - (3 * 3) = 17 - 9 = 8. Vậy, kết quả cuối cùng của thanh ghi A là 8.

Câu hỏi liên quan