Startseite   |  Site map   |  A-Z artikel   |  Artikel einreichen   |   Kontakt   |  
  


informatik artikel (Interpretation und charakterisierung)

Fehler

Programm

Speicher

Dokumentation des monitorprogramms µp-os 8052 v 2.1


1. Java
2. Viren

1 User 1.1 Einstellungen für das Terminalprogramm

Terminaleinstellungen:
Terminalemulation: VT52

Duplex-Modus: voll


ASCII-Dateiversandt:
Zeichenverzögerung: 100ms

Zeilenverzögerung: 10ms
CR-Übersetzung: keine

LF-Übersetzung: keine
1.2 Befehle

Allgemeine Befehle
Befehl Beschreibung
g xxxx go Programm ab Adresse xxxx starten
l xxxx list Programm ab Adresse xxxx auflisten (disassembliert)
bs xxxx breakpoint set Breakpoint auf Adresse xxxx setzten
bl breakpoint list Breakpoint-Adresse anzeigen
bd breakpoint delete Breakpoint-Adresse löschen
c continue Abgebrochenes Programm fortsetzen

o options Einstellungen ändern
r reset Software-Reset: Gesamter Speicher wird gelöscht und alle Einstellungen zurückgesetzt.
i Intel-Hex Programm-Datei im Intel-Hex-Format laden
xxxx ... beliebige Adresse im Hex-Format. Drückt man währen der Eingabe ESC, so wird der Befehl abgebrochen.

Befehle im Options-Menu
Befehl Beschreibung

l xxxx listlengh
s xx seriall port


1.3 Verwendbare Monitor-Unterprogramme

Zeichenausgabe
Adresse Name Beschreibung Verwendet Verändert
3000h CharOut Gibt ein Zeichen, das sich im AKKU befindet, aus. A
3003h ReturnOut Gibt ein Return (CR, LF) aus. A
3006h SpaceOut Gibt so viele Leerzeichen aus, wie die Zahl im AKKU vorgibt. A A
3009h CursorOut Gibt einen Cursor-Befehl, der durch AKKU definiert ist, aus:

AKKU=00h  Cursor hinauf
AKKU=01h  Cursor hinunter

AKKU=02h  Cursor nach rechts
AKKU=03h  Cursor nach links
AKKU=04h  Cursor auf Position 1/1 (links/oben)
AKKU=05h  Cursor auf Position x/y

x ... Zeile (>0)
y ... Spalte (>0)
x, y müssen nach dem Unterprogrammaufruf zusätzlich mittels CharOut übertragen werden. A, DPTR A
300Ch StrOut Gibt eine Folge von Zeichen, die an der Speicheradresse im DPTR beginnen und mit dem Zeichen 00h enden, aus. A, DPTR DPTR
300Fh HexNibOut Gibt die erste 4 Bit im AKKU in Hex aus. A, PSW
3012h HexByteOut Gibt die Zahl im AKKU in Hex aus. A, PSW
3015h HexWordOut Gibt die Zahl im DPTR in Hex aus. A, PSW, DPTR
3018h BinBitOut Gibt das C-Bit binär aus. A, C
301Bh BinBitOutACCU Gibt das 1. Bit des AKKUs binär aus. A, B
301Eh BinByteOut Gibt die Zahl im AKKU binär aus. A, B
3021h BinWordOut Gibt die Zahl im DPTR binär aus. A, B, DPTR
3024h NumOut Gibt die Zahl im AKKU in Dezimal aus. A, B

Zeicheneingabe
Adresse Name Beschreibung Verwendet Verändert
3027h CharInHide Schreibt eingegebenes Zeichen in den AKKU A A
302Ah CharIn Wie CharInHide, nur wird das Zeichen auch ausgegeben. A A
302Dh HexNibIn Schreibt eingegebene Hex-Ziffer (0..9, A..F) in den AKKU und gibt sie aus. Wird ESC eingegeben, so wird abgebrochen und C=1 und AKKU=0, sonst C=0. A, PSW A, PSW, C
3030h HexByteIn Wie HexNibIn, nur werden zwei Hex-Ziffern in den AKKU geschrieben. A, B, PSW A, PSW, C
3033h HexWordIn Wie HexNibIn, nur werden vier Hex-Ziffern in den DPTR geschrieben. Wird ESC eingegeben, so wird abgebrochen und C=1 und DPTR=0. A, B, PSW, DPTR PSW, DPTR, C
3036h BinBitIn Schreibt eingegebene Binärziffer (0..1) ins C-Bit und gibt sie aus. A, C C
3039h BinBitInACCU Schreibt eingegebene Binärziffer (0..1) ins Bit 0 des AKKUs gibt sie aus. Wird ESC eingegeben, so wird abgebrochen und C=1. A, C ACC.0, C
303Ch BinByteIn Wie BinBitInACCU, nur werden 8 Ziffern in den AKKU geschrieben. Wird ESC eingegeben, so wird abgebrochen und C=1 und AKKU=0. A, B, C A, C
303Fh BinWordIn Wie in BinBitInACCU, nur werden 16 Ziffer in den DPTR geschrieben. Wird ESC eingegeben, so wird abgebrochen und C=1 und DPTR=0. A, B, C, DPTR DPTR, C
3042h NumIn Wie HexNibIn, nur wird eine Dezimal-Ziffer (0..9) eingelesen und in den AKKU geschrieben A, PSW A, PSW
2 Code

;***************************************
;** Monitorprogramm für 8051/2 EV-Kit **
;** **
;** von : Roland HEINRICH **
;** Datum: 10.03.1997 **

;***************************************


;****************

;** Konstanten **

;****************

DPTRSafe XDATA 87EBh ;DPTR-Sicherungsadresse 2 Byte
ACCUSafe XDATA 87EDh ;ACCU-Sicherungsadresse 1 Byte
PSWSafe XDATA 87EEh ;PSW-Sicherungsadresse 1 Byte
SPSafe XDATA 87EFh ;SP-Sicherungsadresse 1 Byte
IESafe XDATA 87F0h ;IE-Sicherungsadresse 1 Byte

DPTR1Mem XDATA 87F1h ;DPTR-Speicheradresse1 2 Byte
DPTR2Mem XDATA 87F3h ;DPTR-Speicheradresse2 2 Byte

BreakPoint XDATA 87F5h ;Breakpoint-Adresse 2 Byte
BreakAdr XDATA 87F7h ;Break-Adresse 2 Byte
BreakMem XDATA 87F9h ;Befehlssicherungsbereich für Breakpoint 3 Byte
BreakDone XDATA 87FCh ;Anzeige ob BP in Programm eingesetzt 1 Byte

ListNum XDATA 87FDh ;Adresse für Anzahl der Befehle bei List
Serielle XDATA 87FEh ;Adresse für Einstellung der seriellen Schnittstelle

PinRegA XDATA 0A002h ;Adresse des Pin-Registers des WSI-Ports A
DirRegA XDATA 0A004h ;Adresse des Direction-Registers des WSI-Ports A
DataRegA XDATA 0A006h ;Adresse des Daten-Registers des WSI-Ports A

Hauptprog CODE 0050h ;Beginnadresse für Hauptprogramm
BreakProg CODE 0A00h ;Beginnadresse für Break-Programm
Tabellen CODE 1000h ;Beginnadresse für Tabellen
GlobSUB CODE 3000h ;Beginnadresse für Globale Unterprogramme

BreakProgH EQU 0Ah ;Beginnadresse für Break-Programm
BreakProgL EQU 00h ;in High- und Low-Byte aufgeteilt

RDat BIT P1.2 ;Receive Eingang für serielle Schnittstelle
TDat BIT P1.3 ;Transmit Ausgang für serielle Schnittstelle


;******************

;** Programmcode **

;******************

ORG 0000h
JMP Haupt ;Sprung zum Programmbeginn


;**************************
;** Interrupts verbiegen **

;**************************


ORG 0003h
JMP 8003h ;External Interrupt 0

ORG 000Bh
JMP 800Bh ;Timer 0 Overflow Interrupt


ORG 0013h
JMP 8013h ;External Interrupt 1

ORG 001Bh
JMP 801Bh ;Timer 1 Overflow Interrupt


ORG 0023h
JMP 8023h ;Serial Interrupt

ORG 002Bh
JMP 802Bh ;Timer 2 Overflow / External Reload Interrupt


;*******************
;** Hauptprogramm **

;*******************


ORG Hauptprog
Haupt:
MOV DPTR,#BreakDone ;BreakDone-Byte -> ACCU

MOVX A,@DPTR
JZ Haupt1 ;Wenn BreakDone nicht aktiviert -> JMP Haupt1
CALL ClrBreak

Haupt1:

MOV DPTR,#0000h
CALL StoreBreak ;DPTR -> Break-Adresse = Break-Adresse löschen

MOV DPTR,#Serielle

MOVX A,@DPTR
CJNE A,#01,Haupt2 ;Wenn Serielle=01h -> PA für Schnittstelle initialisieren

MOV DPTR,#DirRegA

MOVX A,@DPTR

CLR ACC.0 ;PA.0 -> Input
SETB ACC.1 ;PA.1 -> Output
MOVX @DPTR,A
JMP Haupt4

Haupt2:
CJNE A,#02h,Haupt3 ;Wenn Serielle=02h -> serielle Schnittstelle initialisieren

CALL SeriellInit
JMP Haupt4

Haupt3:

CLR A
MOVX @DPTR,A
Haupt4:
MOV DPTR,#ResetStr ;Reset-Meldung ausgeben

CALL StrOut

Beginn:
CALL ReturnOut

MOV DPTR,#EingabeStr

CALL StrOut

Loop1:

CALL CharInHide ;auf Eingabe warten, Zeichen -> ACCU
CJNE A,#62h,Loop2 ;Wenn Zeichen=\"b\" -> Breakpoint ändern

