Использование прямого программирования видеобуфера - Assembler
Формулировка задачи:
подскажите как проще вывести на экран используя прямое программирование видеобуфера вывести такое изображение?
Решение задачи: «Использование прямого программирования видеобуфера»
textual
Листинг программы
.286 assume cs:cseg, ds:dseg, ss:sseg cseg segment start: mov ax, dseg mov ds, ax mov es, ax MOV AX, 0013h ; AH=0 AL=13h INT 10h PUSH 0A000h POP ES; позиционируем ES на область видеопамяти ;предварительные установки MOV DI,X ; в DI координаты начальной точки по X MOV AX,320; длина строки экрана MUL Y; умножаем на Y ADD DI,AX; и складываем с X INC COLOR MOV AL,COLOR; цвет линии MOV CX,30h call verticalLineDN INC COLOR MOV AL,COLOR; цвет линии MOV CX,15h call diagonalLineLeftUP INC COLOR MOV AL,COLOR; цвет линии MOV CX,6h call gorizontalLine INC COLOR MOV AL,COLOR; цвет линии MOV CX,1Bh call diagonalLineLeftDN INC COLOR MOV AL,COLOR; цвет линии MOV CX,0Ah call verticalLineDN INC COLOR MOV AL,COLOR; цвет линии MOV CX,06h STD call gorizontalLine CLD INC COLOR MOV AL,COLOR; цвет линии MOV CX,20h call verticalLineUP INC COLOR MOV AL,COLOR; цвет линии MOV CX,13h call diagonalLineRightUP INC COLOR MOV AL,COLOR; цвет линии MOV CX,6h call gorizontalLine INC COLOR MOV AL,COLOR; цвет линии MOV CX,0Eh call diagonalLineRightDN INC COLOR MOV AL,COLOR; цвет линии MOV CX,1Dh call verticalLineUP INC COLOR MOV AL,COLOR; цвет линии MOV CX,1Dh call diagonalLineLeftDN INC COLOR MOV AL,COLOR; цвет линии MOV CX,5h call diagonalLineRightUP INC COLOR MOV AL,COLOR; цвет линии MOV CX,1Dh call diagonalLineLeftUP INC COLOR MOV AL,COLOR; цвет линии MOV CX,22h STD call gorizontalLine CLD DEC COLOR MOV AL,COLOR; цвет линии MOV CX,8h call verticalLineUP DEC COLOR MOV AL,COLOR; цвет линии MOV CX,22h call gorizontalLine DEC COLOR MOV AL,COLOR; цвет линии MOV CX,1Eh call diagonalLineRightUP DEC COLOR MOV AL,COLOR; цвет линии MOV CX,7h call gorizontalLine DEC COLOR MOV AL,COLOR; цвет линии MOV CX,1Eh call diagonalLineRightDN DEC COLOR MOV AL,COLOR; цвет линии MOV CX,22h call verticalLineUP DEC COLOR MOV AL,COLOR; цвет линии MOV CX,06h call gorizontalLine DEC COLOR MOV AL,COLOR; цвет линии MOV CX,22h call verticalLineDN DEC COLOR MOV AL,COLOR; цвет линии MOV CX,1Eh call diagonalLineLeftUP DEC COLOR MOV AL,COLOR; цвет линии MOV CX,7h call gorizontalLine DEC COLOR MOV AL,COLOR; цвет линии MOV CX,1Eh call diagonalLineLeftDN DEC COLOR MOV AL,COLOR; цвет линии MOV CX,22h call gorizontalLine DEC COLOR MOV AL,COLOR; цвет линии MOV CX,8h call verticalLineDN INC COLOR MOV AL,COLOR; цвет линии MOV CX,26h STD call gorizontalLine CLD INC COLOR MOV AL,COLOR; цвет линии MOV CX,1Eh call diagonalLineRightDN INC COLOR MOV AL,COLOR; цвет линии MOV CX,7h STD call gorizontalLine CLD INC COLOR MOV AL,COLOR; цвет линии MOV CX,1Bh call diagonalLineRightUP jmp exit gorizontalLine proc ; рисуем горизонтальную линию ;CX=dlina stroki REP STOSB ret gorizontalLine endp verticalLineDN proc ;CX=dlina stroki A1: MOV ES:[DI],AL; рисуем точку на строке ADD DI,320; переход на следующую строку LOOP A1 ret verticalLineDN endp verticalLineUP proc ;CX=dlina stroki A4: MOV ES:[DI],AL; рисуем точку на строке SUB DI,320; переход на следующую строку LOOP A4 ret verticalLineUP endp diagonalLineLeftDN proc ;CX=dlina stroki A2: MOV ES:[DI],AL; рисуем точку на строке ADD DI,319; переход на следующую строку LOOP A2 ret diagonalLineLeftDN endp diagonalLineLeftUP proc ;CX=dlina stroki A5: MOV ES:[DI],AL; рисуем точку на строке SUB DI,319; переход на следующую строку LOOP A5 ret diagonalLineLeftUP endp diagonalLineRightDN proc ;CX=dlina stroki A3: MOV ES:[DI],AL; рисуем точку на строке ADD DI,321; переход на следующую строку LOOP A3 ret diagonalLineRightDN endp diagonalLineRightUP proc ;CX=dlina stroki A8: MOV ES:[DI],AL; рисуем точку на строке SUB DI,321; переход на следующую строку LOOP A8 ret diagonalLineRightUP endp exit: ; wait for any key.... mov ah, 1 int 21h mov ax, 4C00h int 21h cseg ends ; data dseg segment byte x dw 90h y dw 50h color db 0h n dw 30 dseg ends ; stack sseg segment stack db 100h dup(?) sseg ends end start