Видеопамять. Вывести изображение - Assembler

Узнай цену своей работы

Формулировка задачи:

Пока выводятся две строчки, и я не могу понять как задать цикл в E10DISPLAY proc . что не так?
.model small
.stack 100h
.186
.data
;Определение переменных:
    ;row - строка, в которой находится курсор, начальное значение равно 4
    ;col - столбец, в котором находится курсор, начальное значение равно 24
    ;mode - номер режима, начальное значение не определено (равно ?)
    ;char_ctr - счетчик АСС2-символов, начальное значение равно 0
        row db 4
        col db 24
        mode db (?)
        char_ctr db 4Dh ; - start M
.code
 
Start:
    mov ax,@data
    mov ds,ax
 
;Code main programm
 
        call B10MODE
        call C10CLEAR       
 
c1:
        call D10CURSOR
        call E10DISPlAY
        
        cmp char_ctr,82
        jz c2
 
        inc char_ctr
        add col,2
        
        cmp col,30
        jne c1
        
        add row,1
        mov col,24
        jne c1
c2:      
        mov ah,10h
        int 16h
 
        mov ax,4C00h
        int 21h
 
B10MODE proc    ;Получение/установка видеорежима
 
    mov ah,0Fh
 
    int 10h
    
    mov mode,al
 
    mov ah,00h
    mov al,03h
 
    int 10h
 
    ret
    B10MODE endp
 
C10CLEAR proc      ;Очистка экрана 
    pusha
 
    mov ah,06h
    mov dx,184Fh
 
    int 10h
 
    mov ah,0
    mov ah,06h ;столбцы?
    mov al,06h ;строки 
    
    mov BH,5h ;черный фон, синие символы
    mov cx, 0510h ;координаты левого верхнего угла, 5:10
 
    mov dx,1954h ; правый нижний я хз, шестнадцатеричный код здесь юзать!
 
    int 10h
 
    popa
    
    ret 
    C10CLEAR endp
 
D10CURSOR proc     ;Установка курсора 
 
    pusha
 
    mov ah,02h
    mov bh,0
    mov dh,row
    mov dl,col
    int 10h
        
        popa
 
    ret
    D10CURSOR endp
 
E10DISPLAY proc    ;Вывод символа на экран
 
        pusha

        ;mov cx,3
        ;M1:
        ;push cx
        
        mov cx,6
        M1:
        
        mov ah,0Ah
        mov al,char_ctr
        mov bh,0
           ;pop cx    
        ;mov cx,1
        int 10h

        ;loop M1
        ;pop cx
        ;call Out_space
        
        popa
        
    ret 
    E10DISPLAY endp

end start
Нужно вывести как на картине ниже:

Решение задачи: «Видеопамять. Вывести изображение»

textual
Листинг программы
.model small
.stack 100h
.186
.data
;Определение переменных:
    ;row - строка, в которой находится курсор, начальное значение равно 4
    ;col - столбец, в котором находится курсор, начальное значение равно 24
    ;mode - номер режима, начальное значение не определено (равно ?)
    ;char_ctr - счетчик АСС2-символов, начальное значение равно 0
        row             db 4
        col             db 24
        mode            db (?)
        VideoPage       db      ?
        char_ctr        db 'M' ; - start M
        Color           db 1
.code
 
Start:
    mov ax,@data
    mov ds,ax
 
;Code main programm
 
        call B10MODE
        call C10CLEAR
 
        mov     cx,     6
 
c1:
        call D10CURSOR
        call E10DISPlAY
 
        add row,1
        mov col,24
 
        inc     char_ctr
        inc     Color
 
        loop    c1
 
        mov ah,10h
        int 16h
 
        mov ax,4C00h
        int 21h
 
B10MODE proc    ;Получение/установка видеорежима
 
    mov ah,0Fh
 
    int 10h
 
    mov mode,al
 
    mov ah,00h
    mov al,03h
    int 10h
 
    mov ah,0Fh
    int 10h
    mov VideoPage, bh
 
    ret
B10MODE endp
 
C10CLEAR proc      ;Очистка экрана
    pusha
 
    mov ah,06h
    mov dx,184Fh
 
    int 10h
 
    mov ah,0
    mov ah,06h ;столбцы?
    mov al,06h ;строки
 
    mov BH,5h ;черный фон, синие символы
    mov cx, 0510h ;координаты левого верхнего угла, 5:10
 
    mov dx,24*256+79 ; правый нижний я хз, шестнадцатеричный код здесь юзать!
 
    int 10h
 
    popa
 
    ret
C10CLEAR endp
 
D10CURSOR proc     ;Установка курсора
 
    pusha
 
    mov ah,02h
    mov bh,VideoPage
    mov dh,row
    mov dl,col
    int 10h
 
    popa
 
    ret
D10CURSOR endp
 
E10DISPLAY proc    ;Вывод символа на экран
 
        pusha
 
        mov ah,09h
        mov al,char_ctr
        mov bh,VideoPage
        mov bl,Color
        mov cx,6
        int 10h
 
        popa
 
    ret
E10DISPLAY endp
 
end start

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы