Ayuda, ya no se que hacer

Iniciado por alexpin, 11 Abril 2013, 01:27 AM

0 Miembros y 1 Visitante están viendo este tema.

alexpin

en este programa quisiera que se sumen dos variables
que estan previamente declaradas,
pero por alguna razon se concatenan los
valores y me devuelve strings en lugar de un valor
creo que el error es de base y se encuentra en la
declaracion

section .data
msg:      db "La X= "
lmsg:       equ $-msg
msg1:      db "La Y= "
lmsg1:      equ $-msg1
;val_x:      db "100",10
;lval_x:      equ 100
;val_y:      db "9",10
;lval_y:      equ 9
nlinea:      db 10,10,0
lnlinea:   equ $-nlinea
section .bss
lval_x:      equ 100
lval_y:      equ 9
result   resw 2
section .text
global _start:
_start:
mov    eax,4
mov    ebx,1
mov   ecx,msg
mov   edx,lmsg
int   80h

mov   eax,4
mov   ebx,1
mov   ecx,lval_x
;mov   edx,lval_x
int   80h

mov   eax,4
mov   ebx,1
mov   ecx,msg1
mov   edx,lmsg1
int   80h

mov   eax,4
mov   ebx,1
mov   ecx,lval_y
;mov   edx,lval_y
int   80h

mov   eax,lval_x
mov   ebx,lval_y

sub   eax,'0'
sub   ebx,'0'

add   eax,ebx

add   eax,'0'
mov   [result], eax

mov   eax,4
mov   ebx,1
mov   ecx,result
int   80h

mov   eax,4
mov   ebx,1
mov   ecx,nlinea
mov   edx,lnlinea
int   80h

mov   eax,1
mov   ebx,0
int   80h

cpu2

Hola

¿Quieres que imprima el entero del resultado?

Podrías declarar las variables con un .int.

No sé porqué copias 1 a ebx todas las veces si no cambia el valor, hasta esos sub que no se a que vienen, estaria mejor así:

Código (asm) [Seleccionar]
inc ebx

Un saludo.

alexpin

mov eax,4; Especifica la llamada al sys_write
mov ebx,1;Especifica el descriptor de archivo 1 :Standar de Output
sub eax,'0'es para transformar de string a decimal
add eax,'0' transforma de decilmal a string

Vaagish

Es Masm eso ? Podrias probar con atodw y dwtoa

alexpin

Lo siento creo que no di la suficiente información es nasm
pero igual ya lo resolví y quedo algo así
section .data
m:    db "La x= ";mensaje a mostrar
lm:    equ $-m    ;tama ˜no del mensaje
x:    db "100"   ;se define el valor de la variable
xl:    equ $-x    ;se define el tama˜no de la variable
de:    db "9"   ;se define el valor de la variable 2
del:    equ $-de   ;se define el tama˜no
se:    db 10,0,0   ; generamos un salto de linea
sel:    equ $-se   ; generamos el espacio
section .bss
result    resw 2 ; creamos la variable resultado
section .text
global start:    ;Punto de entrada para Linker
start:
mov    eax,4   ;Especifica la llamada al sys write
mov    ebx,1   ;Standar de Output
mov    ecx,m   ;se pasa la direcion del mensaje
mov    edx,lm   ;Se pasa la longitud del mensaje
int    80h      ;invoca la interrupcion 80h
mov    eax,4   ;Especifica la llamada al sys write
mov    ebx,1   ;Standar de Output
mov    ecx,x   ;se pasa la direcion del mensaje
mov    edx,xl   ;Se pasa la longitud del mensaje
int    80h      ;invoca la interrupcion 80h
mov    eax,4   ;Especifica la llamada al sys write
mov    ebx,1   ;Standar de Output
mov    ecx,se   ;se pasa la direcion del mensaje
mov    edx,sel   ;Se pasa la longitud del mensaje
int    80h      ;invoca la interrupcion 80h
mov    eax,[m]   ;pasamos m a un registro
mov    ebx,
  •    ;pasamos x a un registro
    sub    eax,'0'   ;transforma m de String a Entero
    sub    ebx,'0'   ;transforma x de String a Entero
    add    eax,ebx   ;Sumamos los dos valores
    add    eax,'0'   ;transforma de entero a string
    mov    [result],eax;almacenamos en result
    mov    eax,4   ;Especifica la llamada al sys write
    mov    ebx,1   ;Standar de Output
    mov    ecx,result   ;Se imprime resultado
    mov    edx,1   ;Standar de Output
    int    80h      ;invoca la interrupcion 80h
    mov    eax,4   ;Especifica la llamada al sys write
    mov    ebx,1   ;Standar de Output
    mov    ecx,se   ;se pasa la direcion del mensaje
    mov    edx,sel   ;Se pasa la longitud del mensaje
    int    80h      ;invoca la interrupcion 80h
    mov    eax,1   ;Standar de Output
    mov    ebx,0   ; se especifica el codigo de salida
    int    80h      ;invoca la interrupcion 80h