CALL CharOut

CALL BreakCh

JMP Beginn

Loop2:
CJNE A,#63h,Loop3 ;Wenn Zeichen=\"c\" -> Programm fortsetzen

CALL CharOut
CALL Continue

JMP Beginn
Loop3:
CJNE A,#67h,Loop4 ;Wenn Zeichen=\"g\" -> Programm starten

CALL CharOut

CALL Go

JMP Beginn

Loop4:
CJNE A,#68h,Loop5 ;Wenn Zeichen=\"h\" -> Help ausgeben

CALL CharOut
MOV DPTR,#HelpStr

CALL StrOut

JMP Beginn

Loop5:
CJNE A,#69h,Loop6 ;Wenn Zeichen=\"i\" -> IntelHex-Eingabe

CALL CharOut
CALL IntelHexIn

JMP Beginn
Loop6:
CJNE A,#6Ch,Loop7 ;Wenn Zeichen=\"l\" -> Befehlslisting

CALL CharOut

CALL List

JMP Beginn

Loop7:
CJNE A,#6Fh,Loop8 ;Wenn Zeichen=\"o\" -> Optionen ändern

CALL CharOut
CALL Options

JMP Beginn
Loop8:
CJNE A,#72h,Loop9 ;Wenn Zeichen=\"r\" -> Software-Reset

CALL CharOut

CALL SReset

JMP Beginn

Loop9:
CJNE A,#64h,Loop10 ;Wenn Zeichen=\"d\" -> Byte anzeigen

CALL CharOut
CALL DisplayByte

JMP Beginn
Loop10:
CJNE A,#65h,Loop1 ;Wenn Zeichen=\"e\" -> Byte editieren

CALL CharOut

CALL EditByte

JMP Beginn


;********************

;** Unterprogramme **

;********************


;**********************************

;** Schnittstelle initialisieren **

;**********************************

SeriellInit:
MOV TH1,#0FDh ;Timer 1 zu Baud-Rate-Generierung
MOV TL1,#0FDh ;Reloadvalue für 9600 Baud
MOV TMOD,#00100000b ;Timer 1 auf Mode 2
SETB TR1
CLR SM0 ;Serielle Schnittstelle auf Mode 1
SETB SM1

SETB REN ;Datenempfang aktivieren
MOV PCON,#00h

RET


;*************
;** Auswahl **

;*************


Auswahl:

CALL CharInHide ;auf Eingabe warten
CJNE A,#1Bh,Auswahl1 ;Wenn Zeichen=ESC -> C=0

CLR C

RET
Auswahl1:
CJNE A,#0Dh,Auswahl ;Wenn Zeichen=Return -> C=1
SETB C

RET


;**********************
;** Programm starten **

;**********************


Go:

MOV A,#20h ;Space ausgeben

CALL CharOut
CALL HexWordIn ;Startadresse einlesen

JC GoE
CALL ReturnOut

PUSH DPH

PUSH DPL
CALL RestoreBPoint ;Breakpoint-Adresse -> DPTR

MOV A,DPH

JZ Go1
CALL BreakAkt

Go1:

POP DPL

POP DPH

CLR A ;ACCU, PSW, SP auf Anfangswerte setzten

MOV PSW,#00h
MOV SP,#07h

JMP @A+DPTR ;Programm starten
GoE:

RET


;**********************
;** IntelHex-Eingabe **

;**********************


IntelHexIn:
MOV DPTR,#IAchtungStr

CALL StrOut

CALL Auswahl

JNC IntelHexInE2
CALL ReturnOut

PUSH B
IntelHexIn1:

MOV A,#3Eh ;\">\"-Zeichen ausgeben

CALL CharOut

IntelHexIn2:

CALL CharInHide ;auf Eingabe warten
CJNE A,#3Ah,IntelHexIn2 ;Wenn Zeichen=\":\" -> Weiter

CALL CharOut

CALL HexByteIn ;Anzahl der Datenbytes -> B

MOV B,A
CALL HexWordIn ;Startadresse -> DPTR
JZ IntelHexIn3
CALL CheckAddr
JC IntelHexInF

IntelHexIn3:

CALL HexByteIn ;Type-Byte einlesen und zwischenspeichern

PUSH ACC
IntelHexIn4:

MOV A,B
JZ IntelHexIn5

CALL HexByteIn ;Datenbyte einlesen
MOVX @DPTR,A ;Datenbyte -> Adresse in DPTR
INC DPTR
DEC B

JMP IntelHexIn4
IntelHexIn5:

CALL HexByteIn ;CheckSum einlesen (wird übergangen)
IntelHexIn6:

CALL CharInHide ;Auf Return (CR oder LF) warten
CJNE A,#0Dh,IntelHexIn7

JMP IntelHexIn8
IntelHexIn7:

CJNE A,#0Ah,IntelHexIn6
IntelHexIn8:
CALL ReturnOut

POP ACC ;Type-Byte zurückholen
JNZ IntelHexInE1 ;Wenn 00h Einlesen beenden, sonst weiter
JMP IntelHexIn1

IntelHexInF:
MOV DPTR,#IFehlerStr

CALL StrOut
IntelHexInE1:

POP B
IntelHexInE2:

RET


;**************************
;** Adreß-Bereich prüfen **

;**************************


CheckAddr:

MOV A,DPH

CJNE A,#80h,CheckAddr1
CheckAddr1:

JC CheckAddrF
CJNE A,#87h,CheckAddr2

JMP CheckAddrF
CheckAddr2:

PUSH ACC

MOV A,B

ADD A,DPL

POP ACC

JNC CheckAddr3

INC A

CJNE A,#87h,CheckAddr3

JMP CheckAddrF

CheckAddr3:
CJNE A,#0A0h,CheckAddr4

CheckAddr4:
JNC CheckAddrF

CLR C

RET

CheckAddrF:
SETB C

RET


;*********************
;** Optionen ändern **

;*********************


Options:
MOV DPTR,#OptionStr

CALL StrOut
MOV DPTR,#ListNum

MOVX A,@DPTR

CALL HexByteOut

MOV DPTR,#Option1Str

CALL StrOut

MOV DPTR,#Serielle

MOVX A,@DPTR

CALL HexByteOut
MOV DPTR,#OEingabeStr

CALL StrOut
Options1:

CALL CharInHide
CJNE A,#1Bh,Options2 ;Wenn ESC gedrückt -> Beenden
CALL ReturnOut

RET

Options2:
CJNE A,#6Ch,Options3 ;Wenn Zeichen=\"l\" -> Listingslänge ändern

CALL CharOut

MOV A,#20h ;Space ausgeben

CALL CharOut

CALL HexByteIn
JC Options
MOV DPTR,#ListNum
MOVX @DPTR,A
JMP Options

Options3:
CJNE A,#73h,Options1 ;Wenn Zeichen=\"s\" -> serielle Schnittstelle ändern

CALL CharOut

MOV A,#20h ;Space ausgeben

CALL CharOut

CALL HexByteIn
JC Options
MOV DPTR,#OResetStr

CALL StrOut

MOV DPTR,#Serielle
MOVX @DPTR,A
Options4:

JMP Options4


;********************
;** Software-Reset **

;********************


SReset:
MOV DPTR,#SResetStr

CALL StrOut

CALL Auswahl

JC Sreset1

RET

Sreset1:
MOV DPTR,#8000h

SReset2:

CLR A
MOVX @DPTR,A
INC DPTR

MOV A,DPH
CJNE A,#88h,SReset2

MOV DPTR,#SRFertigStr

CALL StrOut

RET


;*******************
;** Byte anzeigen **

;*******************


DisplayByte:

CALL CharInHide ;Auf Tastendruck warten
CJNE A,#1Bh,DisplayByte1 ;Wenn ESC gedrückt -> Beenden

RET

DisplayByte1:
CJNE A,#63h,DisplayByte2 ;Wenn \"c\" gedrückt -> Programm-Speicher anzeigen

CALL CharOut
CALL DisplayCode

RET
DisplayByte2:
CJNE A,#69h,DisplayByte3 ;Wenn \"i\" gedrückt -> internen Daten-Speicher anzeigen

CALL CharOut

CALL DisplayIData

RET

DisplayByte3:
CJNE A,#78h,DisplayByte ;Wenn \"x\" gedrückt -> externen Daten-Speicher anzeigen

CALL CharOut
CALL DisplayXData

RET


;********************************
;** Programm-Speicher anzeigen **

;********************************


DisplayCode:

MOV A,#20h ;Space ausgeben

CALL CharOut
CALL HexWordIn ;Speicher-Adresse eingeben

JC DisplayCodeE ;Bei ESC Beenden

CLR A ;Speicherinhalt -> ACCU

MOVC A,@A+DPTR

MOV DPTR,#DAktuellStr

CALL StrOut

CALL HexByteOut
CALL ReturnOut
DisplayCodeE:

RET


;**************************************
;** internen Daten-Speicher anzeigen **

;**************************************


DisplayIData:

MOV A,#20h ;Space ausgeben

CALL CharOut

CALL HexByteIn ;Speicher-Adresse eingeben

JC DisplayIDataE ;Bei ESC Beenden

MOV DPTR,#DAktuellStr

CALL StrOut
CJNE A,#81h,DisplayIData1
MOV DPTR,#SPSafe

JMP DisplayIData10

DisplayIData1:
CJNE A,#82h,DisplayIData2

MOV DPTR,#DPTRSafe

JMP DisplayIData10

DisplayIData2:
CJNE A,#83h,DisplayIData3

MOV DPTR,#DPTRSafe
INC DPTR

JMP DisplayIData10
DisplayIData3:

CJNE A,#0A8h,DisplayIData4
MOV DPTR,#IESafe

JMP DisplayIData10
DisplayIData4:

CJNE A,#0D0h,DisplayIData5
MOV DPTR,#PSWSafe

