跳转不起作用

Posted

技术标签:

【中文标题】跳转不起作用【英文标题】:Jump not working 【发布时间】:2012-06-05 10:34:38 【问题描述】:

我目前正忙于在装配 (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

【问题讨论】:

调试时看到了什么? 当我调试 je get 没有执行所以程序向下移动到下一个 cmpl。在这里它没有再次被击中,因此它达到了调用退出,它被执行(无条件地)。 当您从键盘输入“1”时,该值为 31h 或 49 十进制,而不是 1。 【参考方案1】:

您没有在堆栈上为 scanf 的结果分配空间。您需要在将参数推送到 scanf 之前将一些 dword 值推送到堆栈,或者删除 addl $4,(%esp) 并使用之前由参数占用的空间到 printf .在 Windows 系统上,这个空间的地址是 -12(%ebp)。不要使用从操作系统获得的 ebp,我建议您在程序开始时自行设置,以便知道它指向的位置。

您从堆栈中弹出两个值,但由于 scanf 有两个参数,您所追求的值是 第三个​​值,因此您需要再弹出一次。

【讨论】:

嗯,我稍后再试一试。如果它成功了,我会告诉你的——谢谢你的回答:)

以上是关于跳转不起作用的主要内容,如果未能解决你的问题,请参考以下文章

跳转到应用程序时中断不起作用(STM32)

SpringMVC控制器 跳转到jsp页面 css img js等文件不起作用 不显示

stm32f103c8 跳转到应用程序不起作用

在safari下面javascript的location.href()不起作用

安卓中location.href或者location.reload 不起作用

遇到问题---hosts不起作用问题的解决方法