Un saludo a todos, espero que alguien me pueda ayudar la duda que tengo. Explico:
Estoy empezando a estudiar lenguaje ensamblador y mi profesor pidió que hiciéramos un programa, en donde se llenara la pantalla de líneas, el cual con mucho trabajo pude hacer. Pero ahora me está pidiendo que las líneas salgan en forma diagonal y diagonal invertida, la verdad no me sale, por eso vengo a estos foros que muchas veces me a ayudado, aunque este es le primer mensaje que dejo.
Les pongo que ya había hecho, según yo solo hay que cambiar un par de líneas, pero por no me sale.
.MODEL SMALL
.STACK
.CODE
MOV AH, 0Fh
INT 10h
PUSH AX
CALL MODO_GRAF
CALL GRAFICAR
CALL PAUSA
POP AX
MOV AH, 0
INT 10h
INT 20h
MODO_GRAF:
MOV AX, 0010H
INT 10h
MOV AH, 0BH
MOV BX, 000BH
INT 10H
RET
GRAFICAR:
MOV BX, 0
MOV CX, 64
MOV DX, 70
G10:
MOV AH, 0Ch
MOV AL, BL
INT 10h
INC CX
CMP CX, 576
JNE G10
MOV CX, 64
INC BL
INC DX
CMP DX, 280
JNE G10
RET
PAUSA:
MOV AH, 10h
INT 16h
MOV AH,4CH
INT 21H
RET
MOV AH,4CH
INT 21H
END
Bueno espero alguien me pueda ayudar, de antemano, muchas gracias.
Si te atascas, probablemente te sea cómodo hacerlo en un lenguaje de programacion, tipo C, C++... O el que sea que uséis. Luego, la lógica es la misma, solo hay que retocar los bucles y las condiciones.
Saludos,
- Vaya, me ha costado dos largas noches, buscando documentación, buscando emulador, etc >:D
- Revisa este código que he desarrollado con el emulador emu8086:
org 100h
; set video mode 13h - 320x200
mov ah, 0
mov al, 13h
int 10h
; draw line
mov cx, 0 ; Coord X
mov bx, 0 ; Aux count coord X
mov dx, 0 ; Coord Y
mov al, 15 ; Pixel color White
print:
mov ah, 0Ch ; Put pixel
int 10h
add cx, 10 ; Diagonal separator
cmp cx, 320 - 1; Check limit coord X
jle print
inc bx
cmp bx, 10 ; Check limit diagonal
jl continue
mov bx, 0 ; Reset aux cout coord X
continue:
mov cx, 0
add cx, bx
inc dx ; Add +1 to Coord Y (next row)
cmp dx, 200 ; Check if last row
jne print
;wait for keypress
mov ah, 00
int 16h
; return to text mode:
mov ah,00
mov al,03 ;text mode 3
int 10h
ret
(https://i.ibb.co/nnbDB8Z/diagonal.png)
- Al final me ha servido más el emulador emu8086 ya que llega con una buena documentación de instrucciones e interrupciones, además de ejemplos, que me han servido para armar el código, supongo que no está muy optimizado y ordenado :xD
-- Un lío hallarlo, su página web oficial http://emu8086.com/ ya cerró, pero encontré uno alternativo en: https://aa.bbs.tr/lab/cen214-microprocessors/ [Download section]
-- Documentación en español muy completa Lenguaje Ensamblador para Computadoras Basadas en Intel 5ta edición: http://docshare01.docshare.tips/files/14358/143588422.pdf
-- Emulador para ejecutar los programas DOS: DOSBox: https://www.dosbox.com/ ya que emu8086 es lento debido a que ejecuta una a una las instruciones (dibujar pixel a pixel :-X)
Muchas gracias por tu ayuda, gracias a ti pude completar lo que me faltaba ;-) ;-)