JMP DisplayIData10
DisplayIData5:

CJNE A,#0E0h,DisplayIData6

MOV DPTR,#ACCUSafe

JMP DisplayIData10
DisplayIData6:
MOV C,ACC.7
ANL C,PSW.4

JC DisplayIData7
MOV C,ACC.7
ORL C,PSW.4
JNC DisplayIData7
JMP DisplayIData9
DisplayIData7:
MOV C,ACC.6
ANL C,PSW.3

JC DisplayIData8
MOV C,ACC.6
ORL C,PSW.3
JNC DisplayIData8
JMP DisplayIData9
DisplayIData8:
ANL A,#00111111b
CJNE A,#00h,DisplayIData9
MOV A,R0
JMP DisplayIData11

DisplayIData9:
MOV A,R0 ;R0 sichern

PUSH ACC

MOV R0,A ;Speicherinhalt -> ACCU
MOV A,@R0

CALL HexByteOut
CALL ReturnOut

POP ACC
MOV R0,A ;R0 zurückholen
JMP DisplayIDataE

DisplayIData10:

MOVX A,@DPTR

DisplayIData11:

CALL HexByteOut
CALL ReturnOut
DisplayIDataE:

RET


;**************************************
;** externen Daten-Speicher anzeigen **

;**************************************


DisplayXData:

MOV A,#20h ;Space ausgeben

CALL CharOut
CALL HexWordIn ;Speicher-Adresse eingeben

JC DisplayXDataE ;Bei ESC Beenden

MOVX A,@DPTR ;Speicherinhalt -> ACCU

MOV DPTR,#DAktuellStr

CALL StrOut

CALL HexByteOut
CALL ReturnOut

DisplayXDataE:

RET


;********************

;** Byte editieren **

;********************

EditByte:

CALL CharInHide ;Auf Tastendruck warten
CJNE A,#1Bh,EditByte1 ;Wenn ESC gedrückt -> Beenden

RET
EditByte1:
CJNE A,#63h,EditByte2 ;Wenn \"c\" gedrückt -> Programm-Speicher editieren

CALL CharOut

CALL EditCode

RET

EditByte2:
CJNE A,#69h,EditByte3 ;Wenn \"i\" gedrückt -> internen Daten-Speicher editieren

CALL CharOut
CALL EditIData

RET
EditByte3:
CJNE A,#78h,EditByte ;Wenn \"x\" gedrückt -> externen Daten-Speicher editieren

CALL CharOut

CALL EditXData

RET


;*********************************

;** Programm-Speicher editieren **

;*********************************

EditCode:

MOV A,#20h ;Space ausgeben

CALL CharOut
CALL HexWordIn ;Speicher-Adresse eingeben
JC EditCodeE2 ;Bei ESC Beenden

PUSH B
MOV B,#01h
CALL CheckAddr

POP B

JC EditCodeF

CLR A ;Speicherinhalt -> ACCU

MOVC A,@A+DPTR

PUSH DPH

PUSH DPL

MOV DPTR,#DAktuellStr

CALL StrOut

CALL HexByteOut

MOV DPTR,#ENeuStr

CALL StrOut

POP DPL

POP DPH

CALL HexByteIn
JC EditCodeE1
MOVX @DPTR,A
EditCodeE1:
CALL ReturnOut
EditCodeE2:

RET
EditCodeF:

MOV DPTR,#IFehlerStr ;Fehlermeldung

CALL StrOut

RET


;***************************************
;** internen Daten-Speicher editieren **

;***************************************


EditIData:

MOV A,#20h ;Space ausgeben

CALL CharOut

CALL HexByteIn ;Speicher-Adresse eingeben

JNC EditIData0 ;Bei ESC Beenden

RET

EditIData0:

MOV DPTR,#DAktuellStr

CALL StrOut
CJNE A,#81h,EditIData1
MOV DPTR,#SPSafe

JMP EditIData11

EditIData1:
CJNE A,#82h, EditIData2

MOV DPTR,#DPTRSafe

JMP EditIData11

EditIData2:
CJNE A,#83h, EditIData3

MOV DPTR,#DPTRSafe
INC DPTR

JMP EditIData11
EditIData3:

CJNE A,#0A8h, EditIData4
MOV DPTR,#IESafe

JMP EditIData11
EditIData4:

CJNE A,#0D0h, EditIData5
MOV DPTR,#PSWSafe

JMP EditIData11
EditIData5:

CJNE A,#0E0h, EditIData6

MOV DPTR,#ACCUSafe

JMP EditIData11
EditIData6:
MOV C,ACC.7
ANL C,PSW.4

JC EditIData7
MOV C,ACC.7
ORL C,PSW.4
JNC EditIData7
JMP EditIData9
EditIData7:
MOV C,ACC.6
ANL C,PSW.3

JC EditIData8
MOV C,ACC.6
ORL C,PSW.3
JNC EditIData8
JMP EditIData9
EditIData8:
ANL A,#00111111b
CJNE A,#00h,EditIData9
MOV A,R0

CALL HexByteOut

MOV DPTR,#ENeuStr

CALL StrOut

CALL HexByteIn
JC EditIDataE

MOV R0,A

JMP EditIDataE

EditIData9:
MOV A,R0 ;R0 sichern

PUSH ACC

MOV R0,A ;Speicherinhalt -> ACCU
MOV A,@R0

CALL HexByteOut

MOV DPTR,#ENeuStr

CALL StrOut

CALL HexByteIn
JC EditIData10

MOV @R0,A
EditIData10:

POP ACC
MOV R0,A ;R0 zurückholen

JMP EditIDataE
EditIData11:

MOVX A,@DPTR

CALL HexByteOut

PUSH DPH

PUSH DPL

MOV DPTR,#ENeuStr

CALL StrOut

POP DPL

POP DPH

CALL HexByteIn
JC EditIDataE
MOVX @DPTR,A
EditIDataE:
CALL ReturnOut

RET


;***************************************
;** externen Daten-Speicher editieren **

;***************************************

EditXData:

MOV A,#20h ;Space ausgeben

CALL CharOut
CALL HexWordIn ;Speicher-Adresse eingeben
JC EditXDataE2 ;Bei ESC Beenden

PUSH DPH

PUSH DPL

MOVX A,@DPTR ;Speicherinhalt -> ACCU

MOV DPTR,#DAktuellStr

CALL StrOut

CALL HexByteOut

MOV DPTR,#ENeuStr

CALL StrOut

POP DPL

POP DPH

CALL HexByteIn
JC EditXDataE1
MOVX @DPTR,A
EditXDataE1:
CALL ReturnOut
EditXDataE2:

RET

;***********************
;** Breakpoint ändern **
;***********************


BreakCh:

CALL CharInHide ;Auf Tastendruck warten
CJNE A,#1Bh,BreakCh1 ;Wenn ESC gedrückt -> Beenden

RET

BreakCh1:
CJNE A,#73h,BreakCh2 ;Wenn \"s\" gedrückt -> BP setzen

CALL CharOut
CALL BreakSet

RET
BreakCh2:
CJNE A,#6Ch,BreakCh3 ;Wenn \"l\" gedrückt -> BP anzeigen

CALL CharOut

CALL BreakList

RET

BreakCh3:
CJNE A,#64h,BreakCh ;Wenn \"d\" gedrückt -> BP löschen

CALL CharOut
CALL BreakDel

RET


;************************
;** Breakpoint setzten **

;************************


BreakSet:

MOV A,#20h ;Space ausgeben

CALL CharOut
CALL HexWordIn ;BP-Adresse eingeben

JC BreakSetE ;Bei ESC Beenden

PUSH B

MOV B,#03h
CALL CheckAddr ;BP-Adresse prüfen

POP B
JC BreakSetF ;wenn BP-Adresse ungültig -> Fehler

CALL StoreBPoint ;DPTR -> BP-Adresse
MOV DPTR,#BSetStr ;BP-Adresse gesetzt

CALL StrOut

RET

BreakSetF:
MOV DPTR,#BSFehlerStr ;Fehlermeldung

CALL StrOut
BreakSetE:

RET


;*************************
;** Breakpoint anzeigen **

;*************************


BreakList:
MOV DPTR,#BListStr

CALL StrOut
CALL RestoreBPoint ;BP-Adresse -> DPTR

MOV A,DPH
JZ BreakList1 ;Wenn BP-Adresse=00xxh -> BreakList1
CALL HexWordOut ;BP-Adresse ausgeben
CALL ReturnOut

RET
BreakList1:

MOV DPTR,#BLKeinStr ;keine ausgeben

CALL StrOut

RET


;************************
;** Breakpoint löschen **

;************************


BreakDel:

MOV DPTR,#0000h
CALL StoreBPoint ;DPTR -> Breakpoint-Adresse
MOV DPTR,#BDelStr ;BP gelöscht ausgeben

CALL StrOut

RET


;***************************

;** Breakpoint aktivieren **

;***************************

BreakAkt:

MOV DPTR,#BAktStr

CALL StrOut

CALL Auswahl
JC BreakAkt1

RET
BreakAkt1: ;Break-Befehle in Programm schreiben
CALL RestoreBPoint ;Breakpoint-Adresse -> DPTR

MOVX A,@DPTR ;Befehle bei Break-Adresse lesen

PUSH ACC
INC DPTR

MOVX A,@DPTR

PUSH ACC
INC DPTR

MOVX A,@DPTR

PUSH ACC
MOV DPTR,#BreakMem ;Befehle in BreakMem sichern

POP ACC
MOVX @DPTR,A
INC DPTR

POP ACC
MOVX @DPTR,A
INC DPTR

