Suma, resta, multiplicacion y division en ensamblador
; suma, resta, multiplicacion y division sin tomar en cuenta el acarreo
; el 13,10 es un salto de linea
.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
O__O me puedes ayudar con la suma de dos numero que lo multiplique por 100 en lenguaje ensamblador u.u soy principiante en esto ): porfavor y casi no entiendo u.u... y es para una tarea de mañana ): porfavor ): ...
ResponderBorrar¿Que pasó con tu triste historia? me dejaste picado
BorrarBuenas alguien sabe que paso con la tarea de yerania?
Borraryerania que pasó JAJAJAJAJA
BorrarElla murió en el intento de hacer su tarea...
Borrarjsjsjsjsjsjsjs pobre
Borrar:( pobrecita xd
Borrartodos murieron esperado que contestara xd
BorrarMe da nostalgia no saber que paso con Yerania, no importa que ya haya pasado 7 años
Borrar2013 - Ya es bastante tiempo, me da tristesa y un poco de gracias no haber respondido de hace tanto años. Aqui esta: add eax,ebx imult eax,100; or mult eax,100. Te voy a hacer una pregunta que no la puedo hacer en la linea principal: ¿Cual registro cambia la instruccion div/idiv?. Intento usarlo con registro de 32bits, pero la apricacion se detiene, aqui dejo mi codigo: div ebx PRINT_DEC 4,eax; Pienso que modifica el registro eax, pero siempre la apricacion se cierra.PRINT_DEC es una directiva definida por un encabesado "io.inc" , saca una salida por pantalla. Me ayudarias, por favor.
BorrarHan pasado 9 años y sigo sin saber que le paso a la tarea de Yerania
BorrarMUCHAS GRACIIAS!! MUII BUEN PROGRAMA :D :D (Y)
ResponderBorrary si es un numero de dos digitos?c omo le hago? help!
ResponderBorrarmuchas gracia sme ayido de mucho me podrias pasar tu face oalgo para estar en contacto
ResponderBorrarde casualidada alguien sabe como hacer la suma de numeros de mas de dos cifras, para cantidades grandes como 2000 en adelante
ResponderBorrarmuy bueno ....
ResponderBorraryess my lv
Borrarmuy bueno ....
ResponderBorrar^_^
BorrarGracias me sirvio para entender esto :)
ResponderBorrarEste comentario ha sido eliminado por el autor.
ResponderBorrarSOS UN CRACK
ResponderBorrarGRACIAS BRO
BorrarY para operaciones de 2 numeros de 10 digitos y para la raiz cuadrada?
ResponderBorrarpara digitos mas grandes porfa :C
ResponderBorrarhola disculpen soy principiante no se como puedo programar en el ensamblador 8086.............. m*m+sqrt(m)+m, donde "m" es un numero cualquier...alguien me puede ayudar un favor.
ResponderBorrarPorque suma a 30 ?
ResponderBorrarPor que el número que imprime está en hexadecimal, y los números en el código ascii empiezan desde el 0 que es el 048 en ascii hexadecimal hasta el 9 que es el 57 hexadecimal, por eso sumas 30h (la h es de hexadecimal). Si no le sumara esos 30 saldría otro símbolo.
Borrarporque limpia ax? intente hacer división sin limpiar y efectivamnete no funciona, alguien sabe?
ResponderBorrarTengo entendido que para algunas operaciones los registros ax y al deben estar vacíos (no recuerdo por que no puse atención XD) por eso es mejor que cuando los guardes los cambies de registro de ax -> dx
Borrarfelicidades a los cumpleañeros
ResponderBorrarSaben si aun funciona?
ResponderBorrarsi funciona
Borrar