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
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í:
inc ebx
Un saludo.
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
Es Masm eso ? Podrias probar con atodw y dwtoa
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