2014-09-29 4 views
0

방금 ​​어셈블리 x86 학습을 시작했고 해결할 수없는 연습을해야합니다. 아이디어는 사용자가 Scanf를 사용하여 번호를 입력하도록 요청하는 프로그램을 만드는 것입니다. 그런 다음 프로그램은 숫자에 1을 더하고 그 수를 출력합니다 (기본적으로 출력 = 입력 +1).기본 어셈블리 연습 문제 해결할 수 없습니다

코드를 사용할 때 콘솔에 세그먼트 오류가 표시됩니다.

코드 :

mystring: .asciz "name_of_the_programmer\nLast_Name\nAssignment 2:inout\nGive a number:\n" #Creëert een stuk tekst 
nrstring: .asciz "%d" 

.global main 


main: 

    movq  $0, %rax        #Geeft de locatie %rdi een waarde van 0, maakt %rdi leeg 
    movq  $mystring, %rdi        #Voegt de waarde van mystring (het stuk tekst) toe aan %rdi 
    call  printf         #Print de waarde van %rdi 
    call  inout         #roept inout op 

inout: 

     pushq %rbp 
     movq %rsp , %rbp 

     subq $8, %rsp         #Plaatst stackPointer goed 
     leaq -8(%rbp), %rsi        #Laad het adres in rsi 

     movq $0, %rdi         #Maakt rdi leeg  
     movq $nrstring, %rdi        #Verplaatst string nrstring naar rdi (1e arg. scanf) 
     movq $0, %rax         #Maakt RAX leeg (2e arg. scanf) 
     call scanf         #Roept Scanf op 

     incq %rdi 
     movq %rdi, %rax 
     call printf 

     movq %rbp, %rsp 
     popq %rbp 
     ret 

end: 
    mov   $0, %rdi        #Maakt %rdi leeg 
    call  exit         #Sluit het programma af 

내가 그렇게 의견에 대한 걱정을하지 말아주십시오 네덜란드에서 오전 내 나쁜 영어 죄송합니다.

+2

질문은 * 어디에 *는 세분화 오류입니까? 디버거를 사용하여 프로그램을 단계별로 실행하고 그 원인이되는 단계를 찾을 수 있습니다. 어떤 명령으로 인해 어떤 명령이 발생했는지 알게되면 그 명령이 왜 잘못된 것을하고 있는지 * 생각할 수 있습니다. 디버거를 잡아라. –

+0

@TNH 당신은 영어가 그렇게 나쁘지 않습니다. 예를 들어, 저는 네덜란드어로 한 단어를 말할 수 없었습니다. 그러나 소스 나 소스 코드에서 영어가 아닌 다른 언어를 사용하는 것은 일반적으로 좋지 않습니다. 이것은 완벽한 예입니다. 이러한 주석이 영어로 작성 되었다면 우리 중 일부는 코드가 실제 의도와 다른 부분을 발견 할 수 있습니다. 적어도 SegFault가 올 수있는 명확한 단서를 제공합니다. – Powerslave

답변

0

이 코드를 실행하는 환경에 대해 너무 많이 모르는 상태에서 % RSI를 SS의 값으로 DS를 초기화하는 것을 잊어 버리는 스택의 주소로 설정한다는 결론을 내 렸습니다!

왜 처음으로 % RDI를 비 웁니까?

movq $0, %rdi   #Maakt rdi leeg  
movq $nrstring, %rdi #Verplaatst string nrstring naar rdi 

이인제 hoeft JE NIET 테 verontschuldigen 날엔 JE 반 네덜란드 komt! 재미 있은 말. 프로그램 할 수있는 눈덩이처럼 불어 오는 사람이 눈물을 흘리며 눈물을 흘리거나 눈물을 흘릴 수 있습니다. 포럼에서 웰컴!

관련 문제