Mình có đoạn chương trình như sau:
Code:
title "Prog1 Simpple addressing"
LIST P=16F84,F=INHX8M,R=DEC
INCLUDE "p16f84.inc"
;registers
test equ 12
__config _CP_OFF & _WDT_OFF & _RC_OSC
PAGE
;main
org 0
clrf test
movf test,w
addlw 'A'
movwf test
movlw test
movwf FSR
movf INDF,w
incf INDF
movwf INDF
Finished
goto $
end
Khi chạy debug thì không hiểu lắm về các kết quả.Cụ thể là có vài câu hỏi thế này :
1. Chỉ thị EQU là gán tên ký hiệu cho một chuỗi hoặc hằng số,vậy nó mang giá trị được gán hay là địa chỉ ?(Mình nghĩ là giá trị được gán,ví dụ test EQU 12 thì test=12).Có phải bất cứ khi nào gọi test thì đều gọi giá trị 12 ?
2. Thanh ghi INDF có chức năng như thế nào vậy ?Công dụng của nó là để làm con trỏ ?
3. Hai dòng lệnh sau đây là như thế nào ?(cũng lấy trong đoạn chương trình trên).TRước dòng lệnh thì test đang giữ giá trị là 0x41 (tức là d65).Ta cho trực hiện 2 lệnh này :
Code:
movlw test
movwf FSR
Nhưng kết cục là thanh w mang giá trị 12,mình nghĩ chính là giá trị đã khai báo ở dòng test EQU 12.NHư vậy là sao ?
4. Trong cửa sổ watch có các symbol nhưng mình không hiểu rõ lắm:
Z có phải là cờ zero không ?Lúc đầu thì mình cũng nghĩ vậy nhưng khi cho chạy chương trình từng bước thì nó lại nhảy 1,2,3,4...Nhưng nhìn vào thanh ghi status thì cờ zero vẫn bằng không sau các dòng lệnh.Vậy 2 cái z này khác nhau như thế nào vậy ?
5 Các symbol W,WR,WREG là sao ?Có khác nhau không.Cái nào mới chính là thanh làm việc?(mình nghĩ là WREG).Không biết có phải không nên hỏi cho chắc ăn).
Hy vọng nhận được câu trả lời sớm.Cảm ơn nhiều !!!!!