lunes, 18 de febrero de 2019

Unidad 1.-Libro aportación de Brucelee

El presente libro presenta los prefijos comunes que se utilizan para que el espacio de almacenamiento de un registo crezca todo en funcion a la arquitectura de su procesador

https://drive.google.com/open?id=1Qhvkt0qBVXY7uCSqbczoYqDgRcWsdY0B

Unidad No.1-Tabla de registros de proposito general


Nota: La tabla indica el prefijo que se debe de agregar al registro para poder tener una mayor capacidad de almacenamiento de valores



Unidad No.1-Programa que hace una multiplicación en lenguaje ensamblador


Ejecución del programa:






Nota: Se hace la multiplicación de 80 x 100 esto es 8,000 en decimal y 1F40 en hexadecimal

Código:


org 100h

  
mov ax,80
mov bx,100  
mul bx
ret         
        









martes, 12 de febrero de 2019

Unidad No.1-Programa que te evalua si aprobaste o reprobaste dependiendo su calificación


Ejecución del programa:



Código:

org 100h

.model small
.stack 64

.data ;seccion de variables
  msg1 db "Dame una calificacion (seguida de un enter):$"
  aprobado db 13,10, "Aprobado$" ;13 es salto de linea y 10 es salto de carro
  reprobado db 13,10, "Reprobado$"
  var1 dw ?,"$" ;variable data write
  var2 dw ?,"$"
  var3 dw ?,"$"
  
.code ;inicia el segmento de codigo

resultado proc far ;declaracion de funcion
    mov ax, @data ;como inicio
    mov ds, ax
;------------desplegar primer mensaje 

    mov ah,09 ;inicio de mensaje
    lea dx,msg1
    int 21h
    
;------------pedir un caracter
    mov ah,01
    int 21h ;parpadea el cursor      
    mov var1,ax 
    
;------------pedir segundo caracter
    mov ah,01
    int 21h ;parpadea el cursor      
    mov var2,ax
    
;------------pedir un caracter
    mov ah,01
    int 21h ;parpadea el cursor      
    mov var3,ax        
    
;------------momento de evaluar
    cmp al,13 ;compara con el enter
    je continue ;salto si se cumple la condicion igual a 13
    jmp mayor 
    
;inicia funcion
continue:
    mov ax, var1 ;valor de var1 se va a reg ax
    cmp al,037h
    jge mayor ;salta si es mayor o igual
    jmp menor ;si no se cumplio se va a funcion menor
    
mayor:
    mov ah,09
    lea dx, aprobado
    int 21h
    jmp salir
    
menor:
    mov ah,09
    lea dx, reprobado
    int 21h
    jmp salir
    
salir:
    mov ax, 4ch
    int 21h
    
resultado endp
end
    
         
    
        













lunes, 11 de febrero de 2019

Unidad No.1-Clase 11-02-18

Se volvio a retomar el ejemplo del video, especificamente la parte final donde se compila el programa dentro del cmd

Todo programa hecho en lenguaje ensamblador tiene extension .asm



viernes, 8 de febrero de 2019

Unidad No.1-Suma, resta, multiplicación y division de dos numeros de un digito

Link del archivo: https://drive.google.com/open?id=1yv0TaOaMtsVDw8GO9LvXGQtIGH9OxhKw

Ejecución del programa:







Código:

; suma, resta, multiplicacion y division sin tomar en cuenta el acarreo
; el 13,10 es un salto de linea

.model small
.stack 100
.data
msj1 db 'Numero 1: ','$'
msj2 db 13,10,'Numero 2: ','$'
msj3 db 13,10,'Suma: ','$'
msj4 db 13,10,'Resta: ','$'
msj5 db 13,10,'Multiplicacion: ','$'
msj6 db 13,10,'Division: ','$'
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

;******************RESTA
mov bl,var1
sub bl,var2
mov ah,09h
lea dx,msj4 ;desplegar resta:
int 21h
mov dl,bl ;mover resta a dl para imprimir
add dl,30h ;sumar 30 para obtener caracter
mov ah,02h ;imprimir 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

;*****************DIVISION
mov ah,09h
lea dx,msj6 ;desplegar div
int 21h
xor ax,ax ;limpiamos el registro ax. 
mov al,var2
mov bl,al
mov al,var1
div bl ; divide AX/BX el resultado lo almacena en AX, el residuo queda en DX
mov bl,al
mov dl,bl
add dl,30h
mov ah,02h
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

jueves, 7 de febrero de 2019

Unidad No.1-Programa que resta dos numeros de un digito


Ejecución del programa:






Código:

org 100h

.model small
.stack 64
.data
 n1 db 0
 n2 db 0
 resta db 0
 msg1 db "Ingrese el primer valor:", '$'
 msg2 db 10,13, "Ingrese el segundo valor:", '$'
 msg3 db 10,13, "Resta=", '$'
 .code

 begin proc far
    ;direccionamos al segmentos de datos
    mov ax,@data
    mov ds,ax
    
    ;solicitamos el primer digito
    mov ah,09
    lea dx,msg1
    int 21h  
    ;se lee el primer valor
    mov ah,01
    int 21h
    sub al,30h; convierte el caracter en numero
    mov n1,al        
    
    ;solicitamos el segundo digito
    mov ah,09
    lea dx,msg2
    int 21h
    mov ah,01
    int 21h
    sub al,30h;convierte el caracter en numero
    mov n2,al
    
    ;operacion
    mov al,n1 ;lo que esta en n1 lo asigna a al
    sub al,n2 
    add al,30h;convierte a caracter
    mov resta,al
    mov ah,09
    lea dx,msg3
    int 21h
    
    ;se imprime el caracter con el servicio 02 de la int 21h
    mov ah,02  ;valor que se usa para poner algo en pantalla
    mov dl,resta 
    int 21h
    mov ah,4ch
    begin endp   

 end
    
    
ret