Da mach ich doch gleich mit. Ich beginne allerdings mit schon kleinen aber fertigen Programmen, denn ich sah keinen Sinn darin sie noch weiter zu kürzen.
Andere Schnipsel folgen im nächsten Posting.
Wer häufig mit verschiedenen Zahlensystemen zu tun hat könnte die folgenden kleinen Programme möglicherweise nützlich finden.
Die Werte die gewandelt werden sollen werden dem jeweligen Programm als Parameter übergeben.
Code: Alles auswählen
;╔════════════════════════════════════════════════════════════════════════════════════════════════╗
;║ ║
;║ DEZ2HEX wandelt einen ganzahligen dezimalen Wert zu einem hexadezialen Wert und gibt ihn aus ║
;║ ║
;╚════════════════════════════════════════════════════════════════════════════════════════════════╝
.MODEL SMALL
.386
.CODE
ORG 100h
START: mov ax, @DATA
mov di, OFFSET DEZ ; Ziel-OFFSET der Integer-Werte
mov bp, OFFSET ANZ
mov ds, ax
mov es, ax
;─────────────────────────────────────────────────────────────────────────────
mov ah, 62h ; Segment des PSP's ermitteln
int 21h
cli ; alle IRQ's verhindern
mov ds, bx ; PSP-Segment nach DS
;-------------------------------------
mov si, 80h ; Zeiger auf Parameter (Kommando-Zeile)
mov al, [si] ; Anzahl der ASCII's holen, ohne CR(0Dh)
cmp al, 2 ; weniger als 2 ASCII's ?
jb FEHLER ; zu wenig = Fehler !
cmp al, 0Bh ; mehr als 11 ASCII's ?
ja FEHLER ; zu viel = Fehler !
dec al
add si, 2 ; Zeiger auf 1.ASCII hinter dem Space
mov es:[bp], al
;─────────────────────────────────────────────────────────────────────────────
; Holt dezimale ASCII-Ziffer, wandelt max. 10 Ziffern und rettet die Werte
;─────────────────────────────────────────────────────────────────────────────
mov cl, 0Ah ; Anzahl Ziffern
;-------------------------------------
HOLASC: mov al, [si] ; ein ASCII aus PSP holen
inc si ; PSP-Zeiger erhöhen
cmp al, 0Dh ; schon Parameter-Ende (CR) ?
jz short FERTIG
sub al, 30h ; ASCII nach Integer wandeln
cmp al, 9 ; Wert größer als neun ?
jg FEHLER ; keine Ziffer = Fehler !
mov es:[di], al ; Wert retten
add di, 4 ; Rett-Zeiger erhöhen
dec cl ; nächsten ASCII
jnz HOLASC ; schon alle zehn ASCII's ?
;─────────────────────────────────────────────────────────────────────────────
FERTIG: mov ax, @DATA
mov ds, ax
;-------------------------------------
mov al, ANZ
mov dh, al ; Anzahl Ziffern retten für addieren
dec al ; -1 = Anzahl der Multiplikationen * 10
mov cl, al ; Anzahl Ziffern retten
mov dl, al ; Anzahl Ziffern retten
jz short ZUSAM ; keine Multiplikationen, eine Ziffer !
;─────────────────────────────────────────────────────────────────────────────
mov di, OFFSET DEZ
;-------------------------------------
MALASC: mov eax, [di] ; Wert holen
mov ebx, eax
shl eax, 3 ; Wert mal 8
add ebx, ebx ; Wert mal 2
add eax, ebx
dec cl ; letzte Multiplikation ?
mov [di], eax ; Wert retten
jnz MALASC
;---------------------------
add di, 4 ; Zeiger auf nächste Wert
dec dl ; Anzahl der Ziffern verringern
mov cl, dl
jnz MALASC
;─────────────────────────────────────────────────────────────────────────────
ZUSAM: xor eax, eax
mov si, OFFSET DEZ ; alle Werte zusammen rechnen
;-------------------------------------
PLUS: add eax, [si]
add si, 4
dec dh
jnz PLUS
;─────────────────────────────────────────────────────────────────────────────
mov di, OFFSET ASCII ; Doppel-Word nach Hex-Ziffern wandeln
mov cl, 8 ; 8 Ziffern
;-------------------------------------
A: rol eax, 4 ; 1 Nibble weiter
mov bl, al
and bl, 0Fh ; nur low-Nibble
add bl, 30h ; nach ASCII wandeln
cmp bl, 39h ; größer als Ziffer neun ?
jna short B
add bl, 7 ; dann Buchstabe von "A" bis "F"
B: mov [di], bl ; ASCII retten
inc di ; Zeiger erhöhen
dec cl ; Ziffer-Anzahl verringern
jnz A
;─────────────────────────────────────────────────────────────────────────────
mov si, OFFSET ASCII-1 ; erste(n) Null(en) überlesen
mov dx, si
inc dx
;-------------------------------------
NULL: inc si
cmp BYTE PTR[si], "0"
jz NULL
;---------------------------
sub si, 0Ah
cmp si, dx
jz short AUSGABE ; keine null vorhanden !
add si, 0Ah
mov dx, si
;-------------------------------------
AUSGABE: mov ah, 9 ; HEX ausgeben
int 21h
;─────────────────────────────────────────────────────────────────────────────
xor al, al
DOS: mov ah, 4Ch ; Dos-Rücksprung
sti ; alle IRQ's wieder erlauben
int 21h
;─────────────────────────────────────────────────────────────────────────────
org START + ((($-START)/16)*16) + 16
;----------------------------------------------------------------------------
FEHLER: mov ax, @DATA ; Fehler-Text ausgeben,
mov ds, ax
;-------------------------------------
mov dx, OFFSET SYNTAX
mov ah, 9
int 21h
mov al, 1
jmp short DOS ; Programm beenden !
;─────────────────────────────────────────────────────────────────────────────
; D a t e n - S e g m e n t
;─────────────────────────────────────────────────────────────────────────────
org START + ((($-START)/16)*16) + 16
;----------------------------------------------------------------------------
.DATA
ORG 0
;-------------------------------------
DEZ DB 0,0,0,0 ; 1. Ziffer
DB 0,0,0,0 ; 2. Ziffer
DB 0,0,0,0 ; 3. Ziffer
DB 0,0,0,0 ; 4. Ziffer
DB 0,0,0,0 ; 5. Ziffer
DB 0,0,0,0 ; 6. Ziffer
DB 0,0,0,0 ; 7. Ziffer
DB 0,0,0,0 ; 8. Ziffer
DB 0,0,0,0 ; 9. Ziffer
DB 0,0,0,0 ; 10. Ziffer
;-------------------------------------
ANZ DB ?,0,0,0
;-------------------------------------
ASCII DB "00000000", "$" ; Hexadezimale ASCII's
;-----------------------------------------------------------------
SYNTAX DB 0Dh,0Ah ; Carriage Return, Line-Feed
DB "╔══════════════════════════════════════════════════════════════════════════════╗"
DB "║ ║"
DB "║ SYNTAX: DEZ2HEX.exe Dezimal-Wert ║"
DB "║ ║"
DB "║ Dezimal-Wert: von 0 bis 4.294.967.295 (Doppel-Word) ║"
DB "║ ║"
DB "║ Die Trenn-Punkte dienen nur zur Übersicht, ║"
DB "║ ║"
DB "║ und dürfen nicht mit angegeben werden ! ║"
DB "║ ║"
DB "╚══════════════════════════════════════════════════════════════════════════════╝"
DB 7,"$" ; Bell, Ausgabe-Ende
;─────────────────────────────────────────────────────────────────────────────
.STACK 10h
END
Code: Alles auswählen
;╔═════════════════════════════════════════════════════════════════════════════════════════╗
;║ ║
;║ DEZ2BIT wandelt einen ganzahligen dezimalen Wert zu einer Bitfolge und gibt diese aus ║
;║ ║
;╚═════════════════════════════════════════════════════════════════════════════════════════╝
.MODEL SMALL
.386
.CODE
ORG 100h
START: mov ax, @DATA
mov ds, ax
mov es, ax
mov di, OFFSET DEZ ; Ziel-OFFSET der Integer-Werte
mov bp, OFFSET ANZ
;─────────────────────────────────────────────────────────────────────────────
mov ah, 62h ; Segment des PSP's ermitteln
int 21h
cli ; alle IRQ's verhindern
mov ds, bx ; PSP-Segment nach DS
;-------------------------------------
mov si, 80h ; Zeiger auf Parameter (Kommando-Zeile)
mov al, [si] ; Anzahl der ASCII's holen, ohne CR(0Dh)
cmp al, 2 ; weniger als 2 ASCII's ?
jb FEHLER ; zu wenig = Fehler !
cmp al, 0Bh ; mehr als 11 ASCII's ?
ja FEHLER ; zu viel = Fehler !
dec al
add si, 2 ; Zeiger auf 1.ASCII hinter dem Space
mov es:[bp], al
;─────────────────────────────────────────────────────────────────────────────
; Holt dezimale ASCII-Ziffer, wandelt max. 10 Ziffern und rettet die Werte
;─────────────────────────────────────────────────────────────────────────────
mov cl, 0Ah ; Anzahl Ziffern
;-------------------------------------
HOLASC: mov al, [si] ; ein ASCII aus PSP holen
inc si ; PSP-Zeiger erhöhen
cmp al, 0Dh ; schon Parameter-Ende (CR) ?
jz short FERTIG
sub al, 30h ; ASCII nach Integer wandeln
cmp al, 9 ; Wert größer als neun ?
jg FEHLER ; keine Ziffer = Fehler !
mov es:[di], al ; Wert retten
add di, 4 ; Rett-Zeiger erhöhen
dec cl ; nächsten ASCII
jnz HOLASC ; schon alle zehn ASCII's ?
;─────────────────────────────────────────────────────────────────────────────
FERTIG: mov ax, @DATA
mov ds, ax
;-------------------------------------
mov al, ANZ
mov dh, al ; Anzahl Ziffern retten für addieren
dec al ; -1 = Anzahl der Multiplikationen * 10
mov cl, al ; Anzahl Ziffern retten
mov dl, al ; Anzahl Ziffern retten
jz short ZUSAM ; keine Multiplikationen, eine Ziffer !
;─────────────────────────────────────────────────────────────────────────────
mov di, OFFSET DEZ
;-------------------------------------
MALASC: mov eax, [di] ; Wert holen
mov ebx, eax
shl eax, 3 ; Wert mal 8
add ebx, ebx ; Wert mal 2
add eax, ebx
dec cl ; letzte Multiplikation ?
mov [di], eax ; Wert retten
jnz MALASC
;---------------------------
add di, 4 ; Zeiger auf nächste Wert
dec dl ; Anzahl der Ziffern verringern
mov cl, dl
jnz MALASC
;─────────────────────────────────────────────────────────────────────────────
ZUSAM: mov si, OFFSET DEZ ; alle Werte zusammen rechnen
xor ebx, ebx
;-------------------------------------
PLUS: add ebx, [si]
add si, 4
dec dh
jnz PLUS
;─────────────────────────────────────────────────────────────────────────────
mov dx, OFFSET KAST1
mov ah, 9
int 21h
mov ah, 0Eh
mov al, "│" ; Anfang
int 10h
mov cl, 20h ; 32 Bit
;-----------------------------
BIT: rol ebx, 1
cmp cl, 8 ; 1.Byte ?
jz short ACHT
cmp cl, 10h ; 2.Byte ?
jz short ACHT
cmp cl, 18h ; 3.Byte ?
jz short ACHT
ANALYS: mov al, bl
and al, 1 ; Bit gesetzt ?
jz short LEER
mov al, "1" ; gesetzt
GEBAUS: int 10h
dec cl
jnz BIT
;-----------------------------
mov al, "│" ; Ende
int 10h
mov dx, OFFSET KAST2
mov ah, 9
int 21h
jmp short DOS
;-------------------------------------
org START + ((($-START)/16)*16) + 16
;-------------------------------------
LEER: mov al, "0" ; nicht gesetzt
jmp short GEBAUS
;-------------------------------------
org START + ((($-START)/16)*16) + 16
;-------------------------------------
ACHT: mov al, "│" ; Byte wird getrennt
int 10h
jmp short ANALYS
;─────────────────────────────────────────────────────────────────────────────
org START + ((($-START)/16)*16) + 16
;---------------------------------------------------------------------------
DOS: mov ah, 4Ch ; Dos-Rücksprung
sti
int 21h
;-----------------------------------------------------------------------------
FEHLER: mov ax, @DATA
mov ds, ax
mov dx, OFFSET SYNTAX
mov ah, 9
int 21h
jmp short DOS
;─────────────────────────────────────────────────────────────────────────────
; D a t e n - S e g m e n t
;─────────────────────────────────────────────────────────────────────────────
org START + ((($-START)/32)*32) + 32
;---------------------------------------------------------------------------
.DATA
ORG 0
;-------------------------------------
DEZ DB 0,0,0,0 ; 1. Ziffer
DB 0,0,0,0 ; 2. Ziffer
DB 0,0,0,0 ; 3. Ziffer
DB 0,0,0,0 ; 4. Ziffer
DB 0,0,0,0 ; 5. Ziffer
DB 0,0,0,0 ; 6. Ziffer
DB 0,0,0,0 ; 7. Ziffer
DB 0,0,0,0 ; 8. Ziffer
DB 0,0,0,0 ; 9. Ziffer
DB 0,0,0,0 ; 10. Ziffer
;-------------------------------------
ANZ DB ?,0,0,0
;-----------------------------
KAST1 DB "┌────────┬────────┬────────┬────────┐",0Dh,0Ah,"$"
KAST2 DB 0Dh,0Ah,"└────────┴────────┴────────┴────────┘","$"
;-----------------------------
SYNTAX DB 0Dh,0Ah
DB "╔══════════════════════════════════════════════════════════════════════════════╗"
DB "║ ║"
DB "║ SYNTAX: DEZ2BIT.exe Dezimal-Wert ║"
DB "║ ║"
DB "║ Dezimal-Wert: von 0 bis 4.294.967.295 (Doppel-Word) ║"
DB "║ ║"
DB "║ Die Trenn-Punkte dienen nur zur Übersicht, ║"
DB "║ ║"
DB "║ und dürfen nicht mit angegeben werden ! ║"
DB "║ ║"
DB "╚══════════════════════════════════════════════════════════════════════════════╝"
DB 7, "$"
;─────────────────────────────────────────────────────────────────────────────
.STACK 10h
END
Code: Alles auswählen
;╔═════════════════════════════════════════════════════════════════════════════════════╗
;║ ║
;║ HEX2DEZ wandelt einen hexadezimalen Wert zu einem dezimalen Wert und gibt ihn aus ║
;║ ║
;╚═════════════════════════════════════════════════════════════════════════════════════╝
.MODEL SMALL
.386
.CODE
ORG 100h
START: mov ah, 62h ; Segment des PSP's ermitteln
int 21h
cli ; Interrupt's verbieten
mov ds, bx ; PSP-Segment nach DS
mov si, 80h ; Zeiger auf Parameter
mov al, [si] ; ASCII-Anzahl holen, ohne CR (0Dh)
cmp al, 2 ; weniger als 2 ASCII's ?
jb FEHLER ; zu wenig = Fehler !
cmp al, 9 ; mehr als 9 ASCII's ?
ja FEHLER ; zu viel = Fehler !
add si, 2 ; Zeiger auf ersten ASCII hinter SPACE
;─────────────────────────────────────────────────────────────────────────────
; Holt Hex-ASCII-Ziffer, wandelt max. 8 Ziffern nach EAX
;─────────────────────────────────────────────────────────────────────────────
xor eax, eax ; EAX löschen
mov cl, 8 ; max. acht hexadezimale ASCII's
;-------------------------------------
HOLASC: mov bl, [si] ; ASCII holen
inc si ; Zeiger erhöhen
sub bl, 30h ; ASCII nach Integer wandeln
cmp bl, 0Ah ; Wert kleiner als Zehn ?
jb short ZAHL ; ja Wert von 0 bis 9
cmp bl, 11h ; Wert kleiner als großes "A" ?
jb FEHLER ; keine Ziffer = Fehler !
cmp bl, 17h ; Wert kleiner als großes "G" ?
jb short BUCH ; ja Wert zwischen großem "A" bis "F"
cmp bl, 31h ; Wert kleiner als kleines "a" ?
jb short FEHLER ; keine Ziffer = Fehler !
cmp bl, 36h ; Wert größer als kleines "f" ?
ja short FEHLER ; keine Ziffer = Fehler !
sub bl, 20h ; Klein-Buchstabe nach Groß-Buchstabe,
BUCH: sub bl, 7 ; Groß -Buchstabe nach Hex wandeln
ZAHL: or al, bl ; Wert mit high-Nibble verknüpfen
cmp BYTE PTR[si], 0Dh ; Carriage Return = Parameter-Ende ?
jz short PAREND ; ja zum auswerten
shl eax, 4 ; 4 Bit schieben = 1 Nibble
dec cl ; Zähler verringern
jnz HOLASC ; schon alle ASCII's ?
;─────────────────────────────────────────────────────────────────────────────
; EAX nach zehn dezimalen ASCII's wandeln und im Daten-Bereich ablegen
;─────────────────────────────────────────────────────────────────────────────
PAREND: mov bx, @DATA
mov ds, bx
mov di, OFFSET ASCII
;-------------------------------------
mov cl, 0Ah ; Zehn dezimale ASCII's
mov ebx, 1000000000
WANDEL: xor edx, edx
div ebx
add al, 30h ; nach ASCII wandeln
mov esi, edx ; Rest retten
mov [di], al ; Ziffer retten
inc di ; Zeiger erhöhen
mov eax, ebx
mov ebx, 0Ah
xor edx, edx
div ebx
mov ebx, eax
mov eax, esi
dec cl
jnz WANDEL
;-----------------------------------------------------------------------------
mov si, OFFSET ASCII-1 ; erste(n) Null(en) überlesen
mov dx, si
inc dx
NULL: inc si
cmp BYTE PTR[si], "0"
jz NULL
sub si, 0Ah
cmp si, dx
jz short AUSG ; keine null vorhanden !
add si, 0Ah
mov dx, si
;-------------------------------------
AUSG: mov ah, 9 ; dezimale Zahl ausgeben
int 21h
;-----------------------------------------------------------------------------
DOS: mov ah, 4Ch ; Dos-Rücksprung
sti
int 21h
;-----------------------------------------------------------------------------
org START + ((($-START)/16)*16) + 16
;----------------------------------------------------------------------------
FEHLER: mov ax, @DATA
mov ds, ax
mov dx, OFFSET SYNTAX
mov ah, 9
int 21h
jmp short DOS
;─────────────────────────────────────────────────────────────────────────────
; D a t e n - S e g m e n t
;─────────────────────────────────────────────────────────────────────────────
org START + ((($-START)/32)*32) + 32
;----------------------------------------------------------------------------
.DATA
ORG 0
SYNTAX DB 0Dh, 0Ah
DB "╔══════════════════════════════════════════════════════════════════════════════╗"
DB "║ ║"
DB "║ SYNTAX: HEX2DEZ.exe Hexadezimal-Wert ║"
DB "║ ║"
DB "║ Hexadezimal-Wert: von 0 bis FFFFFFFF (Doppel-Word) ║"
DB "║ ║"
DB "║ je Ziffer: von 0 bis 9 und von A bis F ║"
DB "║ ║"
DB "║ A bis F: kann groß oder klein geschrieben werden ║"
DB "║ ║"
DB "╚══════════════════════════════════════════════════════════════════════════════╝"
DB 7, "$"
;-----------------------------------------------------------------------------
ASCII DB "0000000000", "$"
;─────────────────────────────────────────────────────────────────────────────
.STACK 10h
END
Code: Alles auswählen
;╔═════════════════════════════════════════════════════════════════════════════════╗
;║ ║
;║ HEX2BIT wandelt einen hexadezimalen Wert zu einer Bitfolge und gibt diese aus ║
;║ ║
;╚═════════════════════════════════════════════════════════════════════════════════╝
.MODEL SMALL
.386
.CODE
ORG 100h
START: mov ah, 62h ; Segment des PSP's ermitteln
int 21h
cli ; Interrupt's verbieten
mov ds, bx ; PSP-Segment nach DS
mov si, 80h ; Zeiger auf Parameter
mov al, [si] ; ASCII-Anzahl holen, ohne CR (0Dh)
cmp al, 2 ; weniger als 2 ASCII's ?
jb FEHLER ; zu wenig = Fehler !
cmp al, 9 ; mehr als 9 ASCII's ?
ja FEHLER ; zu viel = Fehler !
add si, 2 ; Zeiger auf ersten ASCII hinter SPACE
;─────────────────────────────────────────────────────────────────────────────
; Holt Hex-ASCII-Ziffer, wandelt max. 8 Ziffern nach EAX
;─────────────────────────────────────────────────────────────────────────────
xor eax, eax ; EAX löschen
mov cl, 8 ; max. acht hexadezimale ASCII's
;-------------------------------------
HOLASC: mov bl, [si] ; ASCII holen
inc si ; Zeiger erhöhen
sub bl, 30h ; ASCII nach Integer wandeln
cmp bl, 0Ah ; Wert kleiner als Zehn ?
jb short ZAHL ; ja Wert von 0 bis 9
cmp bl, 11h ; Wert kleiner als großes "A" ?
jb FEHLER ; keine Ziffer = Fehler !
cmp bl, 17h ; Wert kleiner als großes "G" ?
jb short BUCH ; ja Wert zwischen großem "A" bis "F"
cmp bl, 31h ; Wert kleiner als kleines "a" ?
jb FEHLER ; keine Ziffer = Fehler !
cmp bl, 36h ; Wert größer als kleines "f" ?
ja FEHLER ; keine Ziffer = Fehler !
sub bl, 20h ; Klein-Buchstabe nach Groß-Buchstabe,
BUCH: sub bl, 7 ; Groß -Buchstabe nach Hex wandeln
ZAHL: or al, bl ; Wert mit high-Nibble verknüpfen
cmp BYTE PTR[si], 0Dh ; Carriage Return = Parameter-Ende ?
jz short PAREND ; ja zum auswerten
shl eax, 4 ; 4 Bit schieben = 1 Nibble
dec cl ; Zähler verringern
jnz HOLASC ; schon alle ASCII's ?
;─────────────────────────────────────────────────────────────────────────────
PAREND: mov ebx, eax
;-----------------------------
mov ax, @DATA
mov ds, ax
mov dx, OFFSET KAST1
mov ah, 9
int 21h
mov ah, 0Eh
mov al, "│" ; Anfang
int 10h
mov cl, 20h ; 32 Bit
;-----------------------------
BIT: rol ebx, 1
cmp cl, 8 ; 1.Byte ?
jz short ACHT
cmp cl, 10h ; 2.Byte ?
jz short ACHT
cmp cl, 18h ; 3.Byte ?
jz short ACHT
ANALYS: mov al, bl
and al, 1 ; Bit gesetzt ?
jz short LEER
mov al, "1" ; gesetzt
GEBAUS: int 10h
dec cl
jnz BIT
;-----------------------------
mov al, "│" ; Ende
int 10h
mov dx, OFFSET KAST2
mov ah, 9
int 21h
jmp short DOS
;----------------------------------------------------------------------------
org START + ((($-START)/16)*16) + 16
;-------------------------------------
LEER: mov al, "0" ; nicht gesetzt
jmp short GEBAUS
;-------------------------------------
org START + ((($-START)/16)*16) + 16
;-------------------------------------
ACHT: mov al, "│" ; Byte wird getrennt
int 10h
jmp short ANALYS
;─────────────────────────────────────────────────────────────────────────────
org START + ((($-START)/16)*16) + 16
;----------------------------------------------------------------------------
DOS: mov ah, 4Ch ; Dos-Rücksprung
sti
int 21h
;-----------------------------------------------------------------------------
FEHLER: mov ax, @DATA
mov ds, ax
mov dx, OFFSET SYNTAX
mov ah, 9
int 21h
jmp short DOS
;─────────────────────────────────────────────────────────────────────────────
; D a t e n - S e g m e n t
;─────────────────────────────────────────────────────────────────────────────
org START + ((($-START)/32)*32) + 32
;----------------------------------------------------------------------------
.DATA
ORG 0
SYNTAX DB 0Dh, 0Ah
DB "╔══════════════════════════════════════════════════════════════════════════════╗"
DB "║ ║"
DB "║ SYNTAX: HEX2BIT.exe Hexadezimal-Wert ║"
DB "║ ║"
DB "║ Hexadezimal-Wert: von 0 bis FFFFFFFF (Doppel-Word) ║"
DB "║ ║"
DB "║ je Ziffer: von 0 bis 9 und von A bis F ║"
DB "║ ║"
DB "║ A bis F: kann groß oder klein geschrieben werden ║"
DB "║ ║"
DB "╚══════════════════════════════════════════════════════════════════════════════╝"
DB 7, "$"
;----------------------------------------------------------------------------
KAST1 DB "┌────────┬────────┬────────┬────────┐", 0Dh, 0Ah, "$"
KAST2 DB 0Dh, 0Ah, "└────────┴────────┴────────┴────────┘", "$"
;─────────────────────────────────────────────────────────────────────────────
.STACK 10h
END
Alle vier dieser kleinen Programme kann man zusammen mit ihrem hier aufgelisteten Quellcode von meiner Homepage herunterladen:
http://www.alice-dsl.net/freecracmaps/Tool/Zahlswap.zip
Dirk