Inicio ¿Sidebar? RSS

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

12 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

Deja un comentario

¿Cuanto es 2 + 3? =

Suscribirse a los comentarios.