Cho đoạn mã Assembler sau:
MOV 30H, #04H
MOV A, 30H
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV 50H, A
TABLE: DB 00H, 01H, 04H, 09H, 16H, 25H, 36H, 49H, 64H, 81H
Kết quả ô nhớ có địa chỉ 50H là:
Trả lời:
Đáp án đúng: B
Đoạn mã Assembler thực hiện các bước sau:
1. `MOV 30H, #04H`: Gán giá trị 04H vào ô nhớ có địa chỉ 30H.
2. `MOV A, 30H`: Chuyển nội dung của ô nhớ 30H (tức là 04H) vào thanh ghi A.
3. `MOV DPTR, #TABLE`: Gán địa chỉ của nhãn TABLE vào thanh ghi DPTR.
4. `MOVC A, @A+DPTR`: Đây là lệnh đọc từ bộ nhớ chương trình (ROM). Địa chỉ đọc được tính bằng A + DPTR. Vì A = 04H và DPTR trỏ đến TABLE, địa chỉ đọc sẽ là TABLE + 4. Dữ liệu tại địa chỉ này sẽ được chuyển vào thanh ghi A.
5. `MOV 50H, A`: Chuyển nội dung của thanh ghi A vào ô nhớ có địa chỉ 50H.
TABLE chứa các giá trị: 00H, 01H, 04H, 09H, 16H, 25H, 36H, 49H, 64H, 81H.
Như vậy, TABLE + 0 = 00H
TABLE + 1 = 01H
TABLE + 2 = 04H
TABLE + 3 = 09H
TABLE + 4 = 16H
Do đó, sau khi thực hiện lệnh `MOVC A, @A+DPTR`, A sẽ chứa giá trị 16H. Sau đó, lệnh `MOV 50H, A` sẽ gán giá trị 16H vào ô nhớ 50H.





