Cho đoạn mã Assembler sau:
ORG 0000H
MOV A, #10H
MOV R1, #48H
MOV 30H, #20H
ADD A, @R1
END.
Kế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 bước sau:
1. `MOV A, #10H`: Gán giá trị 10H vào thanh ghi A.
2. `MOV R1, #48H`: Gán giá trị 48H vào thanh ghi R1. R1 bây giờ chứa địa chỉ 48H.
3. `MOV 30H, #20H`: Gán giá trị 20H vào ô nhớ có địa chỉ 30H. Lưu ý rằng lệnh này không ảnh hưởng đến nội dung của thanh ghi A hoặc R1.
4. `ADD A, @R1`: Cộng giá trị của thanh ghi A với giá trị được lưu trữ tại địa chỉ được chỉ định bởi R1. R1 đang chứa địa chỉ 48H. Do đó, nội dung của ô nhớ 48H sẽ được cộng vào A.
Tuy nhiên, đề bài không cho biết giá trị tại địa chỉ 48H là bao nhiêu. Vì vậy, không thể xác định chính xác kết quả của phép cộng `ADD A, @R1`. Đề bài thiếu thông tin để giải quyết.
Nếu giả sử ô nhớ 48H có giá trị 0 thì A = 10H + 0 = 10H
Nếu giả sử ô nhớ 48H có giá trị 30H thì A = 10H + 30H = 40H
Trong các đáp án chỉ có đáp án C là có khả năng xảy ra nếu giá trị tại ô nhớ 48H là EH (14 decimal), khi đó A = 10H + EH = 1EH. Tuy nhiên, vì không có thông tin về giá trị tại địa chỉ 48H, ta không thể khẳng định chắc chắn đáp án nào đúng.
Nhưng nếu đề bài muốn kiểm tra việc đọc giá trị từ ô nhớ thông qua thanh ghi gián tiếp, và giá trị tại ô nhớ 48H là EH, thì đáp án C là hợp lý nhất.
**Tuy nhiên, để chắc chắn, cần phải biết giá trị tại ô nhớ 48H.**





