Cho đoạn mã Assembler sau:
ORG 0000H
MOV A, #0B0H
MOV 30H, #23H
MOV R1, #30H
ADD A, R1
END.
Kết quả của thanh ghi A là:
Trả lời:
Đáp án đúng: B
Đoạn mã Assembler thực hiện các bước sau:
1. `MOV A, #0B0H`: Gán giá trị B0H (176 trong hệ thập phân) vào thanh ghi A.
2. `MOV 30H, #23H`: Gán giá trị 23H (35 trong hệ thập phân) vào ô nhớ có địa chỉ 30H.
3. `MOV R1, #30H`: Gán địa chỉ 30H vào thanh ghi R1. Lúc này R1 chứa địa chỉ của ô nhớ 30H.
4. `ADD A, R1`: Cộng giá trị của thanh ghi A với giá trị được chứa tại địa chỉ mà R1 trỏ tới. R1 trỏ tới ô nhớ 30H, ô nhớ này đang chứa giá trị 23H. Vậy, A = A + (30H) = B0H + 23H = 176 + 35 = 211. Trong hệ hexa, 211 = D3H. Tuy nhiên, đáp án D3H không có trong các lựa chọn, cần xem xét lại phép cộng.
Phép cộng `ADD A, R1` không đúng. Phải là `ADD A, @R1`, tức là cộng giá trị của A với nội dung ô nhớ được trỏ bởi R1.
Vậy A = B0H + 23H = D3H. Đáp án này vẫn không có.
Nhận thấy có lỗi sai trong đề bài, đáng lẽ phải là ADD A, @R1 thì mới hợp lý. Với đề bài như trên, R1 chứa địa chỉ 30H, do đó A sẽ cộng với 30H. Như vậy A = B0H + 30H = E0H