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