Что может быть не так в этом коде ассемблера Linux? - PullRequest
2 голосов
/ 07 мая 2011

Мне нужно сделать простой калькулятор на 4 функции для кодирования 2 чисел с помощью Linux Assembler, однако программа работает не полностью нормально, потому что иногда не удается прочитать 2 числа.

Мои настройки и данные:

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

1 Ответ

2 голосов
/ 07 мая 2011

Некоторые из ваших строк не заканчиваются нулем.

Это может запутать printf и scanf.

...