POP ACC
MOVX @DPTR,A
CALL RestoreBPoint ;Breakpoint-Adresse -> DPTR
MOV A,#12h ;Breakbefehle an Break-Adresse schreiben
MOVX @DPTR,A ;LCALL-Befehl schreiben
INC DPTR
MOV A,#BreakProgH ;Sprungadresse (BreakProg) schreiben
MOVX @DPTR,A
INC DPTR
MOV A,#BreakProgL
MOVX @DPTR,A
MOV DPTR,#BreakDone ;BreakDone aktivieren

MOV A,#0FFh
MOVX @DPTR,A

RET


;***************************
;** Break-Befehle löschen **

;***************************


ClrBreak:
MOV DPTR,#BreakMem ;In BreakMem gesicherte Befehle lesen

MOVX A,@DPTR

PUSH ACC
INC DPTR

MOVX A,@DPTR

PUSH ACC
INC DPTR

MOVX A,@DPTR

PUSH ACC
CALL RestoreBreak ;Break-Adresse -> DPTR

POP ACC ;Gesicherte Befehle an Break-Adresse schreiben
MOVX @DPTR,A
INC DPTR

POP ACC
MOVX @DPTR,A
INC DPTR

POP ACC
MOVX @DPTR,A
MOV DPTR,#BreakDone ;BreakDone deaktivieren

CLR A
MOVX @DPTR,A

RET


;*************************
;** Programm fortsetzen **

;*************************


Continue:
CALL ReturnOut
CALL RestoreBreak ;Break-Adresse -> DPTR

MOV A,DPH ;Wenn Break-Adresse=00xxh -> Continue beenden

JZ ContinueE
MOV DPTR,#PSWSafe ;PSW zurückholen

MOVX A,@DPTR
MOV PSW,A

MOV DPTR,#SPSafe ;SP zurückholen

MOVX A,@DPTR
ADD A,#02h ;2, die bei Abbruch von SP abgezogen wurden dazuzählen
MOV SP,A
MOV DPTR,#IESafe ;gesichertes IE-Register zwischenspeichern

MOVX A,@DPTR

PUSH ACC

MOV DPTR,#ACCUSafe ;gesicherten ACCU zwischenspeichern

MOVX A,@DPTR

PUSH ACC

MOV DPTR,#DPTRSafe ;DPTR zurückholen

MOVX A,@DPTR

PUSH ACC
INC DPTR

MOVX A,@DPTR

MOV DPL,A

POP DPH

POP ACC ;zwischengespeicherten ACCU zurückholen
POP IE ;zwischengespeichertes IE-Register zurückholen

RET ;Programm an Abbruchadresse (Stack) fortsetzen

ContinueE:
MOV DPTR,#ContStr

CALL StrOut

RET

;**********

;** List **
;**********

List:

MOV A,#20h ;Space ausgeben

CALL CharOut
CALL HexWordIn ;Startadresse für Listing eingeben -> DPTR
JC ListE ;Wenn ESC dann beenden
CALL ReturnOut
CALL ReturnOut

PUSH DPH

PUSH DPL
MOV DPTR,#ListNum ;Lädt die Anzahl der Befehle

MOVX A,@DPTR

POP DPL

POP DPH
JNZ List1 ;Wenn Anzahl 0 -> List1, sonst
MOV A,#10h ;Zähler auf 16 Befehle setzen

List1:

PUSH ACC
CALL DisASM ;Befehl an Adresse im DPTR ausgeben

POP ACC

INC DPTR ;Listingadresse erhöhen
DJNZ ACC,List1 ;Ist Zähler auf 0 -> Listing beenden

ListE:

RET


;******************

;** Disassembler **

;******************

DisASM:

CALL HexWordOut ;Adresse im DPTR wird ausgegeben
MOV A,#05h
CALL SpaceOut ;5 Space werden ausgegeben

CLR A

MOVC A,@A+DPTR ;Befehlsbyte an Adresse im DPTR einlesen
CALL StoreDPTR1 ;DPTR sichern -> DPTR1

MOV DPTR,#BefehlNum

CLR C ;DPTR:=DPTR+2*ACCU

RLC A ;RLC A = 2*ACCU
JNC DisASM01

INC DPH
DisASM01:

ADD A,DPL

MOV DPL,A

JNC DisASM02

INC DPH

DisASM02:

CLR A ;Adresse an der Befehlsstring beginnt -> DPTR

MOVC A,@A+DPTR

PUSH ACC

MOV A,#01h

MOVC A,@A+DPTR

MOV DPL,A

POP DPH

DisASM1:

CLR A

MOVC A,@A+DPTR
JZ DisASME ;Wenn Zeichen=00h -> Stringausgabe beenden
CJNE A,#01h,DisASM2 ;Wenn Zeichen=01h -> nächstes Befehlsbyte lesen und in

;HEX ausgeben

CALL ReadAddr

CALL HexByteOut

JMP DisASM6
DisASM2:
CJNE A,#02h,DisASM3 ;Wenn Zeichen=02h -> nächstes Befehlsword lesen und in

;HEX ausgeben

CALL ReadAddr ;gelesene Adresse = Bits 8-15 der Sprungadresse

CALL HexByteOut

CALL ReadAddr ;gelesene Adresse = Bits 0-7 der Sprungadresse

CALL HexByteOut

JMP DisASM6
DisASM3:
CJNE A,#03h,DisASM4 ;Wenn Zeichen=03h -> nächstes Befehlsbyte=relative ;Adresse lesen

CALL ReadAddr
CALL RestoreDPTR1 ;gesicherten DPTR1 -> DPTR
INC DPTR ;relative Adresse in absolute umrechnen und in HEX ;ausgeben

ADD A,DPL

MOV DPL,A

CALL HexWordOut
CALL RestoreDPTR2 ;gesicherten DPTR2 -> DPTR

JMP DisASM6
DisASM4:
CJNE A,#04h,DisASM5 ;Wenn Zeichen=04h -> 11 Bit-Adresse lesen und ausgeben
CALL StoreDPTR2 ;DPTR sichern -> DPTR2
CALL RestoreDPTR1 ;gesicherten DPTR1 -> DPTR

CLR A

MOVC A,@A+DPTR ;Befehlsbyte nochmal lesen
RL A ;Die letzten 3 Bit (= Bit 8-10 der Sprungadresse)

RL A ;an den Anfang schieben
RL A
ANL A,#00000111b ;und alle anderen Bits 0 setzten
INC DPTR ;DPTR:=DPTR+2 = Adresse des nächsten Befehlsbytes
INC DPTR

PUSH ACC ;ACCU (Bits 8-10 der Sprungadresse) sichern

MOV A,DPH
ANL A,#11111000b ;Bits 8-10 der nächsten Adresse auf 0 setzten
MOV DPH,A

POP ACC ;ACCU zurückholen
ORL A,DPH ;ACCU mit der näschsten Adresse OR-verknüpfen ->
;Bits 8-15 der Sprungadresse

CALL HexByteOut
CALL RestoreDPTR2 ;gesicherten DPTR2 -> DPTR

CALL ReadAddr ;gelesene Adresse = Bits 0-7 der Sprungadresse

CALL HexByteOut

JMP DisASM6
DisASM5:

CALL CharOut
DisASM6:
INC DPTR
JMP DisASM1

DisASME:
CALL RestoreDPTR1 ;gesicherten DPTR1 -> DPTR
CALL ReturnOut

RET


;******************************

;** Adresse bei Befehl lesen **

;******************************

ReadAddr:
CALL StoreDPTR2 ;DPTR sichern -> DPTR2
CALL RestoreDPTR1 ;gesicherten DPTR1 -> DPTR
INC DPTR

CLR A

MOVC A,@A+DPTR

PUSH ACC
CALL StoreDPTR1 ;DPTR sichern -> DPTR1
CALL RestoreDPTR2 ;gesicherten DPTR2 -> DPTR

POP ACC

RET

;***********************

;** Speicher anzeigen **
;***********************

ShowReg:

MOV DPTR,#SRegStr

CALL StrOut

MOV DPTR,#ACCUSafe

MOVX A,@DPTR

CALL HexByteOut ;gesicherten ACCU-Inhalt anzeigen

CALL Trenn

MOV A,B

CALL HexByteOut ;B-Inhalt anzeigen

CALL Trenn
MOV A,R0

CALL HexByteOut ;R0-Inhalt anzeigen

CALL Trenn

MOV A,R1

CALL HexByteOut ;R1-Inhalt anzeigen

CALL Trenn
MOV A,R2

CALL HexByteOut ;R2-Inhalt anzeigen

CALL Trenn

MOV A,R3

CALL HexByteOut ;R3-Inhalt anzeigen

CALL Trenn
MOV A,R4

CALL HexByteOut ;R4-Inhalt anzeigen

CALL Trenn

MOV A,R5

CALL HexByteOut ;R5-Inhalt anzeigen

CALL Trenn
MOV A,R6

CALL HexByteOut ;R6-Inhalt anzeigen

CALL Trenn

MOV A,R7

CALL HexByteOut ;R7-Inhalt anzeigen

CALL Trenn
MOV DPTR,#PSWSafe ;gesicherten PSW-Inhalt anzeigen

MOVX A,@DPTR

CALL HexByteOut

CALL Trenn

MOV DPTR,#DPTRSafe ;gesicherten DPTR-Inhalt anzeigen

MOVX A,@DPTR

CALL HexByteOut
INC DPTR

MOVX A,@DPTR

CALL HexByteOut

CALL Trenn
MOV DPTR,#SPSafe ;gesicherten SP-Inhalt anzeigen

MOVX A,@DPTR

CALL HexByteOut
CALL ReturnOut
CALL ReturnOut

RET

Trenn:
MOV A,#20h

CALL CharOut
MOV A,#20h

CALL CharOut

RET


;********************

;** Word speichern **

;********************

StoreBreak:

PUSH ACC

PUSH DPL

PUSH DPH

MOV DPTR,#BreakAdr

JMP StoreWord
StoreBPoint:

PUSH ACC

