Cho đoạn mã Assembler sau:MOV A, #18HMOV 30H, #10HJB ACC.7, SKIPADD A, 30HMOV 30H, ASJMP EXITSKIP: SUBB A, 30HMOV 30H, AEXIT: ENDKết quả của ô nhớ 30H chứa:
Trả lời:
Đáp án đúng: C
Đoạn mã Assembler thực hiện các bước sau:
1. `MOV A, #18H`: Gán giá trị 18H (tương đương 24 trong hệ thập phân) vào thanh ghi A.
2. `MOV 30H, #10H`: Gán giá trị 10H (tương đương 16 trong hệ thập phân) vào ô nhớ 30H.
3. `JB ACC.7, SKIP`: Kiểm tra bit thứ 7 (bit cao nhất) của thanh ghi A. Nếu bit này bằng 1, chương trình nhảy đến nhãn `SKIP`. Trong trường hợp này, 18H = 00011000B, bit thứ 7 (tính từ phải sang trái, bắt đầu từ 0) là 0. Do đó, điều kiện không thỏa mãn và chương trình không nhảy.
4. `ADD A, 30H`: Cộng giá trị của ô nhớ 30H (10H) vào thanh ghi A. A = A + 30H = 18H + 10H = 28H.
5. `MOV 30H, A`: Gán giá trị của thanh ghi A (28H) vào ô nhớ 30H.
6. `SJMP EXIT`: Nhảy vô điều kiện đến nhãn `EXIT`.
7. `SKIP: SUBB A, 30H`: Nhãn `SKIP` này bị bỏ qua vì lệnh `JB` không nhảy đến đây.
8. `EXIT: END`: Kết thúc chương trình.
Vậy, sau khi thực hiện đoạn mã, ô nhớ 30H sẽ chứa giá trị 28H.