Inicio ¿Sidebar? RSS @MisAlgoritmos at Twitter

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...

  1. .model small
  2. .stack
  3. .data
  4. .code
  5.    chr1  db ?
  6.    chr2  db ?
  7.    chr3  db ?
  8.    r1    db ?
  9.    r2    db ?
  10.    ac    db 0
  11. .startup
  12.    ;cls
  13.    mov ah,00h     ;Function(Set video mode)
  14.    mov al,03      ;Mode 80x25 8x8 16
  15.    int 10h        ;Interruption Video
  16.  
  17.    mov ah,01h     ;Function(character read)
  18.    int 21h        ;Interruption DOS functions
  19.    sub al,30h     ;ajustamos valores
  20.    mov chr1,al    ;[chr1].chr2 * chr3 = ac.r1.r2
  21.    
  22.    mov ah,01h     ;Function(character read)
  23.    int 21h        ;Interruption DOS functions
  24.    sub al,30h     ;Ajustamos valores
  25.    mov chr2,al    ;chr1.[chr2] * chr3 = ac.r1.r2
  26.    
  27.    mov ah,02h     ;Function(character to send to standard output)
  28.    mov dl,'*'     ;Character to show
  29.    int 21h
  30.    
  31.    mov ah,01h     ;Function(Read character)
  32.    int 21h        ;Interruption DOS Functions
  33.    sub al,30h     ;Transform(0dec = 30hex)
  34.    mov chr3,al    ;chr1.chr2 * [chr3] = ac.r1.r2
  35.    
  36.    mov ah,02h     ;Character to send to standar output
  37.    mov dl,'='     ;
  38.    int 21h        ;Interruption DOS functions
  39.    
  40.    ;Realizamos operación
  41.    
  42.    mov al,chr3    ;al = chr3
  43.    mov bl,chr2    ;bl = chr2
  44.    mul bl         ;AL = chr3*chr2 (BL*AL)
  45.    mov Ah,0h      ;
  46.    AAM            ;ASCII Adjusment
  47.    mov ac,AH      ;ac = AH (Acarreo)
  48.    mov r2,AL      ;r2 = AL       (Unidad del resultado)
  49.    
  50.    mov al,chr3    ;AL = chr3
  51.    mov bl,chr1    ;BL = chr1
  52.    mul bl         ;AL = chr1*chr3 (BL*AL)
  53.    mov r1,al      ;r1 = AL       (Decena del resultado)
  54.    mov bl,ac      ;BL = Acarreo anterior
  55.    add r1,bl      ;r1 = r1+ac (r1 + Acarreo)
  56.    mov ah,00h     ;
  57.    mov al,r1      ;AL = r1 (Asignación para el ajust)
  58.    AAM            ;ASCII Adjustment
  59.    mov r1,al      ;r1 = AL
  60.    mov ac,ah      ;ac = AH (Acarreo para la Centena del resultado)
  61.    
  62.    ;Mostramos resultado
  63.    mov ah,02h    
  64.    mov dl,ac
  65.    add dl,30h
  66.    int 21h        ;Mostramos ac (Centena)
  67.  
  68.    mov ah,02H
  69.    mov dl,r1
  70.    add dl,30h
  71.    int 21h        ;Mostramos r1 (Decena)
  72.  
  73.    mov ah,02H
  74.    mov dl,r2
  75.    add dl,30h
  76.    int 21h        ;Mostramos r2 (Unidad)
  77. .exit
  78. end

23 comentarios en Multiplicación en Ensamblador

Mis Algoritmos » Blog Archive » Hola mundo en ensamblador

[...] Multiplicación básica en ensamblador [...]

ANNEL

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

Si, así es ;-) gracias por el comentario :D

Eddy

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

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

Tu pinche multiplicacion tiene errores arreglala no, y te dice s llamar programador, ja

Victor De la Rocha

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

jajaja creo q aqui solo llegan principiantes yo tambien estoy en apuron con ensamblador ... alguien q heche una manito... jejje

EDWIN RODRIGO