PUSH DPL

PUSH DPH
MOV DPTR,#BreakPoint

JMP StoreWord
StoreDPTR1:

PUSH ACC

PUSH DPL

PUSH DPH

MOV DPTR,#DPTR1Mem

JMP StoreWord
StoreDPTR2:

PUSH ACC

PUSH DPL

PUSH DPH
MOV DPTR,#DPTR2Mem

StoreWord:

POP ACC
MOVX @DPTR,A
INC DPTR

POP ACC
MOVX @DPTR,A

POP ACC

RET


;****************

;** Word laden **

;****************

RestoreBreak:

MOV DPTR,#BreakAdr

JMP RestoreWord

RestoreBPoint:
MOV DPTR,#BreakPoint

JMP RestoreWord
RestoreDPTR1:

MOV DPTR,#DPTR1Mem

JMP RestoreWord

RestoreDPTR2:
MOV DPTR,#DPTR2Mem

RestoreWord:

PUSH ACC

MOVX A,@DPTR

PUSH ACC
INC DPTR

MOVX A,@DPTR

MOV DPL,A

POP DPH

POP ACC

RET


;*******************************************
;** Warteschleife für CharOut, CharInHide **

;*******************************************

Warten:

DJNZ ACC,Warten

RET


;***************************************
;** Unterprogramme zur Zeichenausgabe **

;***************************************


;******************

;** Char-Ausgabe **

;******************

CharOut:

PUSH PSW

PUSH DPH

PUSH DPL

MOV DPTR,#Serielle

PUSH ACC

MOVX A,@DPTR
CJNE A,#01h,CharOut1 ;Wenn Serielle=01h -> ser. Schnittstelle auf PA

POP ACC

MOV DPTR,#DataRegA
JMP CharOut5

CharOut1:
CJNE A,#02h,CharOut3 ;Wenn Serielle=02h -> echte ser. Schnittstelle

POP ACC

POP DPL

POP DPH

POP PSW
CLR TI ;echte serielle Schnittstelle
MOV SBUF,A

CharOut2:
JNB TI,CharOut2

RET
CharOut3: ;sonst ser. Schnittstelle auf P1

POP ACC

POP DPL

POP DPH

PUSH B ;simulierte ser. Schnittstelle auf P1

CLR TDat ;Startbit setzen
MOV B,#08h
CharOut4: ;Schleife zur Ausgabe der 8 Datenbits

PUSH ACC
MOV A,#41

CALL Warten

POP ACC

RRC A

MOV TDat,C ;Datenbit setzen
DJNZ B,CharOut4

POP B

PUSH ACC
MOV A,#41

CALL Warten

NOP

NOP

SETB TDat ;Stoppbit setzen
MOV A,#92

CALL Warten

POP ACC

RRC A

POP PSW

RET
CharOut5: ;simulierte ser. Schnittstelle auf PA

PUSH B

PUSH ACC

MOVX A,@DPTR

CLR ACC.1 ;Startbit setzen
MOVX @DPTR,A

POP ACC
MOV B,#08h
CharOut6: ;Schleife zur Ausgabe der 8 Datenbits

RRC A

PUSH ACC

MOV A,#38

CALL Warten

MOVX A,@DPTR
MOV ACC.1,C ;Datenbit setzen
MOVX @DPTR,A

POP ACC

DJNZ B,CharOut6

POP B

PUSH ACC
MOV A,#39

CALL Warten

MOVX A,@DPTR

SETB ACC.1 ;Stoppbit setzen
MOVX @DPTR,A

MOV A,#90

CALL Warten

POP ACC

RRC A

POP DPL

POP DPH

POP PSW

RET


;********************

;** Return-Ausgabe **

;********************

ReturnOut:

PUSH ACC
MOV A,#0Dh

CALL CharOut

MOV A,#0Ah

CALL CharOut

POP ACC

RET


;*******************
;** Space-Ausgabe **

;*******************


SpaceOut:
JZ SpaceOutE

PUSH ACC
MOV A,#20h

CALL CharOut

POP ACC

DEC A
JMP SpaceOut

SpaceOutE:

RET


;********************

;** Cursor-Ausgabe **

;********************

CursorOut:

PUSH ACC
MOV A,#1Bh ;ESC-Zeichen ausgeben

CALL CharOut

POP ACC

PUSH DPH

PUSH DPL

MOV DPTR,#CurNum

MOVC A,@A+DPTR ;Steuerzeichen von Adresse DPTR (CurNum) + ACCU lesen

POP DPL

POP DPH

CALL CharOut ;und ausgeben

RET


;********************

;** String-Ausgabe **

;********************

StrOut:

PUSH ACC
StrOut1:

CLR A

MOVC A,@A+DPTR ;Zeichen an Adresse im DPTR lesen
JZ StrOut2 ;Wenn Zeichen=00h, dann Beenden

CALL CharOut ;sonst Zeichen ausgeben

INC DPTR ;Adresse erhöhen
JMP StrOut1 ;und nächstes Zeichen lesen

StrOut2:

POP ACC

RET


;************************
;** Hex-Nibble-Ausgabe **

;************************


HexNibOut:

PUSH ACC

PUSH PSW
ANL A,#0Fh

CJNE A,#0Ah,HexNibOut1
HexNibOut1:

JC HexNibOut2
ADD A,#37h

JMP HexNibOut3
HexNibOut2:

ADD A,#30h
HexNibOut3:

CALL CharOut

POP PSW

POP ACC

RET


;**********************

;** Hex-Byte-Ausgabe **

;**********************

HexByteOut:
SWAP A
CALL HexNibOut
SWAP A
CALL HexNibOut

RET


;**********************
;** Hex-Word-Ausgabe **

;**********************


HexWordOut:

PUSH ACC

MOV A,DPH

CALL HexByteOut

MOV A,DPL
CALl HexByteOut

POP ACC

RET

;***********************

;** Binär-Bit-Ausgabe **
;** Bit im C **
;***********************


BinBitOut:

PUSH ACC

MOV A,#30h
JNC BinBitOut1

INC A
BinBitOut1:

CALL CharOut

POP ACC

RET

;***********************

;** Binär-Bit-Ausgabe **

;** Bit im ACCU **
;***********************

BinBitOutACCU:

PUSH B
MOV B,#30h

JNB ACC.0,BinBitOutACCU1
INC B

BinBitOutACCU1:
XCH A,B

CALL CharOut
XCH A,B

POP B

RET


;************************

;** Binär-Byte-Ausgabe **

;************************

BinByteOut:

PUSH B
MOV B,#08h

BinByteOut1:
RL A

CALL BinBitOutACCU
DJNZ B,BinByteOut1

POP B

RET


;************************

;** Binär-Word-Ausgabe **

;************************

BinWordOut:

PUSH ACC

MOV A,DPH
CALL BinByteOut

MOV A,DPL
CALL BinByteOut

POP ACC

RET


;*************************
;** Dezimalzahl-Ausgabe **

;*************************


NumOut:

PUSH B

PUSH ACC
MOV B,#64h
DIV AB ;Zahl/100 => A=100er-Stelle; B=Rest

ADD A,#30h ;100er-Stelle wird ausgegeben

CALL CharOut

MOV A,B

MOV B,#0Ah
DIV AB ;Rest von vorher/100 => A=10er-Stelle; B=Rest

ADD A,#30h ;10er-Stelle wird ausgegeben

CALL CharOut

MOV A,B

ADD A,#30h ;Rest=1er-Stelle wird ausgegeben

CALL CharOut

POP ACC

POP B

RET


;**************************************

;** Unterprogramme zu Zeicheneingabe **

;**************************************


;*****************************

;** Char-Eingabe unsichtbar **

;*****************************

CharInHide:

PUSH PSW
PUSH DPH

PUSH DPL

MOV DPTR,#Serielle

MOVX A,@DPTR
CJNE A,#01h,CharInHide1 ;Wenn Serielle=01h -> ser. Schnittstelle auf PA

MOV DPTR,#PinRegA

JMP CharInHide7

CharInHide1:
CJNE A,#02h,CharInHide3 ;Wenn Serielle=02h -> echte ser. Schnittstelle

POP DPL

POP DPH

POP PSW
CharInHide2:

JNB RI,CharInHide2
MOV A,SBUF

CLR RI

RET
CharInHide3: ;sonst ser. Schnittstelle auf P1

POP DPL

POP DPH
CharInHide4: ;simulierte ser. Schnittstelle auf P1
JB RDat,CharInHide4 ;auf Startbit warten
MOV A,#20

CALL Warten

NOP
JB RDat,CharInHide4 ;prüfen ob Startbit noch vorhanden

PUSH B
MOV B,#08h
CharInHide5: ;Schleife um 8 Datenbits einzulesen

PUSH ACC
MOV A,#41

CALL Warten

POP ACC

MOV C,RDat ;Datenbit einlesen

RRC A

NOP
DJNZ B,CharInHide5

POP B

PUSH ACC
MOV A,#39

CALL Warten

POP ACC

NOP

JNB RDat,CharInHide6 ;prüfen ob Stoppbit vorhanden

POP PSW

RET
CharInHide6:

JNB RDat,CharInHide6
JMP CharInHide4
CharInHide7: ;simulierte ser. Schnittstelle auf PA

MOVX A,@DPTR
JB ACC.0,CharInHide7 ;auf Startbit warten
MOV A,#19

CALL Warten

NOP

MOVX A,@DPTR
JB ACC.0,CharInHide7 ;prüfen ob Startbit noch vorhanden

PUSH B
MOV B,#08h
CharInHide8: ;Schleife um 8 Datenbits einzulesen

PUSH ACC

MOV A,#40

CALL Warten

NOP

MOVX A,@DPTR ;Datenbit einlesen

MOV C,ACC.0

POP ACC

RRC A
DJNZ B,CharInHide8

POP B

