Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > драйвер экрана


Автор: catty 4.5.2008, 09:06
привет всем, помогите, пожайлуста, у меня есть программа нужно ней поменять только:
1. цвет экрана должен меняться с белого на черный
2. на экран должна выводится надпись Болкунова Екатерина Станиславовна.
Вот код проги:
Код

.model tiny
.code
extrn init_video:near,print_chars:near
org 100h
start:
;------------------------------------------------------------------
call init_video
        mov bh,0h        ; устанавливаем цвет символа 0<=M<=7
        mov dx,0h
        mov ax,0h
n:        cld
        lea si,text
        add si,dx
        lodsw
        mov bl,al 
        call print_chars
        inc dx
        cmp dx,22            ;  количество символов в выводимой сроке +1
        jnz n
h:        mov ah,08            ; считываем символ
        int 21h                ; с клавиатуры в AL
        cmp al,24h            ; $ символ останова работы программы
        jnz h
        int 20h
;----------------------------------------------------------------------------
text db 'Бойко Андрей Андреевич'
end start



И второй
Код

public init_video, print_chars
cseg segment public
assume cs:cseg
cur_x db '0'
cur_y db '0'
;bbb      db '0'
;------------------------------------------
; Инициализация видео адаптера
;------------------------------------------
init_video proc near
        push ax
        push es
        push di
        push bx
        push dx
        MOV AX,3            ; \ 
        INT 10h                ; /  видео режим
        mov ax,0B800h
        mov es,ax
        mov ah, 20h
        mov al, 0
        mov di, 0
wh:        mov es:[di], ax        ; \ 
        add di, 2h            ;  | заливаем страницу фоном
        cmp di,0FA0h        ;  |
        jnz wh                ; /
        mov dx,3d4h         ; \ 
        mov al,13           ;  |Запрос на использование начальный адрес сканирования (мл.)
        out dx,al           ; / 
        mov dx,3d5h         ; \ 
        mov al,0            ;  |мл. байт страницы
        out dx,al           ; / 
        mov dx,3d4h         ; \ 
        mov al,12           ;  |Запрос на использование начальный адрес сканирования (ст.)
        out dx,al           ; / 
        mov dx,3d5h         ; \ 
        mov al,0            ;  |ст. байт страницы
        out dx,al           ; / 
        mov dx,3d4h         ; \ 
        mov al,10           ;  |Запрос на использование начало курсора 
        out dx,al           ; / 
        mov dx,3d5h         ; \ 
        mov al,0            ;  |начало курсора
        out dx,al           ; / 
        mov dx,3d4h         ; \ 
        mov al,11           ;  |Запрос на использование конец курсора
        out dx,al           ; / 
        mov dx,3d5h         ; \ 
        mov al,0Fh          ;  | максимальное значение курсора
        out dx,al           ; / 
        mov dl,0            ; координаты X <= 80
        mov dh,0            ; координаты Y <= 25
        call set_cur
        pop dx
        pop bx
        pop di
        pop es
        pop ax
        ret
init_video endp
;-----------------------------------------------------------------
; вывод символа ...  на входе S = bl    M = bh
;-----------------------------------------------------------------
print_chars proc near
        push ax
        push bx
        push cx
        push dx
        mov cx,10
        mov dl,cur_x
        mov dh,cur_y
        cmp bl,13
        jz _enter        
        cmp bl,10
        jz _enter
;        cmp bl,8
;        jz _beck
        cmp bl,24h
        jz _end
_start:    mov ah,0
        mov al,dh
        mov cl,80
        mul cl                ; результат умнажения в AX
        mov dh,0
        add ax,dx
        add ax,ax
        mov di,ax
        add bh,20h
        mov ax,0B800h
        mov es,ax
        mov ah, bh
        mov al, bl
        mov es:[di], ax        
        mov dl,cur_x
        mov dh,cur_y
;        mov ah,bbb
;        cmp ah,66h
;        jz _end
        cmp dl,80
        jz _enter
        add dl,1
        call set_cur
        loop _end
_enter: mov dl,0
        mov dh,cur_y
        add dh,1
        call set_cur
;        loop _end
;_beck:    mov dl,cur_x
;        mov dh,cur_y
;        mov bl,20h
;        mov bh,0h
;        mov ah,66h
;        mov bbb,ah
;        cmp dl,0
;        jz _aa
;        sub dl,1
;        call set_cur
;        loop _start
;_aa:    mov dl,80
;        sub dh,1
;        call set_cur
;        loop _start
_end:    pop dx
        pop cx
        pop bx
        pop ax
        ret
print_chars endp
;-----------------------------------------------------------
; Установка курсора входные данные: dl = X <= 80 и dh = Y <= 25
;-----------------------------------------------------------
set_cur proc near
        push ax
        push bx
        push dx
        push cx
        mov [cur_x],dl
        mov [cur_y],dh
        mov ah,0
        mov al,dh
        mov cl,80
        mul cl                ; результат умнажения в AX
        mov dh,0
        add ax,dx
        mov cx,ax            ; 
        mov dx,3d4h         ; \ 
        mov al,15           ;  |Запрос на использование адрес курсора (мл.)
        out dx,al           ; / 
        mov dx,3d5h         ; \ 
        mov al,cl           ;  |мл. байт страницы
        out dx,al           ; / 
        mov dx,3d4h         ; \ 
        mov al,14           ;  |Запрос на использование адрес курсора (ст.)
        out dx,al           ; / 
        mov dx,3d5h         ; \ 
        mov al,ch           ;  |ст. байт страницы
        out dx,al           ; / 
        pop cx
        pop dx
        pop bx
        pop ax
        ret
set_cur endp
;----------------------------------------
cseg ends
end



Автор: catty 4.5.2008, 19:49
ну хоть подскажите, а? я не прошу за меня все делать, просто падсказать в каком месте. А то я всю методичку перелопатила, но там почему то нет примеров.

Автор: dumb 5.5.2008, 00:21
куски, которые нужно изменить:

в первом:
Код

...
start:
;------------------------------------------------------------------
        mov bh,70h        ; устанавливаем цвет символа (первая цифра - цвет фона, вторая - символа)
        call init_video
        mov dx,0h
        mov ax,0h
...


во втором:
Код

...
init_video proc near
        push ax
        push es
        push di
        push bx
        push dx
        MOV AX,3            ; \ 
        INT 10h                ; /  видео режим
        mov ax,0B800h
        mov es,ax
        mov ah, bh ; <<<
        mov al, 0
...
print_chars proc near
...
        mul cl                ; результат умнажения в AX
        mov dh,0
        add ax,dx
        add ax,ax
        mov di,ax
;        add bh,70h ; <<<
        mov ax,0B800h
        mov es,ax
...

Автор: catty 5.5.2008, 19:03
Спасибо, попробую

Автор: 500mhz 5.5.2008, 19:17
а что обязательно через порты все делтать? или это ТЗ такое?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)