home *** CD-ROM | disk | FTP | other *** search
- ; SCROL.ASM
- ;
- NAME scrol
- ;
- ; scroll_left(integer,integer,integer,integer) - (i,i,i,i) language asm
- ;
- SCROL_TEXT SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:SCROL_TEXT
- PUBLIC SCROLL_LEFT_0
-
- SCROLL_LEFT_0 PROC FAR
- ;
- ; PARAMETER
- ARG NCOLS:WORD,NROWS:WORD,COL:WORD,ROW:WORD = ARGLEN
- ;
- ; lokale Variablen
- LOCAL SSEG:WORD = LSIZE
- push bp
- mov bp,sp
- sub sp,LSIZE ; Speicherplatz für lokale Variablen
- push si
- push di
-
- mov SSEG,0B800h ; Farbbildschirm auswählen
-
- sub NCOLS,3 ; NCOLS = NCOLS - 3
- mov ax,ROW
- mov dx,160 ; Zielbereich = ROW*160 + (COL+1)*2
- mul dx
- mov dx,COL
- inc dx ; hinzu addiert
- shl dx,1
- add dx,ax
-
- push ds
- push es
-
- mov bx,NROWS ; Schleife NROWS mal ausführen
- dec bx ; BX als Zähler
- dec bx ; NROWS = NROWS-2
- Anfang:
- cmp bx,0
- je Fertig
-
- add dx,160 ; Zielbereich + 160
-
- mov ax,NCOLS ; letztes Zeichen=Zielbereich+NCOLS*2
- shl ax,1
- add ax,dx
- push ax ; Offset des letzten Zeichens auf dem
- ; Stack speichern
-
- mov ax,SSEG ; Bildschirm-Segment
- mov es,ax
- mov ds,ax
-
- mov di,dx ; SI und DI für MOVS laden
- mov si,di ; Quelle ist 2 Bytes vor Ziel
- add si,2
-
- mov ax,[di] ; Zeichen in Spalte 0 in AX
- ; zwischenspeichern
- mov cx,NCOLS ; NCOLS Zeichen verschieben
- cld
- rep movsw
-
- pop di ; Offset des letzten Zeichens in DI
- mov [di],ax ; AX in letzte Spalte schreiben
-
- dec bx
- jmp Anfang
- Fertig:
- pop es
- pop ds
- pop di
- pop si
- mov sp,bp
- pop bp
- ret ARGLEN
-
- SCROLL_LEFT_0 ENDP
- SCROL_TEXT ENDS
- END
-