PUSH ACC
MOV A,#39

CALL Warten

NOP

MOVX A,@DPTR

JNB ACC.0,CharInHide9 ;prüfen ob Stoppbit vorhanden

POP ACC

POP DPL

POP DPH

POP PSW

RET

CharInHide9:

MOVX A,@DPTR

JNB ACC.0,CharInHide9

POP ACC

JMP CharInHide7


;**************************
;** Char-Eingabe sichbar **

;**************************


CharIn:

CALL CharInHide

CALL CharOut

PUSH PSW

CJNE A,#0Dh,CharIn1

PUSH ACC

MOV A,#0Ah

CALL CharOut

POP ACC
CharIn1:

POP PSW

RET


;************************

;** Hex-Nibbel-Eingabe **

;************************

HexNibIn:

CALL CharInHide ;auf Eingabe warten
CJNE A,#1Bh,HexNibIn1 ;Wenn Zeichen=ESC -> C=1 und Beenden
SETB C

CLR A

RET
HexNibIn1:
CJNE A,#30h,HexNibIn2 ;Wenn Zeichen zurück zu Eingabe
HexNibIn2:

JC HexNibIn
CJNE A,#3Ah,HexNibIn3 ;Wenn Zeichen Nummer

HexNibIn3:

JC HexNibIn6
ANL A,#11011111b ;Kleinbuchstaben auf große umwandeln
CJNE A,#41h,HexNibIn4 ;Wenn Zeichen zurück zu Eingabe

HexNibIn4:

JC HexNibIn
CJNE A,#47h,HexNibIn5 ;Wenn Zeichen Buchstabe
HexNibIn5:

JNC HexNibIn

CALL CharOut

CLR C
SUBB A,#37h

RET
HexNibIn6: ;Nummer

CALL CharOut

CLR C

SUBB A,#30h

RET


;**********************

;** Hex-Byte-Eingabe **

;**********************

HexByteIn:

PUSH B
CALL HexNibIn
JC HexByteInE
SWAP A

MOV B,A
CALL HexNibIn
JC HexByteInE
ORL A,B

POP B

RET

HexByteInE:

CLR A

POP B

RET


;**********************

;** Hex-Word-Eingabe **

;**********************

HexWordIn:

PUSH ACC

CALL HexByteIn

JC HexWordInE
MOV DPH,A

CALL HexByteIn

JC HexWordInE

MOV DPL,A

POP ACC

RET
HexWordInE:

MOV DPTR,#0000h

POP ACC

RET

;***********************

;** Binär-Bit-Eingabe **

;** Bit -> C **
;***********************

BinBitIn:

PUSH ACC
BinBitIn1:

CALL CharInHide
CJNE A,#30h,BinBitIn2

CLR C

POP ACC

RET
BinBitIn2:

CJNE A,#31h,BinBitIn1
SETB C

POP ACC

RET

;***********************

;** Binär-Bit-Eingabe **
;** Bit -> ACCU **
;***********************


BinBitInACCU:

PUSH ACC

BinBitInACCU1:

CALL CharInHide

CJNE A,#1Bh,BinBitInACCU2
SETB C

POP ACC

RET

BinBitInACCU2:
CJNE A,#30h,BinBitInACCU3

CALL CharOut

CLR C

POP ACC

CLR ACC.0

RET
BinBitInACCU3:

CJNE A,#31h,BinBitInACCU1

CALL CharOut

CLR C

POP ACC

SETB ACC.0

RET


;************************

;** Binär-Byte-Eingabe **

;************************

BinByteIn:

PUSH B
MOV B,#08h

BinByteIn1:
CALL BinBitInACCU

JC BinByteInE
RL A

DJNZ B,BinByteIn1

POP B

RET
BinByteInE:

CLR A

POP B

RET


;************************
;** Binär-Word-Eingabe **

;************************


BinWordIn:

PUSH ACC

CALL BinByteIn

JC BinWordInE
MOV DPH,A

CALL BinByteIn

JC BinWordInE

MOV DPL,A

POP ACC

RET

BinWordInE:

MOV DPTR,#0000h

POP ACC

RET


;****************************

;** Dezimalziffern-Eingabe **

;****************************

NumIn:

CALL CharInHide
CJNE A,#1Bh,NumIn1
SETB C

CLR A

RET
NumIn1:

CJNE A,#30h,NumIn2
NumIn2:

JC NumIn
CJNE A,#3Ah,NumIn3

NumIn3:

JC NumInN

JMP NumIn
NumInN:

CLR C

SUBB A,#30h

RET

;***********
;** Break **
;***********


ORG BreakProg


Break:
PUSH IE

MOV IE,#00h

PUSH ACC

PUSH DPL

PUSH DPH

MOV DPTR,#DPTRSafe ;DPTR sichern

POP ACC
MOVX @DPTR,A
INC DPTR

POP ACC
MOVX @DPTR,A
MOV DPTR,#ACCUSafe ;ACCU sichern

POP ACC
MOVX @DPTR,A
MOV DPTR,#IESafe ;IE sichern

POP ACC
MOVX @DPTR,A

MOV DPTR,#PSWSafe ;PSW sichern
MOV A,PSW
MOVX @DPTR,A
MOV DPTR,#SPSafe ;SP sichern

MOV A,SP

CLR C
SUBB A,#02h ;vom SP 2 abziehen, weil darin auch Rücksprungadresse

;des CALL-Befehls des Abbruchs enthalten ist
MOVX @DPTR,A

POP DPH ;Break-Adresse, die von LCALL-Befehl in den Stack

POP DPL ;geschrieben wurde -> DPTR

CLR C ;vom DPTR 03h abziehen, da die Adresse am Stack

MOV A,DPL ;die Adresse nach dem LCALL-Befehl ist.
SUBB A,#03h

MOV DPL,A

MOV A,DPH

SUBB A,#00h
MOV DPH,A

PUSH DPL ;Break-Adresse wieder zurück auf den Stack

PUSH DPH
CALL StoreBreak ;DPTR -> Break-Adresse
CALL ClrBreak ;Break-Befehle im Programm löschen
CALL ShowReg ;Registerinhalte bei Abbruch anzeigen
CALL RestoreBreak ;Break-Adresse -> DPTR
CALL DisASM ;Befehl an Break-Adresse anzeigen
MOV DPTR,#BreakStr ;Abbruch anzeigen

CALL StrOut

JMP Beginn


;*********************

;** T a b e l l e n **

;*********************

ORG Tabellen


;********************

;** Stringtabellen **

;********************

ResetStr:

DB 0Dh,0Ah

DB 0Dh,0Ah

DB \' ----------------\',0Dh,0Ah
DB \' | uP-OS 8052 |\',0Dh,0Ah

DB \' | V 2.1 |\',0Dh,0Ah

DB \' ----------------\',0Dh,0Ah

DB 0Dh,0Ah
DB \' Copyright 1996\',0Dh,0Ah

DB 0Dh,0Ah
DB \'Monitorprogramm fuer uP-8051 Entwicklungs-Kit\',0Dh,0Ah

DB 0Dh,0Ah
DB \'Monitorprogramm von:\',0Dh,0Ah
DB \' Roland HEINRICH\',0Dh,0Ah
DB \'Entwicklungs-Kit von:\',0Dh,0Ah
DB \' Thomas CLAUSEN & Roland HEINRICH\',0Dh,0Ah
DB \'Projektidee von:\',0Dh,0Ah
DB \' Dipl.Ing. Wilhelm GUGGENBERG\',0Dh,0Ah
DB \'Entwickelt an der:\',0Dh,0Ah
DB \' HTBLA Wien 10, Ettenreichgasse 54\',0Dh,0Ah
DB 00h

EingabeStr:

DB \'Monitor -> \'
DB 00h

HelpStr:

DB 0Dh,0Ah

DB 0Dh,0Ah

DB \'Befehlserklaerung:\',0Dh,0Ah

DB 0Dh,0Ah
DB \' g xxxx ... Programm an der 16-Bit-Adresse xxxx starten\',0Dh,0Ah
DB \' l xxxx ... 10 Befehle ab der 16-Bit-Adresse xxxx anzeigen\',0Dh,0Ah
DB \' bs xxxx ... Breakpoint auf 16-Bit-Adresse xxxx setzen\',0Dh,0Ah
DB \' bl ... Breakpoint anzeigen\',0Dh,0Ah
DB \' bd ... Breakpoint loeschen\',0Dh,0Ah
DB \' dc xxxx ... Byte im Programm-Speicher anzeigen\',0Dh,0Ah
DB \' di xx ... Byte im internen Daten-Speicher anzeigen\',0Dh,0Ah
DB \' dx xxxx ... Byte im externen Daten-Speicher anzeigen\',0Dh,0Ah
DB \' ec xxxx ... Byte im Programm-Speicher editieren\',0Dh,0Ah
DB \' ei xx ... Byte im internen Daten-Speicher editieren\',0Dh,0Ah
DB \' ex xxxx ... Byte im externen Daten-Speicher editieren\',0Dh,0Ah
DB \' c ... Programm nach Abbruch fortsetzen\',0Dh,0Ah
DB \' i ... Programm in IntelHex-Format eingeben\',0Dh,0Ah
DB \' o ... Optionen fuer Monitor setzen\',0Dh,0Ah
DB \' r ... Software-Reset\',0Dh,0Ah

DB 0Dh,0Ah
DB \'Alle Adressen muessen in HEX eingegeben werden.\',0Dh,0Ah
DB \'Um die Eingabe von Adressen abzubrechen, ESC-Taste druecken.\',0Dh,0Ah
DB 00h


DAktuellStr:

DB 0Dh,0Ah

DB 0Dh,0Ah
DB \'Aktueller Inhalt: \'
DB 00h


ENeuStr:

DB 0Dh,0Ah

DB \'Neuer Inhalt : \'
DB 00h

