Cho đoạn mã Assembler sau:MOV A, #0FFHADD A, #2JZ SKIPADDC A, #02HSJMP EXITSKIP: ADDC A, #01HEXIT: ENDKết quả của thanh ghi A là:
Trả lời:
Đáp án đúng: C
Đoạn mã Assembler thực hiện các phép toán trên thanh ghi A như sau:
1. **MOV A, #0FFH**: Gán giá trị 0FFH (255 trong hệ thập phân) vào thanh ghi A.
2. **ADD A, #2**: Cộng giá trị 2 vào thanh ghi A. Kết quả là A = 0FFH + 2 = 101H (257 trong hệ thập phân). Tuy nhiên, vì thanh ghi A chỉ có 8 bit, giá trị thực tế trong A sẽ là 01H (vì 257 mod 256 = 1).
3. **JZ SKIP**: Kiểm tra xem cờ Zero (Z) có được đặt hay không. Cờ Zero được đặt nếu kết quả của phép toán trước đó bằng 0. Trong trường hợp này, A = 01H, khác 0, nên cờ Zero không được đặt. Do đó, lệnh JZ SKIP sẽ không nhảy tới nhãn SKIP.
4. **ADDC A, #02H**: Cộng giá trị 2H (2 trong hệ thập phân) vào thanh ghi A, đồng thời cộng thêm giá trị của cờ Carry (C). Vì phép cộng trước đó (ADD A, #2) không tạo ra Carry, cờ Carry vẫn bằng 0. Do đó, A = 01H + 02H + 0 = 03H.
5. **SJMP EXIT**: Nhảy vô điều kiện tới nhãn EXIT.
6. **SKIP: ADDC A, #01H**: Nhãn này bị bỏ qua vì lệnh JZ SKIP không nhảy tới đây.
7. **EXIT: END**: Kết thúc chương trình.
Vậy, giá trị cuối cùng của thanh ghi A là 03H.





