Давайте предположим, что следующий кодПроблема с smali кодом
public static int addition() {
int result = 1;
for(int i = 1; i < 10000 ; i++)
result = result + i;
}
и соответствующий smali код (0002 находится рядом с if-ге):
const/4 v0,#int 1
move v1,v0
const/16 v2,#int 10000
if-ge v0,v2,<0x0a>
add-int/2addr v1,v0
add-int/lit8 v0,v0,#int 1
goto <0002>
return v1
Я пытался понять, соответствующий smali (сборочный) код, но натолкнулся на строку, которая не имеет для меня никакого смысла (отмечена символом ???). Если я не ошибаюсь, значение v1 увеличивается каждый раунд на значение v0, что не имеет никакого смысла - первый раунд: v1 = 2; второй раунд v1 = 4 и т. д.
put 1 into register v0 // v0 = 1
move value register v0 into v1 // v0 = 1 ; v1 = 1
put 10000 into register v2 // v0 = 1 ; v1 = 1 ; v2 = 10000
if v0 >= v2 goto 0x0a // v0 = 1 ; v1 = 1 ; v2 = 10000
v1 = v1 + v0 (???) // v0 = 1 ; v1 = 2 ; v2 = 10000
v0 = 1 + v0 // v0 = 2 ; v1 = 2 ; v2 = 10000
goto 0x02
return v1
Я думаю, что я недопонимаю одну из линий. Что я делаю не так?
Было бы правильно, если бы код был «result = result + i;». Может быть, опечатка? –
@Nils: Можете ли вы подтвердить, что это была опечатка? – user1354557
А, да, есть опечатка. Извини за это. Я изменил его выше. – Nils