Multiplicación en Ensamblador
Mi primer programa en ensamblador: La Multiplicación :D. Intenté hacer el de la suma, pero aunque no me la crea, no me salió :-S Puff!
Yo se que es un cochinero, pero es mi primer programa. Solamente conozco tres funciones del ensamblador :P y no se ni que rollo, esto es nuevo para mi.
Antes del viernes tengo que haber hecho cuatro programitas: uno que me muestre la tabla de multiplicar de un número, otro que imprima un mensaje en pantalla, otro que lea desde el teclado y desplace la palabra según el teclado y otro mas que convierta números de dos dígitos a binario.
Se dice fácil para unos, pero para mi :-S !! Estoy nadando en un mar de confusión, frustración y presión puff! jiji (Que exagerado) jeje
Se vale criticar...
- .model small
- .stack
- .data
- .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
Mis Algoritmos » Blog Archive » Hola mundo en ensamblador
2006-09-20 14:11:01
[...] Multiplicación básica en ensamblador [...]
ANNEL
2006-11-21 17:58:32
MMMMMMM... PUES QUERIOD AMIGO QUIERO DESIRTE K YO ESTOY IGUAL K TU PERO PUES NI MODO LO UNICO K NOS QUEDA ES ECHARLE GANAS PORQUE AL IGUAL K TU YYO TAMBIEN CUROS LA MATERIA Y ME STA COSANDO MUCHISMO ENTENDERLAAAA........
PERO EN FIN HAY K SER OPTIMISTAS PARA PODER ENTENDERLO BIEN OP POR LO MENOS PARA PASARRRR...
JAJAJJAJAJ...
BYE
Anyyyyyy...
Victor
2006-11-22 10:22:07
Si, así es ;-) gracias por el comentario :D
Eddy
2007-01-12 11:27:42
Y como lo ejecutas.. eso es lo q no se :S:S:S ????
x favor mandame la respuesta a mi email
breakdance16@hotmail.com
Victor
2007-01-12 11:43:01
Pues hay que compilarlo con el <a href="http://www.sce.carleton.ca/~mmacleod/masm.html" rel="nofollow" rel="nofollow">masm.exe</a> :-S , y obviamente la ejecución es en ambiente DOS.
RaBaGi
2007-10-26 10:20:30
Tu pinche multiplicacion tiene errores arreglala no, y te dice s llamar programador, ja
Victor De la Rocha
2007-10-26 10:31:09
Muchas gracias por tus alagos :) Todo bien por aquí. Uno que es principiante en esto ;) ¿Por que no nos dejas tu propuesta para analisarla y buscar quien es el programador?
luisalbertoscz
2007-11-28 19:47:42
jajaja creo q aqui solo llegan principiantes yo tambien estoy en apuron con ensamblador ... alguien q heche una manito... jejje
EDWIN RODRIGO
2009-06-02 15:51:41
/* HAMMM WENO ALMENOS ALGUNOS TRATAN DE AYUDAR BRINDANDO SUS CONOCIMIENTOS
PERO OTROS SOLO SE CREEN LA GRAN COSA HABLAN CRITICAN
Y NO HACEN NADA......ADE + EL ASEMBLER ES UN LENGUAJE Q CASI NADIE DOMINA PUESTO Q ES UN POCO DIFICIL DE INTERPRETAR.. PE RO Q XVERE Q SE INTEREZEN EN ESTO ..SUERTE BAY IO TBM ESTOY APRENDIENDO..BAYYY */
GIANNY PEREZ
2009-06-04 16:47:30
QUIERO UNPROGRAMA HECHO EN C++ QUE MUESTRE LAS TABLAS DEL MULTIPLICAR DEL 13 AL 18
erika
2010-03-15 17:17:23
nesecito ayuda noc como aser k en c++ me muestre los valores de las tablas de multiplicar ayudenma porfas. gracias...
jackie
2010-04-07 21:56:51
aqui esta el de la suma asi lo hice a ver k tal
;programa que suma dos numeros cada uno de dos digitos
;y le aplica el ajuste en ascii para separar en bcd el
;resultado
.model tiny
.stack
.data
msg db 'Echame los numeros a sumar $'
.code
.startup
mov ah,09h ;interrupcion para imprimir una cadena
lea dx,msg ;ontenemos la direccion de memoria de ms
int 21h ;ejecutamos la interrupcion
mov ah,01h ;interr. lee el caracter 1 del numero 1
int 21h ;ejecutamos la interrupcion
sub al,30h ;hacemos el aguste de caracter a numero
mov bl,al ;guardamos el numero en bl
int 21h ;lee el caracter 2 del numero 1
sub al,30h ;ajustamos el numero
mov cl,al ;copeamos a cl
int 21h ;lee el caracter 1 del numero 2
sub al,30h ;ajustamos el numero
add bl,al ;lo sumamos a las decenas
int 21h ;lee el caracter 2 del numero 2
sub al,30h ;ajustamos el numero
add cl,al ;sumamos a las unidades
mov ax,cx ;pasamos el R para convertirlo BCD
aaa ;convierte BCD
mov cx,ax ;respaldamos el resultado separado
add bl,ch ;sumamos el acarreo a las decenas
mov ax,bx ;pasamos ax para convertir a BCD
aaa ;convertimos BCD separado
mov bx,ax ;respaldamos el resultado
mov dl,bh ;muevo las centenas a dl
add dl,30h ;ajusto las centenas
mov ah,02h ;interr. mostrar un caracter
int 21h ;muestra las sentenas en pantalla
mov dl,bl ;muevo las decenas a dl
add dl,30h ;ajusto las decenas
int 21h ;muestro las decenas
mov dl,cl ;muevo las unidades a dl
add dl,30h ;ajusto las unidades
int 21h ;muestro las unidades
.exit
end