miércoles, 22 de noviembre de 2017

programa que mueve dos lineas:


Autores:
Aylin Salazar Alvares
Guillermo Sanchez Castillo
Jose Roberto Jimenez Flores
Alberto Sanchez Fonseca
Jose Luis Vanoye Bocanegra
(mueve la linea con la tecla I (izquierda), D (derecha)



.model small        ;Se define el modelo de la memoria.
;===========================================================================
; DECLARACION DEL SEGMENTO DE PILA
;===========================================================================
.stack 100          ;Se define el tama?o de la pila
;===========================================================================
; DECLARACION DEL SEGMENTO DE DATOS
;===========================================================================
.data                       ;define variables
    y1      dw 180          ;Coordenadas l?nea 1, Variable de tipo write
    x01     dw 320          ;Coordenadas l?nea 1, Variable de tipo write
    y01     dw ?            ;Coordenadas linea 1, Variable de tipo write
    x02     dw 350          ;Coordenadas linea 2, Variable de tipo write
    y02     dw ?            ;Coordenadas linea 2, Variable de tipo write
    color1  db 0ch          ;Color de linea 1, Variable de tipo byte
    color2  db 0ah          ;Color de linea 2, Variable de tipo byte
    negro   db 00h          ;Color de fondo
 
;===========================================================================
; DECLARACION DEL SEGMENTO DE CODIGO
;===========================================================================
.code                       ;Codigo
.startup                    ;Inicio
    mov ax,@data            ;Direccionamiento segmento de datos
    mov ds,ax               ;Se guarda lo que esta en ax en el segmento datos
    push ds                 ;Coloca el contenido en la pila
    pop es                  ;Llama el contenido de la pila
    mov ax,0600h            ;Direccionamiento segmento de datos
    mov bh,00h              ;BH:Registro de base
    mov cx,0000h            ;Registro en el mensaje
    mov dx,314fh            ;Registro de base
    int 10h                 ;Interrupcion del BIOS
    mov ah,0h               ;Mostrar el numero digitado.
    mov al,12h
    int 10h
    call dpixel
;===========================================================================
; DECLARACION DEL PROCEDIMIENTO KEY
;===========================================================================
key:
    mov ah,08h              ;AH:Acumulador
    int 21h                 ;Interrupcion del DOS
    cmp al,27               ;CMP:Comparacion entre dos operandos, funciona como una resta con la diferencia de que no afecta el destino unicamente los indicadores.
    je salir                ;Je:Salta si es igual a el procedimiento salir.
    cmp al,100              ;'d' minuscula
    je der                  ;Salta a derecha
    cmp al,105              ;'i' minuscula
    je izq                  ;Salta a izquierda
    jmp key                 ;Salta al procedimiento key
;===========================================================================
; DECLARACION DEL PROCEDIMIENTO DERECHA
;===========================================================================
der:                     
    call derecha            ;Manda a llamar el procedimiento derecha
    jmp key                 ;Salta al procedimiento key
;===========================================================================
; DECLARACION DEL PROCEDIMIENTO IZQUIERDA
;===========================================================================
izq:
    call izquierda          ;Manda a llamar el procedimiento izquierda.
    jmp key                 ;Salta al procedimiento key
;===========================================================================
; DECLARACION DEL PROCEDIMIENTO SALIR
;===========================================================================
salir:   
    call termina            ;Manda a llamar el procedimiento terminar.
;===========================================================================
borrow proc                 ;Pide las coordenadas en y.
    mov ax,y1               ;Se guarda lo que esta en ax en la coordenada y1.
    mov y01,ax              ;Se guarda lo que esta en ax en la coordenada y01.
    mov y02,ax              ;Se guarda lo que esta en ax en la coordenada y02.
pix1:
    mov ah,0ch              ;Mostrar el numero digitado.
    mov al,negro            ;Linea de separacion color negra.
    mov cx,x01              ;Registro en el mensaje en la coordenada de la primera linea x01
    mov dx,y01              ;Registro de la base en la coordenada de la primera linea y01
    int 10h                 ;Interrupcion del BIOS.
    cmp dx,280              ;Coordenadas de movimiento ya sea derecha o izquierda.
    je pix2                 ;Salta a pedir las coordenadas de linea 2.
    inc y01               
    jmp pix1

pix2:
    mov ah,0ch
    mov al,negro
    mov cx,x02
    mov dx,y02
    int 10h                 ;Interrupcion del BIOS
    cmp dx,280
    je s1
    inc y02
    jmp pix2
s1:
    ret
borrow endp                ;Fin del procedimiento borrow.
;===========================================================================
dpixel proc
    mov ax,y1
    mov y01,ax
    mov y02,ax

pixel1:
    mov ah,0ch
    mov al,color1
    mov cx,x01
    mov dx,y01
    int 10h               ;Interrupcion del BIOS
    cmp dx,280
    je pixel2
    inc y01               
    jmp pixel1

pixel2:
    mov ah,0ch
    mov al,color2
    mov cx,x02
    mov dx,y02
    int 10h              ;Interrupcion del BIOS
    cmp dx,280
    je sales
    inc y02
    jmp pixel2
sales:
    ret
dpixel endp
;===========================================================================
derecha proc
    call borrow
    mov ax,y1
    mov y01,ax
    mov y02,ax
    inc x01
    inc x02
    cmp x02,639
    je l1
    jmp brinco1

l1:
    mov ah,0ch
    mov al,color2
    mov cx,639
    mov dx,y01
    int 10h                 ;Interrupcion del BIOS
    cmp dx,280
    je l2
    inc y01
    jmp l1

l2:
    mov ah,0ch
    mov al,color1
    mov cx,0000
    mov dx,y02
    int 10h
    cmp dx,280
    je s2
    inc y02
    jmp l2

brinco1:
    call dpixel
s2:
    ret
derecha endp
;===========================================================================
izquierda proc
    call borrow
    mov ax,y1
    mov y01,ax
    mov y02,ax
    dec x01
    dec x02
    cmp x01,0000
    je l3
    jmp brinco2
l3:
    mov ah,0ch
    mov al,color2
    mov cx,000
    mov dx,y01
    int 10h
    cmp dx,280
    je l4
    inc y01
    jmp l3

l4:
    mov ah,0ch
    mov al,color1
    mov cx,639
    mov dx,y02
    int 10h         ;Interrupcion del BIOS
    cmp dx,280
    je s3
    inc y02
    jmp l4

brinco2:
    call dpixel
s3:
    ret
izquierda endp
;===========================================================================
termina proc
    mov ah,00h ;le regresa el control a MS-DOS
    mov al,03h
    int 10h     ;Interrupcion del BIOS

.exit ;fin de procedimiento
termina endp
end ;fin del programa

No hay comentarios:

Publicar un comentario