Trong cách viết trên, F cũng đồng thời chỉ ra hai cách viết cho lệnh GOTO.
Và
Hai cách viết này tương đương nhau. Trong đó, $ thay cho vị trí con trỏ tại vị trí lệnh đang thực hiện.
Chính vì vậy, trong đoạn code trên, thay vì viết
Code:
loop
DECFSZ delay_reg1, F ; giảm giá trị thanh ghi “delay_reg1”và so sánh với 0 và ghi lại vào delay-reg1
GOTO loop1 ; nếu chưa bằng 0 nhảy tới label “loop1”
GOTO next ; nếu đã băng 0 chương trình delay hoàn tất
loop1
...
Chúng ta co thể thay thành:
Code:
loop
DECFSZ delay_reg1, F ; giảm giá trị thanh ghi “delay_reg1”và so sánh với 0 và ghi lại vào delay-reg1
GOTO $+2 ; nếu chưa bằng 0 nhảy tới label “loop1”
GOTO next ; nếu đã băng 0 chương trình delay hoàn tất
...
Và đoạn code phía dưới:
Code:
loop1
MOVLW d’255’
MOVWF delay_reg2 ; đưa vào thanh ghi “delay_reg2” giá trị 255
DECFSZ delay_reg2, F ; giảm giá trị thanh ghi “delay_reg2” và so sánh với 0 và ghi lại vào delay_reg2
GOTO $-1 ;
...
chúng ta co thể thay lại thành:
Code:
loop1
MOVLW d’255’
MOVWF delay_reg2 ; đưa vào thanh ghi “delay_reg2” giá trị 255
loop2
DECFSZ delay_reg2, F ; giảm giá trị thanh ghi “delay_reg2” và so sánh với 0 và ghi lại vào delay_reg2
GOTO loop2;
...
Chúc vui.