PIC_Simulator_Simon/TPicSim Testprogramme/TPicSim6.LST

96 lines
6.3 KiB
Plaintext

00001 ;TPicSim6
00002 ;Programm zum Test des 16F84-Simulators.
00003 ;Es werden die Byte-orientieren File-Register-Befehle im
00004 ;Zusammenhang mit der indirekten Adressierung geprüft
00005 ;
00006 ;(c) St. Lehmann
00007 ;Ersterstellung: 23.03.2016
00008
00009 ;Hinweis:
00010 ;Bei der indirekten Adressierung werden die Register "IND" oder auch als
00011 ;"indirect addr" bezeichnet und das Register FSR (File Select Register)
00012 ;benutzt. Dabei beinhaltet das FSR-Register die Zieladresse in die etwas
00013 ;geschrieben oder von der etwas gelesen werden soll. Der eigentliche
00014 ;Zugriff erfolgt über das Ansprechen der Registeradresse 0 (IND). Der PIC
00015 ;ersetzt in dem Falle die Adresse 0 durch die Adresse im FSR-Register.
00016 ;Da die Adresse im FSR-Register 8-Bit umfasst, die Adresse bei der direkten
00017 ;Adressierung jedoch nur 7 Bit, kann man durch die indirekte Adressierung
00018 ;auch auf Bank 1 zugreifen ohne das RP0-Bit zu setzen.
00019 ;
00020 ;Bei diesen Befehlen entscheidet das d-Bit (Destination), ob das Ergebnis
00021 ;dieser Operation ins W- oder File-Register geschrieben wird. Wird im
00022 ;Assemblercode der Befehl mit ",W" geschrieben, bedeutet dies, dass das
00023 ;d-Bit 0 ist und das Ergebnis ins W-Register kommt. Fehlt ",W" ist das
00024 ;d-Bit 1 und das Ergebnis wird ins Fileregister geschrieben.
00025 ;
00026 list c=132 ;Zeilenlänge im LST auf 132 Zeichen setzen
00027
00028 ;Definition einiger Symbole
00029 ;zuerst Hardware-Register
00030 indirect equ 00h
00031 status equ 03h
00032 fsr equ 04h
00033 ra equ 05h
00034 rb equ 06h
00035
00036 ;für den Benutzer frei verwendbare Register
00037 wert1 equ 0ch ;Variable Nr.1
00038 wert2 equ 0dh ;Variable Nr.2
00039 ergeb equ 0eh ;Variable Nr.3
00040
00041 ;Definition des Prozessors
00042 device 16F84
00043
00044 ;Festlegen des Codebeginns
00045 org 0
00046 loop
0000 3020 00047 movlw 20h ;in W steht nun 20h, DC=?, C=?, Z=?
0001 008C 00048 movwf wert1 ;diesen Wert abspeichern, DC=?, C=?, Z=?
0002 3010 00049 movlw 10h ;W = 10h, DC=?, C=?, Z=?
0003 0084 00050 movwf fsr ;W=10h, FSR=10h, wert1=20h, wert2=?? , DC=?, C=?, Z=?
0004 008D 00051 movwf wert2 ;W=10h, FSR=10h, wert1=20h, wert2=10h, DC=?, C=?, Z=?
0005 080C 00052 movf wert1,w ;W=20h
00053 ;der Speicherbereich von 10h bis 1Fh wird mit Zahlen 20h, 21h, etc. gefüllt
00054 loop1
0006 0080 00055 movwf indirect ;W=20h, FSR=10h, F10=20h
0007 3E01 00056 addlw 1 ;W=20h, 21h, 22h, etc
0008 0A84 00057 incf fsr ;FSR=11h, 12h, etc
0009 0B8D 00058 decfsz wert2
000A 2806 00059 goto loop1
00060
000B 301F 00061 movlw 1fh ;FSR-Zeiger wieder auf Anfang stellen
000C 0084 00062 movwf fsr
000D 30F0 00063 movlw 0f0h
000E 008D 00064 movwf wert2
000F 0100 00065 clrw
00066 loop2
0010 0700 00067 addwf indirect,w
0011 0384 00068 decf fsr
0012 0F8D 00069 incfsz wert2
0013 2810 00070 goto loop2
00071 ;im W-Register muss 78h stehen
0014 008D 00072 movwf wert2
0015 0A84 00073 incf fsr
0016 0C80 00074 rrf indirect ;F10=10h
0017 0A80 00075 incf indirect ;F10=11h
0018 0C80 00076 rrf indirect ;F10=08h, C=1
0019 1780 00077 bsf indirect,7 ;F10=88h
001A 1003 00078 bcf status,0 ;C=0
001B 0D80 00079 rlf indirect ;F10=10h, C=1
001C 0A84 00080 incf fsr ;fsr=11h
001D 0D80 00081 rlf indirect ;F11=43h, C=0
001E 0E80 00082 swapf indirect ;F11=34h
001F 0680 00083 xorwf indirect ;F11=4Ch
0020 1A80 00084 btfsc indirect,5
0021 2800 00085 goto loop
0022 1D00 00086 btfss indirect,2
0023 2800 00087 goto loop
0024 1980 00088 btfsc indirect,3
0025 2827 00089 goto ende
0026 2800 00090 goto loop
00091
00092 ende
0027 2827 00093 goto ende ;Endlosschleife, verhindert Nirwana
00094
00095