无法将寄存器rcx压入堆栈

时间:2018-08-06 17:49:13

标签: assembly x86-64 intel

我认为我在组装堆栈方面缺少一个重要的概念。我想推送寄存器rcx的值,因为被调用函数使用了该寄存器,但出现了段错误。我知道,如果我将push rbx放在push rcx之前(对于pop之后),代码就可以工作。这背后是否有充分的理由(对我来说似乎没有意义)?

.intel_syntax noprefix

.data

wrtfrmt:    .asciz "%c\n"
rdfrmt:     .asciz "%d"

.bss

.lcomm      val, 4

.text

.global main



main:   

    enter 0,0

    lea rdi, rdfrmt
    lea rsi, val
    call scanf

    mov ebx, val        

    lea rdi, rdfrmt
    lea esi, val
    call scanf

    mov ecx, val        


    next:


    push rcx

    lea rdi, rdfrmt
    lea esi, val
    call scanf


    pop rcx
    cmp ebx, val

    loopne next

    jne not_found

    mov esi, 'y'
    jmp print

    not_found:
    mov esi, 'y'

    print:
    lea rdi, wrtfrmt
    call printf

    leave
    ret

0 个答案:

没有答案