003
31.10.2006, 15:34 Uhr
RedEagle
|
Ich habe mal ne funktion fadür geschrieben... Wichtig ist, das das 1. Zeichne der Zeichenkette nicht als ASCII-, sodern als Farbcode interpretiert wird. Eine Zeichenkette wird duch 0x00 abgeschlossen.
ps.: man bestimmt noch einiges Optimieren!!
asm: |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;IN >> si <Zeichenkette (1. Zeichen == Farbe) writestring: push ax push bx push cx push dx push si mov ch, [si] ; Farbe in ch laden inc si ; Zum 1. Zeichen gehen
writestring.next: mov al, [si] ; Nächste zeichen laden inc si or al, al ; ISt das Byte 0?? jz writestring.end
mov ah, ch ; Farbe laden mov bx, 1 ; Jedes Zeichen 1 mal ausgeben call putchar
jmp writestring.next
writestring.end: pop si pop dx pop cx pop bx pop ax ret
|
asm: |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;IN >> al <Zeichen ; ah <Farbe ; bx <Anzahl der Ausgaben putchar: push ax push bx push cx push dx
cmp al, 0x13 ; Newline jz putchar.newline mov cx, bx ; Anzahl der ausgaben (für int) xor bh, bh ; Codepage 0 mov bl, ah ; Farbe laden (für int) mov ah, 0x09 ; Int 10>09 int 0x10
putchar.nextchar: call getcursorpos cmp dl, 79 ; ende der Zeile erreicht? jz putchar.newline ; Dann die Zeile wechseln inc dl ; Sonst die nächste spalte call setcursorpos jmp putchar.ende
putchar.newline: call getcursorpos inc dh ; Nächste reihe xor dl,dl ; Spalte 0 call setcursorpos jmp putchar.ende putchar.ende: pop dx pop cx pop bx pop ax ret
|
asm: |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;OUT>> dh <reihe ; dl <spalte getcursorpos: push ax push bx xor bh, bh ; mov ah, 0x03 ; INT 10>03 int 0x10 ; getcursorposition ( dh <reihe ; dl <spalte ) pop bx pop ax ret
|
asm: |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;IN >> dh <Reihe ; dl <Spalte setcursorpos: push ax push bx xor bh, bh ; codepage mov ah, 0x02 ; INT 10>02 int 0x10 ; Setcursorpos (dh <Reihe ; dl <Spalte) pop bx pop ax ret
|
--- edit: --- 0x00 gibt das Ende der zeichenkette an. (Ich weiß nicht ob das selbstverständlich ist.) -- MFG RedEagle Dieser Post wurde am 31.10.2006 um 15:36 Uhr von RedEagle editiert. |