Solicito un poco de ayuda!

Iniciado por furbi, 2 Abril 2019, 01:00 AM

0 Miembros y 1 Visitante están viendo este tema.

furbi

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.

ivancea96

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.

EdePC

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:

Código (asm) [Seleccionar]
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




- 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)

furbi

Muchas gracias por tu ayuda, gracias a ti pude completar lo que me faltaba  ;-) ;-)