Видеопамять. Вывести изображение - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д