/* 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

QUIERO UNPROGRAMA HECHO EN C++ QUE MUESTRE LAS TABLAS DEL MULTIPLICAR DEL 13 AL 18

erika

nesecito ayuda noc como aser k en c++ me muestre los valores de las tablas de multiplicar ayudenma porfas. gracias...

jackie

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

Oscar

un simple 4 * 4 en ensamblador, veo que es un dolor de cabeza x(

Mike

Haaa como abundan los trolles y la gente inútil, por los demás chidos comentarios y vic, no te molestes en contestar a los trolles y a los inútiles :) creo que compartir lo que haces es chido...

si te conocieran en persona sabrían que eres de los mejores programadores ;)

CHAVA ROMERO

RaBaGi esta medi@ pendej@ de se gura no sabe ni correr un programa en ensamblador por que tu programa corre perfecto

LaLo

aqui esta otro programa para sumar dos numeros espero que les sirva esta mas sencillo y practico

.Model small
.stack
.data
RES db ?, '$'
MENSA1 db 'PRESIONA UNA TECLA',10,13,'$'
MENSA2 db 'PRESIONA OTRA TECLA',10,13,'$'
MENSA3 db 'LA SUMA DE LOS NUMEROS ES',10,13,'$'
.code

MOV AX,@DATA
MOV DS,AX

MOV AH,00H
MOV AL,03H
INT 10H

MOV AH,09H
MOV DX,OFFSET MENSA1
INT 21H

MOV AH,01H ;AL= SE GUARDA LA TECLA PRESIONADA
INT 21H

SUB AL,30H
MOV CH,AL

MOV AH,02H
MOV BH,0
MOV DH,5
MOV DL,0
INT 10H

MOV AH,09H
MOV DX,OFFSET MENSA2
INT 21H

MOV AH,01H ;LEE UNA TECLA
INT 21H

SUB AL,30H

ADD CH,AL ;CH = CH + AL

ADD CH,30H
MOV RES,CH

MOV AH,02H
MOV BH,0
MOV DH,9
MOV DL,0

MOV AH,09H
MOV DX,OFFSET MENSA3
INT 21H

MOV AH,09H
MOV DX,OFFSET RES
INT 21H

MOV AH,4CH
INT 21H

end


z4hz4td30cw4

Hola amigo también soy principiante en ensamblador de universidad... xD, genial tu programa, me agrado y me esta ayudando a entender mas el ensamblador......, te comento que desde que vi esta pagina me caes bien a como has hablado por aquí....

Es algo raro pero en serio me agrado como has escrito tu forma de comunicación....

Desconozco si todavía estas al pendiente de esta pagina no eh visto mas de tu pagina, puede que ya estés realizando tus actividades profesionales, pero si no es mucho pedir estar en comunicación con tigo para que nos apoyemos, si así lo deseas también y tienes tiempo,

Victor De la Rocha

Hola z4hz4td30cw4, sigo al pendiente del sitio, pero no puedo contestarle a todos jeje... Pero si, aquí seguimos con ganas! Gracias por el comentario.

LILIS

Hola a todos jeje amm x lo q veo muxos principiantes al iwual q yo echenle ganas y ps graxias por dejar sus programas son de mucha ayuda. ensamblador es algo complicado pero con la ayuda de muxos es mucho mas facil. suerte a todos..

Naydu

Desarrollar un Programa que solicite el ingreso de una letra en minuscula y lo muestre en mayuscula.

Desarrollar un programa que solicite dos numeros y efectue a continuacion lo siguiente: 2*a-2*b, tal que a es el primer numero y b es el segundo numero.
por favor ayúdenme con estooo ...

jelson

uhmmmmm
no entiendo nada de assembler.... necesito que me ayuden :s con la multiplicacion de dos numeros

ROYER

haber haber ya emos visto las multiplicaiciones pero seri interesante hacer un algoritmo en lenguaje ensamblador que nos calcule la multiplicacion de dos numeros PERO utilizando usmas sucesivas vamos quien lo hace ...!!!!!

leno

por favor help me please ayudenme un programa en assembler para multiplicar dos numeros de dos digitos kada uno ??

Deja un comentario

¿Cuanto es 2 + 3 - 5? =

Suscribirse a los comentarios.