Показать сообщение отдельно
Старый 28.05.2005, 08:47     # 3
ELFonok
Guest
 
Сообщения: n/a

В общем спасибо огромное, оно подошло! =)
Если кому нужно будет вот правлиьный вариант изменений (правда кроме шрифта и размера я еще поменял стартовую позицию, а то строка пооявлялась внизу)
LOCAL
.286c
code segment word
Start:
begin proc far
assume cs:code,ds:data,es:data
mov ax,1130h
mov bh,2
int 10h ; получение масок символов
push es

pop ds ; ds=es
mov si,bp
mov ax,data ; es=data
mov es,ax
lea di,outfont
mov cx,128*16 ;перенос 128*8 байт из ds:d в es:s
rep movsb
push es ; сохранение шрифта
push di
mov ax,1130h
mov bh,03h
int 10h
push es ; ds=es
pop ds
mov si,bp
pop di
pop es
mov cx,128*16
rep movsb
mov ax,0013h ; установка режима 320*200
int 10h
mov ax,data ;ds=data
mov ds,ax
lea si,outtext ;загрузка адреса строки
next: lodsb
cmp al,0
je bex
call putchar ;вывод символа
inc word ptr px
jmp next
bex: xor ax,ax ; ожидание нажатия клавиши
int 16h
cmp al,1bh
jz @@Exit
mov ah,4ch
int 21h
begin endp

@@Exit:
mov ax,03h
int 10h
mov ax,04c00h
int 021h

putchar proc
pusha
mov cl,byte ptr gy ;вычисление смещения в массиве outfont
mul cl
lea si,outfont
add si,ax

mov ax,0a000h ; es=0a000h
mov es,ax
mov ax,word ptr py ;вычисление позиции символа в видеопамяти
mul byte ptr gy
mul word ptr lx
mov di,ax
mov ax,word ptr px
mul byte ptr gx
add di,ax

mov cl,byte ptr gy
xor ch,ch
bl1: push cx
mov ah,80h
mov cl,byte ptr gx
xor ch,ch

bl2: test byte ptr [si],ah
jz zero
mov al,byte ptr color
mov byte ptr es:[di],al ; вывод символа в память
zero: shr ah,1 ; следующий бит
inc di
loop bl2

inc si
mov bl,byte ptr gx
xor bh,bh ;переход на следующую строку
sub di,bx
add di,word ptr lx
pop cx
loop bl1
popa
ret
putchar endp
code ends


data segment word
outtext db 'HeLlO UsEr', 0
outfont db 256*16 dup (0) ;буфер под маски символов
px dw 1 ;позиция символа на экране
py dw 1
gx db 16 ;ширина символа
gy db 16 ;высота символа
lx dw 320
ly dw 200
color db 0fh
data ends

segment_stack segment stack
db 4096*4 dup (0)
segment_stack ends
end start
end