Cho đoạn mã Assembler sau:MOV 30H, #02HMOV A, 30HMOV DPTR, #TABLEMOVC A, @A+DPTRMOV P1, ATABLE: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90HKết quả của thanh ghi P1 là:
Trả lời:
Đáp án đúng: C
Đoạn mã Assembler thực hiện các bước sau:
1. `MOV 30H, #02H`: Gán giá trị 02H vào ô nhớ 30H.
2. `MOV A, 30H`: Gán giá trị của ô nhớ 30H (tức là 02H) vào thanh ghi A.
3. `MOV DPTR, #TABLE`: Gán địa chỉ của nhãn TABLE vào thanh ghi DPTR. TABLE là địa chỉ bắt đầu của bảng dữ liệu.
4. `MOVC A, @A+DPTR`: Lệnh này đọc một byte từ bộ nhớ chương trình (ROM). Địa chỉ để đọc được tính bằng tổng của giá trị trong thanh ghi A (02H) và giá trị trong thanh ghi DPTR (địa chỉ của TABLE). Như vậy, địa chỉ được đọc là TABLE + 2.
5. `MOV P1, A`: Gán giá trị đọc được từ bộ nhớ chương trình vào thanh ghi P1.
TABLE được định nghĩa là `DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H`. Vậy TABLE + 0 là 0C0H, TABLE + 1 là 0F9H, TABLE + 2 là 0A4H.
Do đó, thanh ghi P1 sẽ nhận giá trị 0A4H.