BSetStr:

DB 0Dh,0Ah

DB 0Dh,0Ah

DB \'Breakpoint gesetzt.\',0Dh,0Ah
DB 00h

BSFehlerStr:

DB 0Dh,0Ah,0Dh,0Ah
DB \'!! Breakpoint-Adresse ungueltig. !!\',0Dh,0Ah
DB \' Bereich: 8000-86FF / 9000-9FFF\',0Dh,0Ah
DB 00h

BListStr:

DB 0Dh,0Ah,0Dh,0Ah
DB \'Breakpoint-Adresse: \'
DB 00h


BLKeinStr:
DB \'keine\',0Dh,0Ah
DB 00h


BDelStr:

DB 0Dh,0Ah,0Dh,0Ah
DB \'Breakpoint-Adresse geloescht.\',0Dh,0Ah
DB 00h

BAktStr:

DB 0Dh,0Ah
DB \'!! Breakpoint-Adresse gesetzt. !!\',0Dh,0Ah

DB 0Dh,0Ah
DB \'Return -> aktivieren\',0Dh,0Ah
DB \'ESC -> nicht aktivieren\',0Dh,0Ah

DB 0Dh,0Ah
DB 00h


BreakStr:

DB 0Dh,0Ah
DB \'!! Programm abgebrochen. !!\',0Dh,0Ah

DB 0Dh,0Ah
DB \'c -> Programm fortsetzen\',0Dh,0Ah
DB 00h

SRegStr:

DB 0Dh,0Ah

DB 0Dh,0Ah
DB \' A B R0 R1 R2 R3 R4 R5 R6 R7 PSW DPTR SP\',0Dh,0Ah
DB \'------------------------------------------------------\',0Dh,0Ah

DB \' \'
DB 00h

ContStr:

DB 0Dh,0Ah
DB \'!! Programm kann nicht fortgesetzt werden. !!\',0Dh,0Ah
DB 00h


IAchtungStr:

DB 0Dh,0Ah,0Dh,0Ah
DB \'!! Altes Programm wird moeglicherweise geloescht. !!\',0Dh,0Ah

DB 0Dh,0Ah

DB \'Return -> Weiter\',0Dh,0Ah

DB \'ESC -> Abbruch\',0Dh,0Ah
DB 00h


IFehlerStr:

DB 0Dh,0Ah,0Dh,0Ah
DB \'!! Programm-Adresse ungueltig. !!\',0Dh,0Ah
DB \' Bereich: 8000-86FF / 9000-9FFF\',0Dh,0Ah
DB 00h


SResetStr:

DB 0Dh,0Ah,0Dh,0Ah
DB \'!! Gesamter Programmspeicher, Optionen und der !!\',0Dh,0Ah
DB \'!! Breakpoint werden geloescht. !!\',0Dh,0Ah

DB 0Dh,0Ah

DB \'Return -> Weiter\',0Dh,0Ah

DB \'ESC -> Abbruch\',0Dh,0Ah
DB 00h

SRFertigStr:

DB 0Dh,0Ah
DB \'Software-Reset beendet.\',0Dh,0Ah
DB 00h


OptionStr:

DB 0Dh,0Ah,0Dh,0Ah

DB \'Optionen:\',0Dh,0Ah

DB 0Dh,0Ah

DB \'ESC ... Zurueck\',0Dh,0Ah
DB \'l xx ... Befehlsanzahl bei List aendern\',0Dh,0Ah
DB \' 00 = Default (10h Befehle)\',0Dh,0Ah
DB \'s xx ... Serielle Schnittstelle aender\',0Dh,0Ah
DB \' 00 = simuliert auf Port P1\',0Dh,0Ah
DB \' 01 = simuliert auf Port PA\',0Dh,0Ah
DB \' 02 = nicht simulierte\',0Dh,0Ah

DB 0Dh,0Ah
DB \'Werte sind immer im Hex-Format einzugeben.\',0Dh,0Ah

DB 0Dh,0Ah

DB \'List-Befehlsanzahl: \'
DB 00h

Option1Str:

DB 0Dh,0Ah
DB \'Serielle Schnittstelle: \'
DB 00h


OEingabeStr:

DB 0Dh,0Ah,0Dh,0Ah

DB \'Optionen -> \'
DB 00h

OResetStr:

DB 0Dh,0Ah,0Dh,0Ah
DB \'Jumperstellung aendern und Hardware-Reset durchfuehren.\',0Dh,0Ah
DB 00h


;********************
;** Nummertabellen **

;********************


CurNum:
DB 41h,42h,43h,44h,48h,59h

BefehlNum:
DW Ins00,Ins01,Ins02,Ins03,Ins04,Ins05,Ins06,Ins07,Ins08,Ins09,Ins0A,Ins0B,Ins0C,Ins0D,Ins0E,Ins0F
DW Ins10,Ins11,Ins12,Ins13,Ins14,Ins15,Ins16,Ins17,Ins18,Ins19,Ins1A,Ins1B,Ins1C,Ins1D,Ins1E,Ins1F
DW Ins20,Ins01,Ins22,Ins23,Ins24,Ins25,Ins26,Ins27,Ins28,Ins29,Ins2A,Ins2B,Ins2C,Ins2D,Ins2E,Ins2F
DW Ins30,Ins11,Ins32,Ins33,Ins34,Ins35,Ins36,Ins37,Ins38,Ins39,Ins3A,Ins3B,Ins3C,Ins3D,Ins3E,Ins3F
DW Ins40,Ins01,Ins42,Ins43,Ins44,Ins45,Ins46,Ins47,Ins48,Ins49,Ins4A,Ins4B,Ins4C,Ins4D,Ins4E,Ins4F
DW Ins50,Ins11,Ins52,Ins53,Ins54,Ins55,Ins56,Ins57,Ins58,Ins59,Ins5A,Ins5B,Ins5C,Ins5D,Ins5E,Ins5F
DW Ins60,Ins01,Ins62,Ins63,Ins64,Ins65,Ins66,Ins67,Ins68,Ins69,Ins6A,Ins6B,Ins6C,Ins6D,Ins6E,Ins6F
DW Ins70,Ins11,Ins72,Ins73,Ins74,Ins75,Ins76,Ins77,Ins78,Ins79,Ins7A,Ins7B,Ins7C,Ins7D,Ins7E,Ins7F
DW Ins80,Ins01,Ins82,Ins83,Ins84,Ins85,Ins86,Ins87,Ins88,Ins89,Ins8A,Ins8B,Ins8C,Ins8D,Ins8E,Ins8F
DW Ins90,Ins11,Ins92,Ins93,Ins94,Ins95,Ins96,Ins97,Ins98,Ins99,Ins9A,Ins9B,Ins9C,Ins9D,Ins9E,Ins9F
DW InsA0,Ins01,InsA2,InsA3,InsA4,InsA5,InsA6,InsA7,InsA8,InsA9,InsAA,InsAB,InsAC,InsAD,InsAE,InsAF
DW InsB0,Ins11,InsB2,InsB3,InsB4,InsB5,InsB6,InsB7,InsB8,InsB9,InsBA,InsBB,InsBC,InsBD,InsBE,InsBF
DW InsC0,Ins01,InsC2,InsC3,InsC4,InsC5,InsC6,InsC7,InsC8,InsC9,InsCA,InsCB,InsCC,InsCD,InsCE,InsCF
DW InsD0,Ins11,InsD2,InsD3,InsD4,InsD5,InsD6,InsD7,InsD8,InsD9,InsDA,InsDB,InsDC,InsDD,InsDE,InsDF
DW InsE0,Ins01,InsE2,InsE3,InsE4,InsE5,InsE6,InsE7,InsE8,InsE9,InsEA,InsEB,InsEC,InsED,InsEE,InsEF
DW InsF0,Ins11,InsF2,InsF3,InsF4,InsF5,InsF6,InsF7,InsF8,InsF9,InsFA,InsFB,InsFC,InsFD,InsFE,InsFF


;********************

;** Befehlstabelle **

;********************

Ins00: DB \'NOP\',00h

Ins01: DB \'AJMP \',04h,00h
Ins02: DB \'LJMP \',02h,00h

Ins03: DB \'RR A\',00h
Ins04: DB \'INC A\',00h

Ins05: DB \'INC \',01h,00h
Ins06: DB \'INC @R0\',00h

Ins07: DB \'INC @R1\',00h
Ins08: DB \'INC R0\',00h

Ins09: DB \'INC R1\',00h
Ins0A: DB \'INC R2\',00h

Ins0B: DB \'INC R3\',00h
Ins0C: DB \'INC R4\',00h

Ins0D: DB \'INC R5\',00h
Ins0E: DB \'INC R6\',00h

Ins0F: DB \'INC R7\',00h


Ins10: DB \'JBC \',01h,\',\',03h,00h
Ins11: DB \'ACALL \',04h,00h

Ins12: DB \'LCALL \',02h,00h
Ins13: DB \'RRC A\',00h

Ins14: DB \'DEC A\',00h
Ins15: DB \'DEC \',01h,00h

Ins16: DB \'DEC @R0\',00h
Ins17: DB \'DEC @R1\',00h

Ins18: DB \'DEC R0,\',00h
Ins19: DB \'DEC R1,\',00h

Ins1A: DB \'DEC R2,\',00h
Ins1B: DB \'DEC R3,\',00h

Ins1C: DB \'DEC R4,\',00h
Ins1D: DB \'DEC R5,\',00h

Ins1E: DB \'DEC R6,\',00h
Ins1F: DB \'DEC R7,\',00h

Ins20: DB \'JB \',01h,\',\',03h,00h

Ins22: DB \'RET\',00h
Ins23: DB \'RL A\',00h

Ins24: DB \'ADD A,#\',01h,00h
Ins25: DB \'ADD A,\',01h,00h

