.MODEL SMALL
.STACK 100h
.DATA
COLUMNA DW ?
FILA DW ?
AVANCEH DW ?
AVANCEV DW ?
.CODE
DETENER_POR_TIEMPO PROC
MOV CX, 2000h
MOV DX, 2000h
MOV BX, 2000h
NOP
RET
DETENER_POR_TIEMPO ENDP
DIBUJARRECTANGULOGRIS PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX, 0A000h ; Segmento de la memoria de video
MOV ES, AX
MOV DI, COLUMNA ; Columna inicial
MOV AX, FILA ; Fila inicial
MOV BX, AVANCEH ; Ancho del rectángulo
MOV CX, AVANCEV ; Alto del rectángulo
MOV DX, BX ; Ancho
MOV BX, CX ; Alto
MOV AL, 8 ; Color gris
DIBUJAR_FILA:
MOV CX, DX ; Restaura CX al ancho inicial
REP STOSB ; Dibuja una fila de píxeles
ADD DI, 320 ; Avanza a la siguiente fila en la memoria de video
DEC BX ; Decrementa el alto
JNZ DIBUJAR_FILA
POP DX
POP CX
POP BX
POP AX
RET
DIBUJARRECTANGULOGRIS ENDP
DIBUJARCIRCULONEGRO PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX, 0A000h ; Segmento de la memoria de video
MOV ES, AX
MOV DI, COLUMNA ; Columna inicial
MOV AX, FILA ; Fila inicial
MOV BX, AVANCEH ; Radio horizontal del círculo
MOV CX, AVANCEV ; Radio vertical del círculo
MOV DX, BX ; Radio horizontal
MOV BX, CX ; Radio vertical
MOV AL, 1 ; Color negro
DIBUJAR_CIRCULO:
MOV CX, DX ; Restaura CX al radio horizontal
REP STOSB ; Dibuja una fila de píxeles
ADD DI, 320 ; Avanza a la siguiente fila en la memoria de video
DEC BX ; Decrementa el radio vertical
JNZ DIBUJAR_CIRCULO
POP DX
POP CX
POP BX
POP AX
RET
DIBUJARCIRCULONEGRO ENDP
DIBUJARTRIANGULODORADO PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX, 0A000h ; Segmento de la memoria de video
MOV ES, AX
MOV DI, COLUMNA ; Columna inicial
MOV AX, FILA ; Fila inicial
MOV BX, AVANCEH ; Base del triángulo
MOV CX, AVANCEV ; Altura del triángulo
MOV DX, BX ; Base
MOV BX, CX ; Altura
MOV AL, 14h ; Color dorado
DIBUJAR_LINEAS:
MOV CX, DX ; Restaura CX a la base del triángulo
MOV DH, 0
DIBUJAR_LINEA:
MOV AL, 14h ; Color dorado
STOSB ; Dibuja un píxel
INC DI ; Avanza al siguiente píxel en la memoria de video
LOOP DIBUJAR_LINEA
ADD DI, 320 ; Salta a la siguiente fila en la memoria de video
DEC BX ; Decrementa la altura
JNZ DIBUJAR_LINEAS
POP DX
POP CX
POP BX
POP AX
RET
DIBUJARTRIANGULODORADO ENDP
INICIO:
MOV AX, @data
MOV DS, AX
MOV AX, 13h ; Cambiar a modo gráfico 320x200
INT 10h
MOV COLUMNA, 120
MOV FILA, 100
MOV AVANCEH, 100
MOV AVANCEV, 150
CALL DIBUJARRECTANGULOGRIS
; CALL DETENER_POR_TIEMPO
MOV COLUMNA, 180
MOV FILA, 175
MOV AVANCEH, 5
MOV AVANCEV, 5
CALL DIBUJARCIRCULONEGRO
; CALL DETENER_POR_TIEMPO
MOV COLUMNA, 150
MOV FILA, 160
MOV AVANCEH, 20
MOV AVANCEV, 20
CALL DIBUJARTRIANGULODORADO
; CALL DETENER_POR_TIEMPO
MOV AX, 3 ; Regresar al modo de texto
INT 10h
MOV AX, 4C00h ; Salir del programa
INT 21h
END INICIO
Because the code shows only some white lines when compiled in DOSBox .I compiled it in DOSBox and it showed me some white lines. I expected it to show me an image of a door with its lock and I tried it in emu8086 and it compiled only the top part turns grey.
Betsy CamachoM is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.