Mostrando entradas con la etiqueta Restas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Restas. Mostrar todas las entradas

lunes, 25 de febrero de 2019

1. Resta de dos números.


Programa 1: Uso de la libreria emu8086, para realizar una resta.

Código:

name "Resta de dos numeros"
include "emu8086.inc"
org 100h

.data
resta db 2 dup (?)
.code
sumas proc
    print " Introduce el primer numero: "
    call scan_num
    mov resta[0],cl 
    printn " " 
    print " Introduce el segundo numero: "
    call scan_num
    mov resta[1],cl
    xor ax,ax
    mov al,resta[0]
    sub al,resta[1]
    printn " "
    print " La resta es: "
    call print_num
sumas endp
exit:
    print " "
    printn " "
    print "Presiona enter para salir..."
    mov ah,0  ;servicio de pulsación de teclado
    int 16h   ;invoca a servicios de taclado
    ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num
end



Proceso:




Resultado:





1. Programa que realiza: suma, resta, división y multiplicación



Programa: Suma, resta, división y multiplicación

Código:

;por: alex gutierrez 
; 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




domingo, 10 de febrero de 2019

1. Programa que resta dos números 2.(vídeo)

Programa que resta dos números 


Código:

org 100h
.model small
.stack 64  
        ;declaracion de datos
.data
    n1 db 0
    n2 db 0
    resta db 0
    msg1 db "Dame el primer valor:",'$'
    msg2 db 10,13,"Dame el segundo valor:",'$'
    msg3 db 10,13,"Resta=",'$'
        ;declaracion de codigo   
.code
    begin proc far ;Defino un procedimiento
        ;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 digio
        mov ah,09
        lea dx,msg2
        int 21h
        ;se lee el segundo valor
        mov ah,01
        int 21h
        sub al,30h   ;convierte el caracter en numero
        mov n2,al 
        
        ;operacion
        mov al,n1
        sub al,n2  ;resta
        add al,30h;convierto a caracter
        mov resta,al 
        mov ah,09
        lea dx,msg3
        int 21h
        
        ; se imprime el caracter con el servicio 02 de la interrupcion 21h
        mov ah,02
        mov dl,resta
        int 21h
        mov ah,4ch  ;Devuelve el control al equipo
        int 21h
        Begin endp ;especifico el termino del procedimiento
        end      

ret



Resultado:


martes, 5 de febrero de 2019

1. Programas de operaciones en ensamblador suma, resta

Programa 1: 

Donde se realizara una serie de operaciones matemáticas simples en formatos hexadecimales y decimales.

Código:

org 100h
;suma de un solo digito

mov ax, 8h ;asignar valor a los registros
mov bx, 4h ;
add ax,bx ;suma de dos registros
mov bx, 5 ;se da bx un valor de 5
sub ax,bx ;resta
mov bx, 3 ;se da bx a 3
inc bx

mov ax, 6 ;se da valor en ax
hlt ; terminar proceso



Para comprender  mejor este programa, a continuación paso a paso se detallara como funciona.
Comenzamos con el programa donde se sumara un solo dígito. En la cuarta linea vemos "ax", al registro que se le asignara 8 en hexadecimal.





En el registro "bx" se le asigna el valor 4 hexadecimal.


Luego, se suma "ax" y "bx", guardando el resultado en ax (add = suma).


El resultado sera dado en hexadecimal:
8 + 4 = 12 en hexadecimal es C


En la siguiente instrucción ahora a "bx" se le asigna 5 (hexadecimal).


Para después ver que se realizara la operación de resta del registro "ax" y "bx". Siendo el resultado ahora 7 en el registro ax. 


Se cambia el valor anterior de "bx" ahora por un 3.


Con un inc se realiza un incremento en uno al registro "bx", siendo ahora 4.


Para terminar la ultima instrucción indica cambio de valor de "ax" en un 6.







OTRO PROGRAMA
Programa 2:

En este programa solo cambia de valor hexadecimal a decimal.

Código:

ORG 100h


mov ax, 80  ; AX =80 d 
mov bx, 450 ; BX=450 d
inc bx     ;BX++ bx 451
add ax, 80  ; AX=AX+80
mov cx, 200 ;CX=200
sub cx, ax  ; CX=CX-ax 200-160=40  

ret         ;retorno de subrutina


 ;ax=80
 ;valor de bx en hex 450 equivale 1C2
 ;inc bx 451
 ;add ax, 80 ax=160
 ;cx=200
 ;sub cx,
 ;sub cx, ax=120



Resultado:










Programa 3: versión en hexadecimal

org 100h  
;los valores proximos son valores decimales
;estos se convierten a hexadecimal en memoria

mov ax,80h      ;ax=80h
mov bx,450h     ;bx=450h
inc bx         ;bx++
add ax,80h      ;ax=80h
mov cx,200h     ;cx=200h
sub cx,ax      ;cx=cx-ax

ret          ;Retorno de subrutina 



Resultado:










3. Colores Modificado 9

Modificación del programa # 9 " Colores " Por mi compañero Ambrocio isaias Laureano CR EQU 13 ;Declaro retorno de carro LF...