2011-05-06 29 views
2

我需要制作一个简单的4函数计算器,用于Linux编译器编码的2个数字,但是程序不能完全正常工作,因为有时读取2个数字时会失败。这个Linux汇编程序代码有什么错误?

我的设置和数据:

bits 32 
global main 

extern scanf 
extern printf 
extern exit 

section .data 
    menu: db ; truncated, but essentially a string    
    msg1: db "El resultado de la suma es: %d", 10, 0 
    msg2: db "El resultado de la resta es: %d", 10, 0 
    msg3: db "El resultado de la multiplicacion es: %d", 10, 0 
    msg4: db "El resultado de la division es: %d", 10, 0 
    in1: db "Proporciona dato 1: ", 10 
    in2: db "Proporciona dato 2: ", 10 
    fmt: db "%d" 
    x:  dd 0 
    y:  dd 0 

相信该功能并不总是工作:

leer: 
    push dword in1 
    call printf 
    add esp, 4 

    push dword x 
    push dword fmt 
    call scanf 
    add esp, 8 

    push dword in2 
    call printf 
    add esp, 4 

    push dword y 
    push dword fmt 
    call scanf 
    add esp, 8 
    ret 

原代码可以在这里找到: http://notepad.cc/piloobru13

+0

在此发布RELEVANT代码。 – 2011-05-06 22:56:30

+0

@Diego我已经将我认为与您的问题相关的代码拉出来并添加了一些标签。使用粘贴容器并发布您的整个代码在这里是不好的,因此请记住包含您认为相关的部分。你可以用'{}'按钮来设置你的代码的格式。另外,在标签下面的问题按钮处,有一个“编辑”链接,所以如果你需要改变任何事情,那么就可以做到这一点。欢迎来到Stack Overflow。 – 2011-05-06 23:24:25

+0

正在做作业吗? – sehe 2011-05-06 23:25:54

回答

2

你的一些字符串不是零终止的。

这可能会混淆printf和scanf。

+0

您是否提到in1和in2字符串? 不知何故,如果我加0它肯定不起作用 – diegoaguilar 2011-05-07 18:54:25

+0

是的,和'fmt'最初恰好是零终止,直到你输入x和y的新值。 – 2011-05-08 00:07:18