Assembly kodundaki hata nedir?

muslimlinuxuser

Centipat
Katılım
10 Ağustos 2023
Mesajlar
132
Daha fazla  
Cinsiyet
Erkek
Bu Assembly kodundaki hata nedir acaba 4 gündür uğraşıyorum olmadı.


Kod:
;;Programmer : MuslimLinuxUser

;;

;; Date : 22/8/23 (europe)

;;

;; time : 9:33 PM

    section .data                      ;değeri bilinen değişkenler

        header db "Benim aptal hesap makinem", 10 ;26 karakter

        ayrac db "------------------------------",10 ;31 karakter

        text1 db "İlk sayıyı giriniz:"             ;19 karakter

        text2 db "Son sayıyı giriniz:"             ;19 karakter

        cevap db "Sonuc:"                 ;6 karakter



    section .bss         ;değeri belirsiz bilinmeyenler

        ilk resb 4    ;4 byte yer ayır

        son resb 4      ;4 byte yer ayır

                 sayii resb 4



    section .text

        global _start



_start:                ;ana programın olduğu yer

    call _baslik         ;headerı çağır

    call _ayrac        ;ayracı çağır

    call _istek1        ;text1 i yazdırmak için istek1i çağır

    call _input1        ;ilk i alacağız

    call _istek2        ;text2 // //        //  istek2i //

    call _input2        ;son u alacağız

    call _sonuc        ;cevap vereceğiz



        mov rax, ilk

        add rax, son

        mov rax, rbx



        call _sayi



    mov rax, 60        ;temel kapatma

    mov rdi, 0        ;hata olmadığını bildirmek



    jmp _start        ;loop yapmak için

   

    syscall         ;kernelden yardım isteme



_baslik:            ;başlığımız

    mov rax, 1        ;standart yazdırma

    mov rdi, 1        ;standart output

    mov rsi, header        ;yazdırılıcak değişken:header

    mov rdx, 26        ;26 byte(karakter: ASCII de her karakter 8 bit yani bir byte) yer ayır

    syscall            ;kernelden yardım iste

    ret            ;geri dönüş yap

   

_ayrac:                ;ayracımız

    mov rax, 1         ;standart yazdırma

    mov rdi, 1        ;standart output

    mov rsi, ayrac        ;ayracı yazdır

    mov rdx, 31         ;31 byte(karakter) yer ayır

    syscall            ;kernelden yardım iste

    ret            ;geri dönüş yap

   

_istek1:            ;ilk sorumuz

    mov rax, 1        ;standart yazdırma

    mov rdi, 1        ;standart output

    mov rsi, text1        ;text1 i yazdır

    mov rdx, 19         ;19 byte(karakter) yer ayır

    syscall         ;kernelden yardım iste

    ret             ;geri dönüş yap



_input1:                ;ilk inputumuz

    mov rax, 0         ;standart write

    mov rdi, 0        ;standart input

    mov rsi, ilk        ;ilki al

    mov rdx, 4         ;4 byte yer ayır

    syscall            ;kernelden yardım iste

    ret            ;geri dönüş yap



_istek2:            ;son sorumuz

    mov rax, 1        ;standart yazdırma

    mov rdi, 1         ;standart output

    mov rsi, text2        ;text2 i yazdır

    mov rdx, 19         ;19byte(karakter) yer ayır

    syscall            ;kernelden yardım iste

    ret             ;geri dönüş yap



_input2:

        mov rax, 0

        mov rdi, 0

        mov rsi, son

        mov rdx, 4

        syscall

        ret

_sonuc:

        add rax, 48

        mov rax, 1

        mov rdi, 1

        mov rsi, cevap

        mov rdx, 6

        syscall

        ret



 _sayi:

        add rax, 48

        mov rax, 1

        mov rdi, 1

        mov rsi, rbx

        mov rdx,4

        syscall

        ret
 
Bu şekilde bir hesap makinesi yapamazsın. Standart input'dan string okuyorsun. Nümerik bir değer değil. Gördüğüm kadarıyla çevirici bir fonksiyon da yazmamışsın. Sistem çağrılarında hazır bir fonksiyon var mı emin değilim. İnternetten bakmayı dene x86'da hesap makinesi nasıl yapılıyor diye.
 
Aldığın hata nedir?
Hata yok sadece çalışmıyor sonucu başlık olarak gösteriyor.


Bu 64 Bit ama.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…