Прямой доступ к видеопамяти вссемблер 8086 TASM

Хочу вывести первые 16 символов ascii используя прямой доступ к видеопамяти и цепочечные команды Вот программа. Смысл процедуры up в том, чтоб увеличить на 8 первый байт в каждом слове массива слов txt.

.model tiny
.data
    txt dw 0107h, 0207h, 0307h, 0407h, 0507h, 0607h, 0707h, 0807h
.code
start:
    mov ax,0003h ;очистка экрана
    int 10h

    mov ax, @data
    mov ds, ax

    mov ax,0B800h        ;адресую видеопамять
    mov es,ax
    mov di,9fh           ;смещение в видеопамят
    mov si,offset txt    ;смещение строки
    mov cx, 8            
    cld
    rep movsw
    call up
    mov cx, 8
    cld
    rep movsw

    int 20h                ;выход из программы
    up proc
            push ax

            mov ax, txt[0]
            add ah, 08h
            mov txt[0], ax

            mov ax, txt[2]
            add ah, 08h
            mov txt[2], ax

            mov ax, txt[4]
            add ah, 08h          
            mov txt[4], ax

            mov ax, txt[6]
            add ah, 08h
            mov txt[6], ax

            mov ax, txt[8]
            add ah, 08h
            mov txt[8], ax

            mov ax, txt[10]
            add ah, 08h
            mov txt[10], ax

            mov ax, txt[12]
            add ah, 08h
            mov txt[12], ax

            mov ax, txt[14]
            add ah, 08h
            mov txt[14], ax

            pop ax
        ret
    up endp

end start

Проблема в том, что когда я второй раз вывожу на экран массив, уже после отработки процедуры, учитывая что изменял только старший байт, меняется цвет фона. Как это устранить?

введите сюда описание изображения


Ответы (0 шт):