2012-06-05 3 views
2

В настоящее время я занят созданием небольшой (с фиксированными вопросами) викторины в сборке (AT & T).Не работает

Я разработал небольшое меню, которое запрашивает определенный ввод либо 1 2, либо 3
Проблема заключается в том, что мой cmpl не выполняет эту работу, и я не могу понять, почему. Он просто уходит, независимо от того, какой вход.

Ниже приведены некоторые из моего кода:

.text 

menu: .asciz "Please select an option: 1 - Start the quiz! 2 - Highscores 3 - Quit\n" 
input: .asciz "%i" 

.global main 

main: 
    call menushow 

menushow: 
    push $menu 
    call printf 
    addl $4,(%esp) 

    leal -4(%ebp), %eax 
    pushl %eax 
    pushl $input 

    call scanf  

    popl %eax 
    popl %eax  # the number that has been entered is now in eax 

    cmpl $1,%eax  #1 entered? 
    je qone   #show question 1 

    cmpl $2,%eax  #2 entered?? 
    je showHighScores #show current highscores 

    call quit  #something else? (3, 99 w/e) then we quit 
+0

Что вы видите, когда отлаживаете это? – zmbq

+0

Когда я отлаживаю, je get не выполняется, поэтому программа переходит на следующий cmpl. Здесь он снова не попадает, и, таким образом, он достигает вызова quit, который выполняется (безоговорочно). – Gooey

+0

Когда вы вводите «1» с клавиатуры, значение равно 31h или 49 десятичным, а не 1. –

ответ

1
  • Вы не выделение места в стеке для результата от зсапа. Вам нужно либо нажать некоторое значение dword в стек, прежде чем вы нажмете аргументы на scanf или удалите addl $4,(%esp) и используйте пространство, ранее занятое аргументом, printf. Адрес этого места будет -12 (% ebp) в системе Windows. Вместо того, чтобы использовать ebp, который вы получаете из операционной системы, я предлагаю вам установить его самостоятельно в начале вашей программы, чтобы вы знали, на что указывает.

  • Вы удаляете два значения из стека, но поскольку scanf имеет два аргумента, значение, которое вы используете, - это значение третьего значения, поэтому вам нужно снова нажать.

+0

Хммм, я дам это позже. Я дам вам знать, было ли это успешным - спасибо за ответ в любом случае :) – Gooey

 Смежные вопросы

  • Нет связанных вопросов^_^