• Domingo 22 de Diciembre de 2024, 13:05

Autor Tema:  Multiplicar En Asm  (Leído 2479 veces)

komoasi

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Multiplicar En Asm
« en: Lunes 2 de Junio de 2008, 17:39 »
0
Hola a todos! ando haciendo un programita y la verdad apenas se imprimir algo en asm, este programa no me multiplica el numero que entra desde el teclado, a ver si alguien me ayuda, aqui esta :

; --- EXE file format
.model small
.stack 100h
.data

data2 db 10,"Introduzca el texto.", 10, 13, '$'
data3 db "Al terminar, presione Enter.", 10, 13, '$'

;--------- Insert Data and Equates HERE

;--------- Declare other variables with DB, DW, etc. here


.code
start:
mov ax, @data
mov ds, ax ;set segment register
mov es, ax ;set segment register
and sp, not 3 ;align stack to avoid AC fault

lea dx, data2
mov ah, 09
int 21h

lea dx, data3
mov ah, 09
int 21h

print1:
mov ah, 01
int 21h

cmp al, 0dh
je divx
jne print1

divx:
mov cx, 0
mov cl, al

mov al, cl
mov bl, 4
mul bl

mov dx, ax
mov ah, 9
int 21h

exit:
mov ax, 4c00h ; terminate program
int 21h
end start

mil gracias de antemano!

Phicar

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Multiplicar En Asm
« Respuesta #1 en: Viernes 11 de Julio de 2008, 02:45 »
0
0k no soy muy diestro en el tema, pero vamos a intentar :P; Primero le asignas a la funcion 09h de la int 21h que imprima lo que se almacena en ax, pero esa función imprime strings, también le pediste a la gente que ingresara un número pero ese número es almacenado también como caracter y veo que le agregas a cl el valor de la devuelta de al, pero al queda sólo como el último valor no crees??, entonces no estás haciendo nada, tienes que llamar la posición en memoria de todo lo que ingresaste, aparte lo que ingresas queda como valor ascii, así que no es lógica esa multiplicación para lo que quieres,también pones a cl == al no cl == [al], que creo estaría mal, te dejaría código, pero tampoco tengo idea de cómo sería, :P, espero por lo menos aclarado dudas, te dejo el ingreso a mi forma, dejando una especie de buffer definido como
Código: Text
  1. eto DB 100 dup (?), "$"
  2.  
y ensamblando todos los caracteres que se ingresan menos el 0dh en esa variable
Código: Text
  1. mov eto[bx], al
  2.  

siendo que bx está en constante crecimiento

suerte y que pena no poderte ayudar en algo más, pero mi ensamblador es muy precario todavía :P