首页 > 解决方案 > 为什么我在这个程序集打印功能中出现分段错误

问题描述

所以我正在尝试制作一个简单的汇编程序,我遇到了一个段错误,打印功能确实打印出了我想要的东西,但是它崩溃了。

测试.s:

.global _start

msg1:
        .string "Hello, World!\n"
msg2:
        .string "Goodbye, World !\n"

_start:
        PUSHQ   %rbp
        MOVQ    %rsp, %rbp
        MOVQ    $msg1, %rax
        CALL    print
        MOVQ    $msg2, %rax
        CALL    print
        POPQ    %rbp
        RET

# void print(char * x[%rax])
print:
print_init:
        PUSHQ   %rbp
        MOVQ    %rsp, %rbp
        SUBQ    $32,  %rsp
        MOVQ    %rax, -32(%rbp)
print_loop:
        MOVL    $1, %edx
        MOVL    -32(%rbp), %ecx
        CMPB    $0, (%ecx)
        JE      print_exit
        MOVL    $1,   %ebx
        MOVL    $4,   %eax
        INT     $0x80
        ADDQ    $1, -32(%rbp)
        JMP     print_loop
print_exit:
        POPQ    %rbp
        RET

感谢您的帮助!

标签: assemblygccx86

解决方案


推荐阅读