Ensamblador - Sumar en asm [decimal]

 
Vista:

Sumar en asm [decimal]

Publicado por Dani (5 intervenciones) el 05/05/2005 20:05:13
COmo podri hacer para meter un numero... ejemplo 150 y k asm me lo conozca como ciento cincuenta, para luego poder hacer calculos, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sumar en asm [decimal]

Publicado por Ge-ergon (46 intervenciones) el 06/05/2005 21:42:39
Hola!
El número 150 en realidad es 1 * 10^2 + 5 * 10^1+ 0 * 10^0
Siempre se debe realizar una conversion entre los valores Ascii cuando se trabaja con números que se desean imprimir en pantalla, ejemplo no es los mismo 1+1 que '1' + '1'.
Si se tiene el valor 1 en un registro y se manda a imprimir en pantalla lo que veremos será la carita feliz sin relleno del código ascii. Los caracteres de los números en ascii empiezan a partir del 48 (32 hex). lo que se deberia de hacer entonces es add ax,48.
Ahora simplemente se sigue la formula.

Te copio un código que escribí rapidamente, en relidad se le pueden hacer muchas mejoras, es solamente para fines explicativos.
El programa lee un número, le suma 7 y muestra el resultado.
Fue probado en windows 98 SE SP y compilado utilizando tasm 4.0
y tlink 4.0. Debe compilarse como .com

ideal
model tiny
p486
codeseg
org 0100h
begin:

mov dx, offset maxlen
mov ah, 0ah
int 21h

xor ax,ax ; procedimiento de conversion ascii a decimal
xor cx,cx
mov si, offset message
mov cl, [actual_len]
xloop:
push cx
mov cx,10
mul cx
mov bl,[si]
sub bx,30h ; o 48 en decimal
add ax,bx
inc si
pop cx
loop xloop ; end
; En este momento Ax tiene el valor decimal de la cadena
add ax, 7h ; Aqui se realiza la suma de la constante o variable

; Este procedimiento imprime la nueva cadena
mov bx,0Ah
mov si,sp

reminder_not_cero:
xor dx,dx
div bx
push dx
cmp ax,0h
jne reminder_not_cero

stack_with_num:%0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sumar en asm [decimal]

Publicado por Ge-ergon (46 intervenciones) el 06/05/2005 21:49:54
Se corto la nota!
Este programa no realiza verificación de que lo que se lee se un número, y puede dar resultados erroneos si el valor es mayor de 16 bits.
----inicio---
ideal
model tiny
p486
codeseg
org 0100h
begin:
mov dx, offset maxlen
mov ah, 0ah
int 21h

xor ax,ax ; procedimiento de conversion ascii a decimal
xor cx,cx
mov si, offset message
mov cl, [actual_len]
xloop:
push cx
mov cx,10
mul cx
mov bl,[si]
sub bx,30h o 48 en decimal
add ax,bx
inc si
pop cx
loop xloop ; end procedimiento
; En este momento Ax tiene el valor decimal de la cadena
add ax, 7h ; Aqui se realiza la suma de la constante o variable

; Este procedimiento imprime la nueva cadena
mov bx,0Ah
mov si,sp
reminder_not_cero:
xor dx,dx
div bx
push dx
cmp ax,0h
jne reminder_not_cero
stack_with_num:
pop ax
add ax,30h
int 29h
cmp si,sp
jne stack_with_num
mov ax, 4c00h
int 21h ;FIN PROGRAMA
; Seccion de datos
maxlen db 81
actual_len db 0
message db 80 dup (?)
end begin
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

sumar en asm [decimal]

Publicado por Ale velazquez (2 intervenciones) el 19/04/2006 00:38:30
Hola:

Mira yo hice este codigo, espero que te ayude:

datos segment para 'data'
numero1 dw ?
numero2 dw ?
resultado dw ?
msg db 'la suma es: $'
datos ends
pila segment para 'stack' stack
db 64 dup(?)
pila ends
codigo segment para 'code'
inicio:
assume cs:codigo, ss:pila, ds:datos
mov ax,datos
mov ds,ax
mov numero1, 12254
mov numero2, 14251
mov ax, numero1
add ax, numero2
mov resultado, ax
mov ah, 09h
mov dx, offset msg
int 21h
;;imprimimos el numero
mov dx, 0
mov ax, resultado
mov bx, 10
mov cx, 0
bucle:
div bx
push dx
sub dx, dx
inc cx
cmp ax, 0
jne bucle
bucle2:
mov ah, 2
pop dx
add dl, 48d
int 21h
loop bucle2
mov ah, 04ch
mov al, 0h
int 21h
codigo ends
end inicio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

suma de 2 números

Publicado por Gerardo Montalvo Montalvo (1 intervención) el 10/03/2013 09:06:05
bueno tengo este problema lo que pasa es que quiero hacer la suma de dos números . los numeros introducidos desde el teclado . y que el salga de esta manera .
con 3 cadenas .
la primera: inserte el primer numero
segunda:inserte el segundo número
tercera :el resultado es igual a #$
las primeras dos ya me salen pero en el resultado me sale que el resultado es = a "T"
en ves del "T" se supone que me debe de salir el resultado de la suma este es el codigo :



model small
.stack
.data
var1 db ?
cadena db 'Teclea el primer numero ',13,10,'$'
cadena2 db 10,'Teclea el segundo numero ',13,10,'$'
cadena3 db 10,'El Resultado es ','$'
.code
.startup

mov ax,@data ;mover valores en data a ax
mov ds,ax ;mover ax a ds
mov ah,9 ;permite desplegar en pantalla texto
mov dx, OFFSET cadena ;manda a pantalla el valor de la cadena
int 21h

mov ah,01h ;leer caracter desde el teclado
int 21h ;lee primer caracter
sub al,30h ;resto 30H (48Dec) para obtener el numero
mov var1,al ;lo guardo en variable var1


mov ah,9 ;permite desplegar en pantalla texto
mov dx, OFFSET cadena2 ;manda a pantalla el valor de la cadena
int 21h

mov ah,01h ; leer caracter desde el teclado
int 21h ; leo el segundo caracter
sub al,30h ;resto 30H (48Dec) para obtener segundo valor
add al,var1 ; realizo la suma de los dos valores


mov ah,9 ;permite desplegar en pantalla texto
mov dx, OFFSET cadena3 ;manda a pantalla el valor de la cadena
int 21h

mov dl,al ;pongo en dl el numero a imprimir
add dl,30h ; agrego 30 (48Dec) para obtener el caracter
mov ah,02h ;funcion para imprimir un caracter en pantalla
int 21h
.exit
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar