Видеопамять. Вывести изображение - 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