0

看起来这应该可以,但是在输入值后我不断收到分段错误。有什么建议吗?

.section .data

speed: .int 0
fine: .int 0
points: .int 0

inputPrompt: .asciz "Enter an integer value for speed ==> "
outputPrompt: .asciz "With a speed of %d the fine will be $%d and %d points will be added to your license"

inputSpec: .ascii "%d"


.section .text #read in values

.globl main

main: 
    nop

    pushl   $inputPrompt

    call    printf

    addl    $4, %esp

#read in speed value    

    pushl   $speed

    pushl   $inputSpec

    call scanf

    addl    $8, %esp

#-------------------greater than or equal to 86--------------------------

movl    speed,   %eax

subl    $85,     %eax   

Jg  fine4

#-------------------81 - 85---------------------------------------------

movl    speed,   %eax

subl    $80,     %eax

Jg  fine3

#-------------------76 - 80---------------------------------------------

movl    speed,   %eax

subl    $75,     %eax   

Jg  fine2

#-------------------71 - 75---------------------------------------------

movl    speed,   %eax

subl    $70,     %eax   

Jg  fine1

#-----------------less than 71-----------------------------------------------

movl    $0,     fine
movl    $0,     points

JMP output

 #---------------------71 - 75-------------------------------------------

fine1:
movl    $60,        fine

movl    $2,     points

JMP output

#---------------------76 - 80-------------------------------------------

fine2:
movl    $90,        fine

movl    $3,     points

JMP output

#---------------------81 - 85-------------------------------------------

fine3:
movl    $120,       fine

movl    $4,     points

JMP output

#---------------------less than or equal to 86------------------------------------------

fine4:
movl    $150,       fine

movl    $6,     points

#----------------------------------------------------------------

output:
pushl   points
pushl   fine
pushl   speed
pushl   outputPrompt

call printf

addl $8, %esp

#-----------------------------------------------------------------
call exit
4

1 回答 1

1

您缺少$登录信息pushl outputPrompt。该指令将前 4 个字节放入outputPrompt堆栈,但您需要地址。因此使用pushl $outputPrompt

此外,学习使用调试器,以便您可以修复自己的错误。

于 2012-10-20T22:41:09.757 回答