Ins26: DB \'ADD A,@R0\',00h
Ins27: DB \'ADD A,@R1\',00h

Ins28: DB \'ADD A,R0\',00h
Ins29: DB \'ADD A,R1\',00h

Ins2A: DB \'ADD A,R2\',00h
Ins2B: DB \'ADD A,R3\',00h

Ins2C: DB \'ADD A,R4\',00h
Ins2D: DB \'ADD A,R5\',00h

Ins2E: DB \'ADD A,R6\',00h
Ins2F: DB \'ADD A,R7\',00h

Ins30: DB \'JNB \',01h,\',\',03h,00h

Ins32: DB \'RETI\',00h
Ins33: DB \'RLC A\',00h

Ins34: DB \'ADDC A,#\',01h,00h
Ins35: DB \'ADDC A,\',01h,00h

Ins36: DB \'ADDC A,@R0\',00h
Ins37: DB \'ADDC A,@R1\',00h

Ins38: DB \'ADDC A,R0\',00h
Ins39: DB \'ADDC A,R1\',00h

Ins3A: DB \'ADDC A,R2\',00h
Ins3B: DB \'ADDC A,R3\',00h

Ins3C: DB \'ADDC A,R4\',00h
Ins3D: DB \'ADDC A,R5\',00h

Ins3E: DB \'ADDC A,R6\',00h
Ins3F: DB \'ADDC A,R7\',00h

Ins40: DB \'JC \',03h,00h

Ins42: DB \'ORL \',01h,\',A\',00h
Ins43: DB \'ORL \',01h,\',#\',01h,00h

Ins44: DB \'ORL A,#\',01h,00h
Ins45: DB \'ORL A,\',01h,00h

Ins46: DB \'ORL A,@R0\',00h
Ins47: DB \'ORL A,@R1\',00h

Ins48: DB \'ORL A,R0\',00h
Ins49: DB \'ORL A,R1\',00h

Ins4A: DB \'ORL A,R2\',00h
Ins4B: DB \'ORL A,R3\',00h

Ins4C: DB \'ORL A,R4\',00h
Ins4D: DB \'ORL A,R5\',00h

Ins4E: DB \'ORL A,R6\',00h
Ins4F: DB \'ORL A,R7\',00h

Ins50: DB \'JNC \',03h,00h

Ins52: DB \'ANL \',01h,\',A\',00h
Ins53: DB \'ANL \',01h,\',#\',01h,00h

Ins54: DB \'ANL A,#\',01h,00h
Ins55: DB \'ANL A,\',01h,00h

Ins56: DB \'ANL A,@R0\',00h
Ins57: DB \'ANL A,@R1\',00h

Ins58: DB \'ANL A,R0\',00h
Ins59: DB \'ANL A,R1\',00h

Ins5A: DB \'ANL A,R2\',00h
Ins5B: DB \'ANL A,R3\',00h

Ins5C: DB \'ANL A,R4\',00h
Ins5D: DB \'ANL A,R5\',00h

Ins5E: DB \'ANL A,R6\',00h
Ins5F: DB \'ANL A,R7\',00h

Ins60: DB \'JZ \',03h,00h

Ins62: DB \'XRL \',01h,\',A\',00h
Ins63: DB \'XRL \',01h,\',#\',01h,00h

Ins64: DB \'XRL A,#\',01h,00h
Ins65: DB \'XRL A,\',01h,00h

Ins66: DB \'XRL A,@R0\',00h
Ins67: DB \'XRL A,@R1\',00h

Ins68: DB \'XRL A,R0\',00h
Ins69: DB \'XRL A,R1\',00h

Ins6A: DB \'XRL A,R2\',00h
Ins6B: DB \'XRL A,R3\',00h

Ins6C: DB \'XRL A,R4\',00h
Ins6D: DB \'XRL A,R5\',00h

Ins6E: DB \'XRL A,R6\',00h
Ins6F: DB \'XRL A,R7\',00h

Ins70: DB \'JNZ \',03h,00h

Ins72: DB \'ORL C,\',01h,00h
Ins73: DB \'JMP @A+DPTR\',00h

Ins74: DB \'MOV A,#\',01h,00h
Ins75: DB \'MOV \',01h,\',#\',01h,00h

Ins76: DB \'MOV @R0,#\',01h,00h
Ins77: DB \'MOV @R1,#\',01h,00h

Ins78: DB \'MOV R0,#\',01h,00h
Ins79: DB \'MOV R1,#\',01h,00h

Ins7A: DB \'MOV R2,#\',01h,00h
Ins7B: DB \'MOV R3,#\',01h,00h

Ins7C: DB \'MOV R4,#\',01h,00h
Ins7D: DB \'MOV R5,#\',01h,00h

Ins7E: DB \'MOV R6,#\',01h,00h
Ins7F: DB \'MOV R7,#\',01h,00h

Ins80: DB \'SJMP \',03h,00h

Ins82: DB \'ANL C,\',01h,00h
Ins83: DB \'MOVC A,@A+PC\',00h

Ins84: DB \'DIV AB\',00h
Ins85: DB \'MOV \',01h,\',\',01h,00h

Ins86: DB \'MOV \',01h,\',@R0\',00h
Ins87: DB \'MOV \',01h,\',@R1\',00h

Ins88: DB \'MOV \',01h,\',R0\',00h
Ins89: DB \'MOV \',01h,\',R1\',00h

Ins8A: DB \'MOV \',01h,\',R2\',00h
Ins8B: DB \'MOV \',01h,\',R3\',00h

Ins8C: DB \'MOV \',01h,\',R4\',00h
Ins8D: DB \'MOV \',01h,\',R5\',00h

Ins8E: DB \'MOV \',01h,\',R6\',00h
Ins8F: DB \'MOV \',01h,\',R7\',00h

Ins90: DB \'MOV DPTR,#\',02h,00h

Ins92: DB \'MOV \',01h,\',C\',00h
Ins93: DB \'MOVC A,@A+DPTR\',00h

Ins94: DB \'SUBB A,#\',01h,00h
Ins95: DB \'SUBB A,\',01h,00h

Ins96: DB \'SUBB A,@R0\',00h
Ins97: DB \'SUBB A,@R1\',00h

Ins98: DB \'SUBB A,R0\',00h
Ins99: DB \'SUBB A,R1\',00h

Ins9A: DB \'SUBB A,R2\',00h
Ins9B: DB \'SUBB A,R3\',00h

Ins9C: DB \'SUBB A,R4\',00h
Ins9D: DB \'SUBB A,R5\',00h

Ins9E: DB \'SUBB A,R6\',00h
Ins9F: DB \'SUBB A,R7\',00h

InsA0: DB \'ORL C,/\',01h,00h

InsA2: DB \'MOV C,\',01h,00h
InsA3: DB \'INC DPTR\',00h

InsA4: DB \'MUL AB\',00h
InsA5: DB \'No Instr\',00h

InsA6: DB \'MOV @R0,\',01h,00h
InsA7: DB \'MOV @R1,\',01h,00h

InsA8: DB \'MOV R0,\',01h,00h
InsA9: DB \'MOV R1,\',01h,00h

InsAA: DB \'MOV R2,\',01h,00h
InsAB: DB \'MOV R3,\',01h,00h

InsAC: DB \'MOV R4,\',01h,00h
InsAD: DB \'MOV R5,\',01h,00h

InsAE: DB \'MOV R6,\',01h,00h
InsAF: DB \'MOV R7,\',01h,00h

InsB0: DB \'ANL C,/\',01h,00h

InsB2: DB \'CPL \',01h,00h
InsB3: DB \'CPL C\',00h
InsB4: DB \'CJNE A,#\',01h,\',\',03h,00h
InsB5: DB \'CJNE A,\',01h,\',\',03h,00h
InsB6: DB \'CJNE @R0,#\',01h,\',\',03h,00h
InsB7: DB \'CJNE @R1,#\',01h,\',\',03h,00h
InsB8: DB \'CJNE R0,#\',01h,\',\',03h,00h
InsB9: DB \'CJNE R1,#\',01h,\',\',03h,00h
InsBA: DB \'CJNE R2,#\',01h,\',\',03h,00h
InsBB: DB \'CJNE R3,#\',01h,\',\',03h,00h
InsBC: DB \'CJNE R4,#\',01h,\',\',03h,00h
InsBD: DB \'CJNE R5,#\',01h,\',\',03h,00h
InsBE: DB \'CJNE R6,#\',01h,\',\',03h,00h InsBF: DB

 
 

Datenschutz
Top Themen / Analyse
indicator EDBS - TEST
indicator ROM
indicator Laborbericht Strom/Spannung
indicator Wie komme ich zu einem Internet-Anschluss?
indicator The history of the internet-
indicator Kognitivistische Lernprogramme
indicator Local Area Network
indicator Microsoft: Windows 95
indicator Bestes Scan Ergebnis
indicator Wie erzeugt ein Laser ein Lichtbündel ?


Datenschutz
Zum selben thema
icon Netzwerk
icon Software
icon Entwicklung
icon Windows
icon Programm
icon Unix
icon Games
icon Sicherheit
icon Disk
icon Technologie
icon Bildung
icon Mp3
icon Cd
icon Suche
icon Grafik
icon Zahlung
icon Html
icon Internet
icon Hardware
icon Cpu
icon Firewall
icon Speicher
icon Mail
icon Banking
icon Video
icon Hacker
icon Design
icon Sprache
icon Dvd
icon Drucker
icon Elektronisches
icon Geschichte
icon Fehler
icon Website
icon Linux
icon Computer
A-Z informatik artikel:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #

Copyright © 2008 - : ARTIKEL32 | Alle rechte vorbehalten.
Vervielfältigung im Ganzen oder teilweise das Material auf dieser Website gegen das Urheberrecht und wird bestraft, nach dem Gesetz.
dsolution