2009. május 19., kedd

[ARM asm] strlen


ROM:FCC06168
ROM:FCC06168 ; =============== S U B R O U T I N E =================================
ROM:FCC06168
ROM:FCC06168 ; Attributes: library function
ROM:FCC06168
ROM:FCC06168 strlen ; CODE XREF: sub_FCC05F8C+9Cp
ROM:FCC06168 ; sub_FCC05F8C+B4p
ROM:FCC06168 CMP R0, #0
ROM:FCC0616C BXEQ LR
ROM:FCC06170 MOV R1, R0
ROM:FCC06174
ROM:FCC06174 iteracio
ROM:FCC06174 LDRB R2, [R1]
ROM:FCC06178 CMP R2, #0
ROM:FCC0617C ADDNE R1, R1, #1
ROM:FCC06180 BNE iteracio
ROM:FCC06184 SUB R0, R1, R0
ROM:FCC06188 BX LR
ROM:FCC06188 ; End of function strlen


Ha az r0 regiszter értéke 0, akkor a link regiszterben(r14) tárolt címre ugrunk. Vagyis visszaadjuk a vezérlést a hívó programnak. Máskülönben az r0 értékét letároljuk r1-ben. Itt készítünk egy "iteracio" címkét. Az r1 címen lévő bájtot az r2-be másolja. r2 nulla-e? Ha nem nulla r1 értékét növeld eggyel. ha a flag nem 0 akkor ugorj az "iteracio" címkére. r1-ből vondd ki r0 tartalmát. add vissza a vezérlést

Tehát, ha a megadott címen lévő bájt 0 bájt, akkor ez egy 0 méretű sztring, ha viszont nem akkor a címet bájtonként léptetjük, addig míg a 0 bájtba nem ütközünk és visszaadjuk ezt a számot.

Nincsenek megjegyzések:

Megjegyzés küldése