我通过打印整数在程序集中不断出现此错误

时间:2014-09-25 19:29:35

标签: assembly

我一直遇到分段错误,我无法弄清问题是什么。这可能是非常愚蠢的事情。我刚刚开始学习装配,所以非常欢迎任何帮助和解释!

确切的错误是:分段错误(核心转储)

.text
mystr:  .asciz  "%d"    #int that needs to be printed

.global main

main:
    mov 5, %rsi
    mov $mystr, %rdi
    call    printf

end:
    mov $0, %rdi
    call    exit

2 个答案:

答案 0 :(得分:0)

您的错误似乎是您在mystr部分中分配了变量.text。现在在汇编中,.text保留给只读代码(适用于基本命令和诸如此类的东西,如果你写它就会导致分段错误)。你需要的是一个.data部分,看起来像这样:

.text
.global main

main:
    mov 5, %rsi
    mov $mystr, %rdi
    call    printf

end:
    mov $0, %rdi
    call    exit

.data
mystr:  .asciz  "%d"    #int that needs to be printed

如果这不能按原样编译我很道歉(我精通另一种装配),但.data部分是你缺少的部分。

答案 1 :(得分:0)

两个错误:

1)常量在AT& T-syntax中有前缀'$',因此你必须写mov $5, %esi

2)函数printf需要x86-64 EAX中的另一个参数,它告诉函数向量参数的数量(例如浮点数)。您没有矢量参数,因此请在xor %eax, %eax - 行之前添加call printf