Segmentation Fault in Assembly-Sprache

Ich bin learningn AT&T, x86 assembly language". Ich bin versucht, zu schreiben ein Assembler-Programm, das dauert eine ganze Zahl n, und dann wieder das Ergebnis (n/2+n/3+n/4). Hier ist, was ich getan habe:

.text
.global _start
_start:
    pushl $24
    call profit
    movl %eax, %ebx
    movl $1, %eax
    int $0x80

profit:
    popl %ebx
    popl %eax
    mov $0, %esi
    movl $4, %ebp
    div %ebp
    addl %eax, %esi
    movl %ecx, %eax
    movl $3, %ebp
    div %ebp
    addl %eax, %esi
    movl %ecx, %eax
    movl $2, %ebp
    div %ebp
    addl %eax, %esi
    movl %esi, %eax
    cmpl %ecx, %esi
    jg end
    pushl %ebx
    ret

end:
    mov %ecx, %eax
    ret

Das problem ist, ich bin immer segmentation fault. Wo ist das problem?

Haben Sie versucht, schrittweise durch den code mit einem debugger, um zu sehen, was Los ist ?
AT&T verzweigt in die Prozessoren? (-:
tripleee: "AT&T-syntax" bezieht sich auf die assembler-syntax, die ursprünglich aus der SysV-Unix. Es setzt das operand-size auf die Anweisung, wie ein suffix verwendet ein "%" zu-tag-Namen registrieren, und setzt das Ziel-register am Ende der Liste. Es ist die syntax, unterstützt von den GNU-assembler unter linux. Es ist ganz anders als "Intel" - syntax verwendet, die häufiger in der PC-Industrie.
Wenn du gehst, um zu lernen, Intel assembly language verwenden Sie die Intel-syntax. In einer anständigen Welt, die Greuel, die Sie aufrufen AT&T-syntax würde nie existiert haben.

InformationsquelleAutor user1700688 | 2012-09-26

Schreibe einen Kommentar