• 08-11-2021, 00:12:01
    #1
    Merhabalar,

    Factorial
        MOV R1,#1           
        CMP R0,#2          // Bu kısım (Burda girilen R0 ile 2 yi kıyaslıyor ama aşağıdaki kısmı neye göre etkiliyor?)
        BMI endFactorial  
    loopFactorial
        MUL R1,R0          
        SUBS R0,#1           
        BEQ endFactorial    // Bu kısım r0 dan 1 çıkararak gitmeyle alakalı ama bu satırı neye göre tetikliyor?)
        B loopFactorial  
    endFactorial
        MOV R0,#0           
        BX LR  // Bu kısım
    İşaretlediğim kısımları bilen birisi anlatabilir mi acaba? Tam olarak ne işe yaradıklarını kavrayamadım.
  • 12-11-2021, 01:29:56
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    TayfunGuler adlı üyeden alıntı: mesajı görüntüle
    Merhabalar,

    Factorial
        MOV R1,#1          
        CMP R0,#2          // Bu kısım (Burda girilen R0 ile 2 yi kıyaslıyor ama aşağıdaki kısmı neye göre etkiliyor?)
        BMI endFactorial  
    loopFactorial
        MUL R1,R0          
        SUBS R0,#1          
        BEQ endFactorial    // Bu kısım r0 dan 1 çıkararak gitmeyle alakalı ama bu satırı neye göre tetikliyor?)
        B loopFactorial  
    endFactorial
        MOV R0,#0          
        BX LR  // Bu kısım
    İşaretlediğim kısımları bilen birisi anlatabilir mi acaba? Tam olarak ne işe yaradıklarını kavrayamadım.
    Öncelikle arm bilgim yok ama x86 ya benzediği için anladığım kadarıyla yazdığımı belirteyim.

    CMP R0,#2 // bu kısımda karşılaştırma yapıyor.

    BMI endFactorial // bu kısım ise koşullu dallanma, yani "R0" #2 a eşit ise(emin değilim) endFactorial a dallan ve fonksiyonu sonlandır .

    BEQ endFactorial // bu kısım da koşullu dallanma, büyük ihtimal "R0" 0 olunca endFactorial kısmına dallanıyor, eğer "R0" 0 değilse B loopFactorial çalışır buda koşulsuz dallanma yani direk dallanır buda "R0" 0 olana kadar döngü oluşturuyor.

    BX LR // bunun ne olduğunu bende bilmiyordum ama okuduğum kadarıyla bildiğimiz "ret" komutu yani fonksiyonu sonlandır ve geri dön.

    Okuduğum kaynaklar:
    https://sourceware.org/cgen/gen-doc/arm-thumb-insn.html
    https://community.nxp.com/t5/S32K/bx-lr-vs-ret/m-p/1002594
  • 12-11-2021, 18:07:39
    #3
    sawashan adlı üyeden alıntı: mesajı görüntüle
    Öncelikle arm bilgim yok ama x86 ya benzediği için anladığım kadarıyla yazdığımı belirteyim.

    CMP R0,#2 // bu kısımda karşılaştırma yapıyor.

    BMI endFactorial // bu kısım ise koşullu dallanma, yani "R0" #2 a eşit ise(emin değilim) endFactorial a dallan ve fonksiyonu sonlandır .

    BEQ endFactorial // bu kısım da koşullu dallanma, büyük ihtimal "R0" 0 olunca endFactorial kısmına dallanıyor, eğer "R0" 0 değilse B loopFactorial çalışır buda koşulsuz dallanma yani direk dallanır buda "R0" 0 olana kadar döngü oluşturuyor.

    BX LR // bunun ne olduğunu bende bilmiyordum ama okuduğum kadarıyla bildiğimiz "ret" komutu yani fonksiyonu sonlandır ve geri dön.

    Okuduğum kaynaklar:
    https://sourceware.org/cgen/gen-doc/arm-thumb-insn.html
    https://community.nxp.com/t5/S32K/bx-lr-vs-ret/m-p/1002594
    Merhabalar, konuyu açtıktan sonra iyice araştırıp öğrenmiştim. Dediğiniz bir çok şey doğru. Teşekkür ederim zaman harcadığınız için.