JavaScript is required

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à:

A.

B0H

B.

E0H

C.

53H

D.

60H

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

Câu hỏi liên quan