martes, 2 de mayo de 2017

Programa Vector

;==========================================================
 ; PROGRAMA : pe26_arr
 ; FUNCION : Vector ingresa datos .
 ; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
 ; FECHA : jueves 27 abril 2017
 ;=========================================================
title reves.asm

.model small     ;Modelo de memoria m?s utilizado

.stack  256h     ;se define el espacio necesario para la pila

.data
     CR equ 13      ; Constante CR (Retorno de carro) En decimal o
     LF equ 10      ; Constante LF (Salto de l?nea) en hex es igual

     mens db 'Escribe algo y te lo convierto al reves', CR,LF,'$'
     salto db CR,LF,'$'

cadena label byte ;cadena de texto

cant db 20
max  db 00
campo db  20 dup(' ')

 .code

inicio:

 mov ax,@data ; Inicializar correctamente el
 mov ds,ax    ; registro de datos
 push ds      ; Guardar ds en vector
 pop es       ;restaruamos es con sus valores anteriores

 mov ah,09h   ; Esperar tecla
 lea dx,mens  ; CARGA ETIQUETA MENSAJE
 int 21h      ; Llamar a la interrupci?n del DOS

 mov ah,0ah    ; Esperar tecla
 lea dx,cadena ; CARGA ETIQUETA CADENA
 int 21h       ; Llamar a la interrupci?n del DOS

 mov ah,09h    ; Esperar tecla
 lea dx,salto
 int 21h       ; Llamar a la interrupci?n del DOS

 mov cl,cant
 mov bx, offset campo
 add bl, cant

loopo:
  mov dl,[bx] ; Movemos el siguiente caracter ASCII al dl
  mov ah,02h  ;Leer car?cter desde el teclado
  int 21h     ; Llamar a la interrupci?n del DOS
  dec bl
  dec cl
  cmp cl,0
  je salir
  jmp loopo

 salir:
 mov dl,[bx]  ; Movemos el siguiente caracter ASCII al dl
  mov ah,02h  ;Leer car?cter desde el teclado
  int 21h     ; Llamar a la interrupci?n del DOS
 mov ax,4c00h ;regresamos el control al sistema operativo
 int 21h      ; Llamar a la interrupci?n del DOS

 end  inicio

Programa Multiplicación de dos números

;=======================================================
 ; PROGRAMA : pe24_mul
 ; FUNCION : Multimplicacion de dos numeros.
 ; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
 ; FECHA : jueves 27 abril 2017
 ;======================================================

.model small ;Modelo de memoria m?s utilizado
.stack

.data        ;definici?n de datos(variables), donde se almacenara informaci?n
.code
   chr1  db ?
   chr2  db ?
   chr3  db ?
   r1    db ?
   r2    db ?
   ac    db 0

.startup
   ;cls
   mov ah,00h     ;Function(Set video mode)
   mov al,03      ;Mode 80x25 8x8 16
   int 10h        ;Interruption Video

   mov ah,01h     ;Function(character read)
   int 21h        ;Interruption DOS functions
   sub al,30h     ;ajustamos valores
   mov chr1,al    ;[chr1].chr2 * chr3 = ac.r1.r2
 
   mov ah,01h     ;Function(character read)
   int 21h        ;Interruption DOS functions
   sub al,30h     ;Ajustamos valores
   mov chr2,al    ;chr1.[chr2] * chr3 = ac.r1.r2
 
   mov ah,02h     ;Function(character to send to standard output)
   mov dl,'*'     ;Character to show
   int 21h
 
   mov ah,01h     ;Function(Read character)
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr3,al    ;chr1.chr2 * [chr3] = ac.r1.r2
 
   mov ah,02h     ;Character to send to standar output
   mov dl,'='     ;
   int 21h        ;Interruption DOS functions
 
   ;Realizamos operaci?n
 
   mov al,chr3    ;al = chr3
   mov bl,chr2    ;bl = chr2
   mul bl         ;AL = chr3*chr2 (BL*AL)
   mov Ah,0h      ;
   AAM            ;ASCII Adjusment
   mov ac,AH      ;ac = AH (Acarreo)
   mov r2,AL      ;r2 = AL       (Unidad del resultado)
 
   mov al,chr3    ;AL = chr3
   mov bl,chr1    ;BL = chr1
   mul bl         ;AL = chr1*chr3 (BL*AL)
   mov r1,al      ;r1 = AL       (Decena del resultado)
   mov bl,ac      ;BL = Acarreo anterior
   add r1,bl      ;r1 = r1+ac (r1 + Acarreo)
   mov ah,00h     ;
   mov al,r1      ;AL = r1 (Asignaci?n para el ajust)
   AAM            ;ASCII Adjustment
   mov r1,al      ;r1 = AL
   mov ac,ah      ;ac = AH (Acarreo para la Centena del resultado)
 
   ;Mostramos resultado
   mov ah,02h  
   mov dl,ac
   add dl,30h
   int 21h        ;Mostramos ac (Centena)

   mov ah,02H
   mov dl,r1
   add dl,30h
   int 21h        ;Mostramos r1 (Decena)

   mov ah,02H
   mov dl,r2
   add dl,30h
   int 21h        ;Mostramos r2 (Unidad)
.exit
end


Programa Suma de dos números

;=========================================================
 ; PROGRAMA : pe22_sum
 ; FUNCION : Suma de dos numeros.
 ; REALIZADO POR : Yesenia Lizbeth Guerrero Garcia
 ; FECHA : jueves 27 abril 2017
 ;========================================================

.model small
.stack 100
.data
msj1 db 'Numero 1: ','$'
msj2 db 13,10,'Numero 2: ','$'
msj3 db 13,10,'Suma: ','$'

msj5 db 13,10,'Multiplicacion: ','$'

linea db 13,10,'$'
var1 db 0
var2 db 0
.code
.startup

call limpia
mov ah,09h
lea dx, msj1 ;desplegar numero 1:
int 21h

call leer ;lee primer numero
sub al,30h ;restar 30h para obtener el numero
mov var1,al ;lo guardo en var1
mov ah,09h
lea dx, msj2 ;desplegar numero 2:
int 21h

call leer ;lee segundo numero
sub al,30h ;restar 30h para obtener segundo valor
mov var2,al ;guardar en var2
mov bl,var2 ;mover a bl

;******************* SUMA
add bl,var1 ; realizo la suma de var2(bl) y var1 y el resultado queda en bl
mov ah,09h
lea dx,msj3 ;imprimir suma
int 21h
mov dl,bl ;pongo en dl el numero a imprimir var2(bl)
add dl,30h ; agrego 30h para obtener el caracter  
mov ah,02h ;imprime un caracter
int 21h



;******************MULTIPLICACION
mov ah,09h
lea dx,msj5 ;desplegar mult
int 21h

mov al,var1
mov bl,var2
mul bl ;mult al=al*bl
mov dl,al ;mover al a dl para imprimir
add dl,30h ;sumar 30 para obtener caracter
mov ah,02h ;imprimir caracter
int 21h


.exit

; ****************PROCEDIMIENTOS
salto proc near
mov ah,09h
lea dx,linea
int 21h
mov dl,00h
ret
salto endp

leer proc near
mov ah,01h;leer caracter desde el teclado
int 21h;lee primer caracter
ret
leer endp

limpia proc near
mov ah,00h
mov al,03h
int 10h
ret
limpia endp
end