Я привел кусок АСМ-кода, вызывающего функцию reverse5. По завершению ф-ии reverse5 делаю возврат: mov r15,r14. Но похоже возврата не происходит.. Почему?
;-------------------------------------------------------------------------------
reverse5:
ldr r5,=0x10
mov r4,r7
and r4,r4,r5
movs r5,r4,LSR#4 ;b[0] = (x & 0x10) >> 4, ãäå r7=x
ldr r4,=0x1
and r5,r5,r4 ;b[0] = b[0] & 0x1
str r5,[r13,#30]
ldr r5,=0x8
mov r4,r7
and r4,r4,r5
movs r5,r4,LSR#2 ;b[1] = (x & 0x8) >> 2, ãäå r7=x
ldr r4,=0x2
and r5,r5,r4 ;b[1] = b[1] & 0x1
str r5,[r13,#31]
ldr r4,=0x4
and r5,r7,r4 ;b[2] = x & 0x4
str r5,[r13,#32]
ldr r5,=0x2
mov r4,r7
and r4,r4,r5
movs r5,r4,LSL#2 ;b[3] = (x & 0x2) << 2, ãäå r7=x
ldr r4,=0x8
and r5,r5,r4 ;b[3] = b[3] & 0x8
str r5,[r13,#33]
ldr r5,=0x1
mov r4,r7
and r4,r4,r5
movs r5,r4,LSL#4 ;b[4] = (x & 0x1) << 4, ãäå r7=x
ldr r4,=0x10
and r5,r5,r4 ;b[4] = b[4] & 0x10
str r5,[r13,#34]
ldr r4,[r13,#30]
ldr r5,[r13,#31]
and r7,r4,r5
ldr r4,[r13,#32]
ldr r5,[r13,#33]
and r7,r4,r5
ldr r5,[r13,#34]
and r7,r7,r5 ;x = b[0]|b[1]|b[2]|b[3]|b[4]
mov r15,r14 ;load LR into PC (r15) [causing a return]
;-------------------------------------------------------------------------------
Main:
mov r7,r11
B reverse5