Dalvik VM рдХреЗ рдЕрдВрджрд░ Java рдФрд░ C рдХреА рджреЛрд╕реНрддреА рдХрд┐рддрдиреА рдордЬрдмреВрдд рд╣реИ?

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рдФрд░ Dalvik VM рдореЗрдВ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдкрдиреЗ рдЪрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореБрдЭреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдЬрд╛рдирдиреЗ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рдереА:


рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдХреЛ 3 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╣реИ рдФрд░ рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╣реИ - рдХреЛрдб рдХреЗ рдмрд╛рдж рдХреЗ рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ, рдХреНрдпреЛрдВрдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреА рдПрдбрд╝реА рдкрд░ рдХрджрдо рд░рдЦрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЬрд╛рдирдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕рдХреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреВрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C) рдЕрдм рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдЕрдм рдореБрдЭреЗ Dalvik VM рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдВрдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдЗрд╕ рд╡реАрдПрдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдк рдореЗрд░реЗ рдХрдерди рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдкрд╛рдареНрдпрдХреНрд░рдо рдХрдИ рдмрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИред

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ ARM рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдХреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, "рдЖрдкрдХреЗ рдЕрдкрдиреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ" рдХрдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдФрд░ рдирд╣реАрдВред

рдпрд╣ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдХреНрд░реЗрдЪ рд╕реЗ рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдХреМрд╢рд▓ рд╣реЛ (рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрд╛рдиреЗрдВ)ред

рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рднреА 3 рднрд╛рдЧреЛрдВ рд▓реЛрдб рдореЗрдВ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВ, рд▓рдЧрднрдЧ рддрд╛рдХрдд рдореЗрдВ рдмрд░рд╛рдмрд░ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХреЗ рдореБрдХрд╛рдмрд▓реЗ 2 рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реИред рддреЛ рдХреГрдкрдпрд╛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдпрджрд┐ рдЖрдк рдЖрдЗрдЯрдо рдХреЗ рдорд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЕрдВрдд рдореЗрдВ рд▓реЛрдб рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдЦ рдореЗрдВ рдХрд┐рд╕реЗ рд░реБрдЪрд┐ рд╣реЛрдЧреА

рдХреЗрд╡рд▓ рд╕рд╛рд╣рд╕реАред

рдПрдХ рдЕрдЪреНрдЫрд╛ рдбреЗрд╡рд▓рдкрд░, рдЕрдЧрд░ рд╡рд╣ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рддреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреЗ рдбреЗрд╡рд▓рдкрд░ рдХреА рдореЗрд░реА рд╕рдордЭ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди рдХреЛрдИ рд╣реИ рдЬреЛ рдХреБрдЫ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ, рдпрд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЦреБрдж рд╕реЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рдФрд░ рдРрд╕реЗ рдШрдиреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рдЙрдирдХреЗ рдЬрд╡рд╛рдм рдвреВрдВрдврдирд╛ рдЬреИрд╕реЗ рдХрд┐ рдбрд╛рд▓реНрд╡рд┐рдХ рд╡реАрдПрдо рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдФрд░ рдореИрдВ рдЙрд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдпрд╣ рд░рд╛рд╕реНрддрд╛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрд╕реА рд╕рд╛рд╣рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓рдХреНрд╖реНрдп

рдореЗрд░рд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕реА рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИ:
int sum(int a, int b) { return a + b; } 


рдПрдХ рд╣реА рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде:
  public class Summator { int sum(int a, int b) { return a + b; } static int staticSum(int a, int b) { return a + b; } } 


  public class NativeSummator { native int sum(int a, int b); static native int staticSum(int a, int b); } 


рдореЗрд░реА рдЕрдкрдиреА рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред

рддреИрдпрд╛рд░реА рдХрд╛ рдЬреНрдЮрд╛рди

рдореИрдВ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдпрд╛рдж рджрд┐рд▓рд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реА рдХреЛрдб рдХрд╛ рдПрдХреАрдХрд░рдг рдЬреЗрдПрдирдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИред

рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдПрдХ рдмрд╛рд╣рд░реА (рдореВрд▓) рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореВрд▓ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 package com.m039.study; public class Summator { native int sum(int a, int b); } 


рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, C рдХреЛрдб рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

 int Java_com_m039_study_Summator_sum(JNIEnv* env, jobject thiz, int a, int b) { return a + b; } 


рдЬрд╛рд╡рд╛ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕реНрдореГрддрд┐ рд╕реЗ рджрд┐рдпрд╛ рдЧрдпрд╛):


рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП, ndk-build рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрдорд╛рдВрдб рд╕реАред (рдпрд╛ C ++) рдлрд╛рдЗрд▓реЛрдВ рдХреЛ ./jni рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреА рд╣реИред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ Android.mk рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ Application.mk рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, libNAME.so рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ ./libs/armebi рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЬрд╣рд╛рдБ рдЖрд░реНрдордмрд╛рдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЪрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк NDK рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рднрд╛рдЧ I рд╕реА рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?


рдкреНрд░рд╢реНрди: C рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдЖрд░рдПрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдЕрдм рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛрдб рдЕрд╕реЗрдВрдмрд▓рд░ (рдХрдЪреНрдЪреЗ) рд░реВрдк рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдЬреБрджрд╛

рдореБрдЦреНрдп рдкреНрд░рд╢реНрди C рдФрд░ Java рдХреА рдкрд░рд╕реНрдкрд░ рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВрдиреЗ 5 рдЙрджрд╛рд╣рд░рдг рдЪреБрдиреЗ:

1. рдорд╛рдирдХ:
 int sum(int a, int b) { return a + b; } 


2. рдЬреЗрдПрдирдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдВрдзрди (рд╕реНрдерд┐рд░ рдирд╣реАрдВ):
  int Java_com_m039_study_Summator_sum(JNIEnv* env, jobject thiz, int a, int b) { return a + b; } 


3. рдЬреЗрдПрдирдЖрдИ (рд╕реНрдерд┐рд░) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдВрдзрди:
  int Java_com_m039_study_StaticSummator_sum(JNIEnv* env, jclass thiz, int a, int b) { return a + b; } 


4. рдЬреЗрдПрдирдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА (рд╕реНрдерд┐рд░ рдирд╣реАрдВ, рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ):
  int Java_com_m039_study_Summator_sum(JNIEnv* env, jobject thiz, int a, int b) { return sum(a, b); } 


5. рдЬреЗрдПрдирдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА (рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ,):
  int Java_com_m039_study_StaticSummator_sum(JNIEnv* env, jclass thiz, int a, int b) { return sum(a, b); } 


рдереЛрдбрд╝рд╛ рд╕реЛрдЪрдиреЗ рджреЛред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 4 рдФрд░ 5 рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рдЕрдЧрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВред 1-3 рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдПрдВ

рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ, рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдЬреИрд╕реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди рдХреЗ рдЭрдВрдбреЗ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрдиреБрдХреВрд▓рди рдзреНрд╡рдЬред

Application.mk рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдк APP_OPTIM рдЪрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рджреЛ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд░рд┐рд▓реАрдЬрд╝ рдпрд╛ рдбрд┐рдмрдЧред

рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рджреЛ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдПрдХреАрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдПрдХ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдирд╛ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рддрд░реНрдХ рдХреА рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ 'рдбреАрдмрдЧ' рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдордЭ рдФрд░ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрдо рдореМрдХрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрдЧрд╛), рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рдлрд┐рд░ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ 'рд░рд┐рд▓реАрдЬрд╝' рдореЛрдб рдореЗрдВ рдХреЛрдб рдХрд┐рддрдирд╛ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдЕрдм рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ред

APPLICATION-MK.html рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ рдХрд┐ APP_OPTIM рдзреНрд╡рдЬ APP_OPTIM рдХреНрдпрд╛ APP_OPTIM , рдпрд╣ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреИрдЧ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ android:debuggable="true" рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ android:debuggable="true" рдФрд░ APP_OPTIM рдЪрд░ рдХреЛ 'рдбреАрдмрдЧ' рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ APP_OPTIM ред рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ APP_OPTIM рдХреЛ 'рд░рд┐рд▓реАрдЬрд╝' рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ APP_OPTIM ред

рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ android:debuggable рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ android:debuggable рдХрд░рдиреЗ android:debuggable AndroidManifest.xml рдореЗрдВ "рд╕рд╣реА" рдкрд░ android:debuggable рд╣реИред

рдФрд░ рдЖрдк рдЙрд╕ рдХреНрд╖рдг рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЪрд░ APP_OPTIM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдВрдХрд▓рдХ рдХреЛ рдХреНрдпрд╛ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЖрдк рдЗрд╕реЗ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдиреАрдЪреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 ifeq ($(APP_OPTIM),debug) APP_CFLAGS := -O0 -g $(APP_CFLAGS) else APP_CFLAGS := -O2 -DNDEBUG -g $(APP_CFLAGS) endif 


рдЕрдм рд╕рднреА 5 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред

'рдбреАрдмрдЧ' рдореЛрдб рдореЗрдВ

рдиреЛрдЯ : рд╕рднреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХрдорд╛рдВрдб arm-linux-androideabi-objdump -d " " рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереАрдВ

рд╡рд┐рдХрд▓реНрдк 1

 00000804 <sum>: 804: b082 sub sp, #8 806: 9001 str r0, [sp, #4] 808: 9100 str r1, [sp, #0] 80a: 9a01 ldr r2, [sp, #4] 80c: 9b00 ldr r3, [sp, #0] 80e: 18d3 adds r3, r2, r3 810: 1c18 adds r0, r3, #0 812: b002 add sp, #8 814: 4770 bx lr 816: 46c0 nop (mov r8, r8) 


рдЗрд╕ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдлрд╝рд╛рд▓рддреВ рд╣реИ, рдФрд░ рд╕рднреА рдХреЙрд▓рд┐рдВрдЧ рд╕рдордЭреМрддреЗ рдХреЗ рдХрд╛рд░рдг, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдЖрд░рдПрдо рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдХреЗ рд▓рд┐рдП ред

рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реВрдВ:
- 04: 2 рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рд░рдЦрддрд╛ рд╣реИред
- режрем-реж to: рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред
- 0a-0c: рд╕рдорд╛рди рддрд░реНрдХ рдХреНрд░рдорд╢рдГ рдЕрдиреНрдп рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ r2 рдФрд░ r3 рдХреЛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
- 0e: r3 = r2 + r3 рдХреЗ рдмрд░рд╛рдмрд░
- 10: r0 рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬреЗрдВ
- 12: рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЙрд╕рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрд╛рдПрдВ
- 14: рд╡реЗ рдЬрд╣рд╛рдВ рд╕реЗ рдЖрдП рдереЗ рд╡рд╣реАрдВ рд▓реМрдЯ рдЬрд╛рддреЗ рд╣реИрдВ
- 16: рдПрдирдУрдкреА рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдлрд╛рдЗрд▓ рдореЗрдВ рдлрдВрдХреНрд╢рди рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛

рдЬреЛрдбрд╝ : 2 рдЕрдВрдХ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдереЗ: рдкреНрд░рддреНрдпрдп рдПрд╕ рдФрд░ рдХрдорд╛рдВрдб рдмреАрдПрдХреНрд╕ред рдкрд╣рд▓реЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░, рд╕реНрдЯреЗрдЯрд╕ рдлреНрд▓реИрдЧ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреВрд╕рд░рд╛ рдЕрдВрдЧреБрд╖реНрда рдХрдорд╛рди рд╣реИ, рдЬреЛ рдХрд┐ рдмреНрд▓реЗрдо рдХрдорд╛рдВрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рдХреЛрдб рдЪрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдмрд╣реБрдд рдХреБрдЫ рдерд╛ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдк рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдерд╛ред

рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ, рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рдмрд┐рдВрджреБ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддрд░реНрдХ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЖрджреЗрд╢ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╕реЗ рдпрд╣ adds r0, r1, r2; bx lr рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ рдХреЛрдб adds r0, r1, r2; bx lr adds r0, r1, r2; bx lr рдХреЛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рддреИрдпрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реЛрдЧрд╛ (рдЬрдм рддрдХ рдХреЛрдИ рдмрд╛рдЬрд╛рд░ рдореЗрдВ 'рдбрд┐рдмрдЧ' рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд░рддрд╛)ред рдФрд░ рдЬрдмрдХрд┐ рдПрдХ рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрджрддрд░ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рд╢реЗрд╖ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 2

 000007ec <Java_com_m039_study_Summator_sum>: 7ec: b084 sub sp, #16 7ee: 9003 str r0, [sp, #12] 7f0: 9102 str r1, [sp, #8] 7f2: 9201 str r2, [sp, #4] 7f4: 9300 str r3, [sp, #0] 7f6: 9a01 ldr r2, [sp, #4] 7f8: 9b00 ldr r3, [sp, #0] 7fa: 18d3 adds r3, r2, r3 7fc: 1c18 adds r0, r3, #0 7fe: b004 add sp, #16 800: 4770 bx lr 802: 46c0 nop (mov r8, r8) 


рд╣рд╛рдВ, рд╣рд╛рдВ, рд╡рд╣реА, рдФрд░ рдЬреИрд╕реА рдХрд┐ рдЙрдореНрдореАрдж рдереА, рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЧрдИ рдФрд░ рдЕрдзрд┐рдХред рдФрд░ рдХрд┐рддрдиреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдСрдкрд░реЗрд╢рди, рдбрд░рд╛рд╡рдиреЗред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдиреЛрдЯ : рдЬрдмрдХрд┐ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЬреЗрдПрдирдЖрдИ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд░рд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рднреА рдмрджрддрд░ рд╣реИ (рдЬрд┐рд╕ рдкрд░ рдХрдо рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ)ред (рдЕрдм, рдЬрдм рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдБ, рдпрд╣ рдХрдерди рдмрд╣реБрдд рднреЛрд▓рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ)

рд╡рд┐рдХрд▓реНрдк 3

 00000850 <Java_com_m039_study_StaticSummator_sum>: 850: b084 sub sp, #16 852: 9003 str r0, [sp, #12] 854: 9102 str r1, [sp, #8] 856: 9201 str r2, [sp, #4] 858: 9300 str r3, [sp, #0] 85a: 9a01 ldr r2, [sp, #4] 85c: 9b00 ldr r3, [sp, #0] 85e: 18d3 adds r3, r2, r3 860: 1c18 adds r0, r3, #0 862: b004 add sp, #16 864: 4770 bx lr 866: 46c0 nop (mov r8, r8) 


рдзрд╛рд░рдгрд╛ рдЙрдЪрд┐рдд рдереА, рдХреЛрдб 2 рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рдорд╛рди рд╣реИред

рд╡рд┐рдХрд▓реНрдк 4

 000008e0 <Java_com_m039_study_Summator_sum>: 8e0: b500 push {lr} 8e2: b085 sub sp, #20 8e4: 9003 str r0, [sp, #12] 8e6: 9102 str r1, [sp, #8] 8e8: 9201 str r2, [sp, #4] 8ea: 9300 str r3, [sp, #0] 8ec: 9a01 ldr r2, [sp, #4] 8ee: 9b00 ldr r3, [sp, #0] 8f0: 1c10 adds r0, r2, #0 8f2: 1c19 adds r1, r3, #0 8f4: f7ff ffde bl 8b4 <sum> 8f8: 1c03 adds r3, r0, #0 8fa: 1c18 adds r0, r3, #0 8fc: b005 add sp, #20 8fe: bd00 pop {pc} 


рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЬреЗрдПрдирдЖрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рдерд╛ред рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрдирдЖрдИ рдХреЛ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдФрд░ рдЫреЛрдЯреЗ рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЖрдк рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ( рдиреЛрдЯ : рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдХрдерди рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ)

рдпрд╣ рдХреЛрдб рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ:
- e0: рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИ
- e2: рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИ
- e4-ea: рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдмрдЪрд╛рддрд╛ рд╣реИ
- рдЗрдХреЛ: рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ
- f0-f2: рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдореВрд▓реНрдп рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ
- f4: рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдЦреБрдж
- f8-fa: рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ
- fc: рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЙрд╕рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
- fe: рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдкрдиреЗ рдмреБрд▓рд╛рдпрд╛ рдерд╛

рд╕реНрдЯреНрд░рд┐рдВрдЧ 'e0' рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ lr рдХреЛ рдкреВрд░реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ:
 push {lr} sub sp, #20 adds r0, r2, #0 adds r1, r3, #0 bl 8b4 <sum> add sp, #20 pop {pc} 


рд╡рд┐рдХрд▓реНрдк 5

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред

рд░рд┐рд▓реАрдЬ рдореЛрдб рдореЗрдВ

рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреМрди рд╕рд╛ рдХреЛрдб рд╣реЛрдЧрд╛ред
рд╡рд┐рдХрд▓реНрдк 1

 0000894 <sum>: 894: 1808 adds r0, r1, r0 896: 4770 bx lr 

рд╡рд┐рдХрд▓реНрдк 2

 00000890 <Java_com_m039_study_Summator_sum>: 890: 1898 adds r0, r3, r2 892: 4770 bx lr 

рд╡рд┐рдХрд▓реНрдк 3

 00000898 <Java_com_m039_study_StaticSummator_SUM>: 898: 1898 adds r0, r3, r2 89a: 4770 bx lr 

рд╡рд┐рдХрд▓реНрдк 4

 0000089c <Java_com_m039_study_Summator_SUM3>: 89c: b510 push {r4, lr} 89e: 1c10 adds r0, r2, #0 8a0: 1c19 adds r1, r3, #0 8a2: f7ff fff7 bl 894 <sum> 8a6: bd10 pop {r4, pc} 

рдкреНрд░рднрд╛рд╡

рдореИрдВ рдереЛрдбрд╝рд╛ рд╣реИрд░рд╛рди рд╣реВрдВ рдФрд░ рдирд╣реАрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛ рдХреБрдЫ рднреА рд╕рдВрдпреЛрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдЕрдЪреНрдЫрд╛ рд╣реИ, рдмрд╣реБрдд рдХрд░реАрдм рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЦреБрдж рд╕реЗ рдКрдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереАред

рднрд╛рдЧ I рд╕рд╛рд░рд╛рдВрд╢

рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ рдПрдЖрд░рдПрдо рдХреЗ рддрд╣рдд рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реЗ рдорд┐рд▓рд╡рд╛рдПрдЧрд╛ред рдЖрдк рдЕрдиреНрдп рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рднреА рдЕрдкрдиреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдкрд░ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЕрдЧрд░ рдЖрдк рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рддреЛ рдЕрдм рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрдХрд▓рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝рдиреЗ рдкрд░ рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдХрд┐ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реА рдХреЛрдб рдХрд┐рддрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд╛рдж рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдм рдЖрдк рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ C рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рддрдиреЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдЕрд╕рдВрддреБрд╖реНрдЯ рд░реВрдк рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдСрдкрдХреЛрдб рдореЗрдВ, рдпрд╣ рднреА рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдоред рдФрд░ рддреАрд╕рд░реЗ рд▓реЗрдЦ рдореЗрдВ, рдЬрд╣рд╛рдВ рдСрдкрдХреЛрдб рд╕реА рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИред

рдФрд░ рдЕрдм, рдЬрд╛рд╡рд╛ рдСрдкрдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ред

рднрд╛рдЧ II рдЬрд╛рд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?


рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрд╡реАрдПрдо, рдпрд╛ рдмрд▓реНрдХрд┐ рдбрд╛рд▓рд╡рд┐рдХ рд╡реАрдПрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ * .dex рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ Dalvik VM рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдИрдЯреЗрдХреЛрдб рдлрд╝рд╛рдЗрд▓ рд╣реИред

рд╕рд╛рд░рд╛рдВрд╢ рд╡рд░реНрдЧ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ (рдореВрд▓ рд▓рдХреНрд╖реНрдп рджреЗрдЦреЗрдВ)? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо dexdump -d classes.dex рд╕реЗрдЯ рдХрд░реЗрдВред рдХреНрдпрд╛ рдЖрджреЗрд╢ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛:
  #5 : (in Lcom/m039/study/Summator;) name : 'sum' type : '(II)I' access : 0x0000 () code - registers : 4 ins : 3 outs : 0 insns size : 3 16-bit code units 00226c: |[00226c] com.m039.study.Summator.sum:(II)I 00227c: 9000 0203 |0000: add-int v0, v2, v3 002280: 0f00 |0002: return v0 catches : (none) positions : 0x0000 line=73 locals : 0x0000 - 0x0003 reg=1 this com/m039/study/Summator; 0x0000 - 0x0003 reg=2 a I 0x0000 - 0x0003 reg=3 b I 


  name : 'staticSum' type : '(II)I' access : 0x0008 (STATIC) code - registers : 3 ins : 2 outs : 0 insns size : 3 16-bit code units 002100: |[002100] com.m039.study.Summator.staticSum:(II)I 002110: 9000 0102 |0000: add-int v0, v1, v2 002114: 0f00 |0002: return v0 catches : (none) positions : 0x0000 line=77 locals : 0x0000 - 0x0003 reg=1 a I 0x0000 - 0x0003 reg=2 b I 


рдпрд╣рд╛рдВ add-int v0, v1, v2 рдФрд░ add-int v0, v1, v2 рдХреЗ рдореВрд▓реНрдп '9000 0102' рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдм рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдСрдкрдХреЛрдб рдЕрдВрджрд░ рд╕реЗ рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП opcodes?

рдореБрдЭреЗ рдПрдЖрд░рдПрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдпрд╣ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ opcodes рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрдЖрд░рдПрдо рд╣реИрдВ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Application.mk рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рджреЗрдЦреЗрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрд░ APP_ABI рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдПред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ armv5te рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣рдо рдЗрд╕реЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░реЗрдВрдЧреЗ!

рдХрд╣рд╛рдБ рд╕реЗ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ?

рдСрдкрдХреЛрдб рд╕реНрд╡рдпрдВ armv5te рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реИрдВред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рд╣реА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдкрд╣рд▓реЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, InterpAsm-armv5te.S рдлрд╝рд╛рдЗрд▓ ред рдпрд╣ рдореБрдЭреЗ рдЗрддрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред

рдкреНрд░рд▓реЗрдЦрди

рд╕рднреА рдореБрдЦреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдбреЙрдХреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореИрдВ рдХрдЪреНрдЪреЗ html рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ opcode (0x90) рдХреА рдЬрд╛рдВрдЪ

рдУрдкрдХреЛрдб 0x90 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЗрд╕рдХрд╛ рдХреЛрдб:
 .L_OP_ADD_INT: /* 0x90 */ /* File: armv5te/OP_ADD_INT.S */ /* File: armv5te/binop.S */ /* * Generic 32-bit binary operation. Provide an "instr" line that * specifies an instruction that performs "result = r0 op r1". * This could be an ARM instruction or a function call. (If the result * comes back in a register other than r0, you can override "result".) * * If "chkzero" is set to 1, we perform a divide-by-zero check on * vCC (r1). Useful for integer division and modulus. Note that we * *don't* check for (INT_MIN / -1) here, because the ARM math lib * handles it correctly. * * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, * mul-float, div-float, rem-float */ /* binop vAA, vBB, vCC */ FETCH(r0, 1) @ r0<- CCBB mov r9, rINST, lsr #8 @ r9<- AA mov r3, r0, lsr #8 @ r3<- CC and r2, r0, #255 @ r2<- BB GET_VREG(r1, r3) @ r1<- vCC GET_VREG(r0, r2) @ r0<- vBB .if 0 cmp r1, #0 @ is second operand zero? beq common_errDivideByZero .endif FETCH_ADVANCE_INST(2) @ advance rPC, load rINST @ optional op; may set condition codes add r0, r0, r1 @ r0<- op, r0-r3 changed GET_INST_OPCODE(ip) @ extract opcode from rINST SET_VREG(r0, r9) @ vAA<- r0 GOTO_OPCODE(ip) @ jump to next instruction /* 11-14 instructions */ 


рдпрджрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдХреЛрдб рдореЗрдВ рд╕реНрд╡рдпрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдУрдкрдХреЛрдб 0x90 рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдкреНрд░рд╛рд░реВрдк 23x рд╣реИ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдиреБрджреЗрд╢ рдХрд╛ рдЖрдХрд╛рд░ 2 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ рдФрд░ 3 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, 'x' рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдУрдкрдХреЛрдб рдХреЗ рдХреЛрдб рдХреЛ рдЗрди 3 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ 23x рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ 'v', рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'vCC' - рдХрд╛ рдЕрд░реНрде рд╣реИ рдЖрднрд╛рд╕реАред рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдУрдкрдХреЛрдб рд░рдЬрд┐рд╕реНрдЯрд░ рдирдВрдмрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдирд┐рд░реНрджреЗрд╢ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рдореВрд▓реНрдп рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред ( рдиреЛрдЯ : рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЙрдкрд╕рд░реНрдЧ 'v' рдирд╣реАрдВ рд╣реЛрддрд╛)

рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
- рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ opcode рд╣реИ: 00 | 90 02 | 01 (AA | op CC | BB) *
- 90 рдХрд╛ рдорддрд▓рдм рд╣реИ opcode рдЬреЛрдбрд╝реЗрдВ
- рд╣рдо рд░рдЬрд┐рд╕реНрдЯрд░ рдирдВрдмрд░ r9 = 0, r2 = 1, r3 = 2 рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ
- рд╣рдо рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА r1 = REG (r3), r0 = REG (r2) ** рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ
- рд╣рдо '' r0, r0, r1 '' рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
- рд░рд┐рдЯрд░реНрди рдорд╛рди REG (r9) = r0 рд╕рд╣реЗрдЬреЗрдВ

* рдзрд╛рд░рдгрд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рдорд╛рди |
** REG - рдПрдХ рдЫрджреНрдо рдХреЛрдб рд╣реИ

рдЗрд╕ рдУрдкрдХреЛрдб рдореЗрдВ рджреВрд╕рд░реЗ рдУрдкрдХреЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрдорд╛рдВрдб рднреА рд╣реИрдВред рдЕрдм рдЖрдкрдХреЛ рдЙрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдереЛрдбрд╝рд╛ рдХрдо рдХрд░реВрдВрдЧрд╛ред

рдФрд░ рдЕрдм рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдпрд╛ рдПрдХ рдХрдареЛрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ:
1. FETCH ( рдЖрд░ 0, 1)ред рдпрд╣ opcode (0x90) рджреЛ рд░рдЬрд┐рд╕реНрдЯрд░ rPC рдФрд░ rINST (ibidред) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ r4 рдФрд░ r5 рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рдХрдо рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ rINST ( FETCH_INST ) rPC рдкрд░ рдорд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ RINST FETCH рдХрдорд╛рдВрдб рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (rINST, 0)ред

2. рдорд╛рдирдХ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдирдВрдмрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред (рджреЗрдЦреЗрдВ рддрд╕реНрд╡реАрд░)

3. GET_VREG (рдЖрд░ 1, рдЖрд░ 3)ред рдПрдХ рдирдпрд╛ рдЖрд░рдПрдлрдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдФрд░ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рджреЛрдиреЛрдВ рддрд░реНрдХреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рдЯрд░реНрди рдорд╛рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рд╡реАрдПрдо рдХреЗ рдЖрдВрддрд░рд┐рдХ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

4. .if 0 ... .endif рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ InterpAsm-armv5te.S рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╢реЛрдз рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ! рдпрджрд┐ рдЖрдк binop.S рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕ opcode рдореЗрдВ рд╢реВрдиреНрдп рдЕрдХреНрд╖рдо рд╣реИред

5. FETCH_ADVANCE_INST (2) рдкрд░ рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ

6. рдЬреЛрдбрд╝ рдЬрд╛рд░реА рд╣реИ

7. GET_INST_OPCODE (IP) рдкрд░ рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред

8. SET_VREG (r0, r9) рд╕рдВрдмрдВрдзрд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ рдкрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рдВрдЦреНрдпрд╛ r0 рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред

9. GOTO_OPCODE (рдЖрдИрдкреА) рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ

рдореИрдВрдиреЗ рдПрдХ рджреГрд╢реНрдп рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ) рдЪрд┐рддреНрд░:


рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдУрдкрдХреЛрдб рдПрдХ рд╣реА рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб ('r0, r1, r0') рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ 2 рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд╕рд╛рде: рд╡рд░реНрдЪреБрдЕрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЕрдЧрд▓реЗ рдУрдкрдХреЛрдб рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдирд╛ред

рдЕрдкреНрд░рд╛рдкреНрдд рднрд╛рдЧ

рд╡рд░реНрдЪреБрдЕрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рднреА рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдУрдкреЗрдХ рдореЗрдВ рдмрд╛рдХреА рдЯреАрдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ рдЖрд░рдкреАрдПрдл рдФрд░ рдЖрд░рдкреАрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рдХреНрд╖реНрдп рд╕реЗ рдПрдХ рдордЬрдмреВрдд рдЕрдкрд░рд╛рдз рд╣реИред

рдЕрдм рд╢реЗрд╖ рдЖрджреЗрд╢реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
1. FETCH_ADVANCE_INST (2) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд opcode рдХреЛ rINST рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ
2. GET_INST_OPCODE (ip) IP рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ opcode рдирдВрдмрд░ рджрд░реНрдЬ рдХрд░реЗрдВ (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЧрд▓рд╛)
3. GOTO_OPCODE (рдЖрдИрдкреА) рдЕрдЧрд▓реЗ рдУрдкрдХреЛрдб рдХреЗ рдХреЛрдб рдкрд░ рдЬрд╛рдПрдВ

рдЗрди 3 рдХрдорд╛рдВрдб рдореЗрдВ, rIBASE рд░рдЬрд┐рд╕реНрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ 0x00 рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдУрдкрдХреЛрдб рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рдБ, рдпрд╣ рд╣реИред рдХреЛрдб рдореЗрдВ рдЕрдХреНрд╕рд░ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реЛрддреА рд╣реИ:
 adr rIBASE, dvmAsmInstructionStart @ set rIBASE 


рдФрд░ DVmAsmInstructionStart рдХрд╛ рдорд╛рди .L_OP_NOP рд╣реИред OP_NOP рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 0x00 рд╣реИ ред

рдХреНрдпрд╛ рдирд╣реАрдВ рдорд╛рдирд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛

рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдЕрдиреНрдп рдкреНрд░рд╛рд░рдВрднрд┐рдХ (рдЖрд░рдкреАрд╕реА, рдЖрд░рдПрдлрдкреА) рд░рдЬрд┐рд╕реНрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВред рд╢рд╛рдпрдж рд╣рдо рдЖрдЧреЗ рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдпрд╣ "рд╕рдВрднрд╡" рдХреНрдпреЛрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрд░рдкреАрдПрдл, рдФрд░ рдЖрд░рдкреАрд╕реА рдирд╣реАрдВ, рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЕрдм рддрдХ рдмрд╣реБрдд рдореВрд▓реНрдп рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ opcode (рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг) рдХреА рдЬрд╛рдВрдЪ

рдпрд╣ рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдУрдкрдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд▓рдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, arm5vte рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ?

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, README.txt рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред

рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╡рд╣ README.txt рдлрд╝рд╛рдЗрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рд╣реА рдерд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЙрджреНрдзрд░рдг рд╣реИ:

"рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ" рдЖрдЙрдЯ "рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЖрдЙрдЯ / рдЗрдВрдЯрд░рдкреЗрдХ-рдкреЛрд░реНрдЯрд╕реНрдЯреИрдбрд╕реАред (рдХрд╣рдирд╛) рдЖрд░реНрдорд╡реЗрдЯ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред "

рдЕрдм рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, OP_ADD_INS.S рдлрд╛рдЗрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 %verify "executed" %include "armv5te/binop.S" {"instr":"add r0, r0, r1"} 


рдЗрд╕ рдХреЛрдб рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдмрд┐рдиреЙрдк рд╕реЗ тАЛтАЛрдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд╛рдЗрд▓, рдЬрд┐рд╕рдореЗрдВ $ instr рдХрд╛ рдорд╛рди рд╣реЛрдЧрд╛ add r0, r0, r1 ред

рдпрд╣ Binop.S рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:

 %default {"preinstr":"", "result":"r0", "chkzero":"0"} /* * Generic 32-bit binary operation. Provide an "instr" line that * specifies an instruction that performs "result = r0 op r1". * This could be an ARM instruction or a function call. (If the result * comes back in a register other than r0, you can override "result".) * * If "chkzero" is set to 1, we perform a divide-by-zero check on * vCC (r1). Useful for integer division and modulus. Note that we * *don't* check for (INT_MIN / -1) here, because the ARM math lib * handles it correctly. * * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int, * xor-int, shl-int, shr-int, ushr-int, add-float, sub-float, * mul-float, div-float, rem-float */ /* binop vAA, vBB, vCC */ FETCH(r0, 1) @ r0<- CCBB mov r9, rINST, lsr #8 @ r9<- AA mov r3, r0, lsr #8 @ r3<- CC and r2, r0, #255 @ r2<- BB GET_VREG(r1, r3) @ r1<- vCC GET_VREG(r0, r2) @ r0<- vBB .if $chkzero cmp r1, #0 @ is second operand zero? beq common_errDivideByZero .endif FETCH_ADVANCE_INST(2) @ advance rPC, load rINST $preinstr @ optional op; may set condition codes $instr @ $result<- op, r0-r3 changed GET_INST_OPCODE(ip) @ extract opcode from rINST SET_VREG($result, r9) @ vAA<- $result GOTO_OPCODE(ip) @ jump to next instruction 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдмрд╣реБрдд, рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдерд╛ред рдХреЗрд╡рд▓ рдЕрдм рдХреЛрдИ рдЕрдХрд▓реНрдкрдиреАрдп рдХреНрд╖рдг рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдереА "@optional op ..", рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдореБрдЭреЗ рдЗрд╕ рдУрдкрдХреЛрдб рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ, рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдорд╛рдирд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рджреЗрд╢реА рдФрд░ рдЧреИрд░-рджреЗрд╢реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреИрд╕реЗ рдЖрдмрд╛рджреА рд╡рд╛рд▓реЗ рд╣реИрдВ?

рднрд╛рдЧ II рдкрд░рд┐рдгрд╛рдо

рдпрд╣ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рд╕реНрддрд░ рдерд╛, рдореБрдЭреЗ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрдирд╛ рдФрд░ рдпрд╛рдж рд░рдЦрдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдУрдкреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ! рдЖрдк рдЗрд╕рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдХреЗрд╡рд▓ рдЖрдирдиреНрджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рд╕реЗ рдмрдбрд╝рд╛ рдХреЛрдИ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдирд╛ рдУрдкрдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рднрд╛рдЧ рд╕реЗ рдЖрдк рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд рдУрдкрдХреЛрдб рдХрд╣рд╛рдВ рдФрд░ рдХреИрд╕реЗ рдвреВрдВрдвреЗрдВред

рд╕рд╛рде рд╣реА, рдЖрдкрдХреЗ рдХрдИ рдкреНрд░рд╢реНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдбреЗрд╡рд▓рдкрд░ Dalvik VM рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рджреЗрдЦреЗрдВред рдпрд╣ рдкреНрд░рд╕реНрддреБрддрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ GOTO_OPCODE рдЬреИрд╕реА рдЖрдЬреНрдЮрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдХрддрд╛рд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рдореИрдВ рд▓рдХреНрд╖реНрдп рдкрд░ рддреБрд░рдВрдд рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╕рднреА рдирд┐рд╖реНрдХрд░реНрд╖ рд▓реЗрдЦ рдХреЗ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рд╣реЛрдВрдЧреЗред рдФрд░ рдЕрдм рдореИрдВ Dalvik VM рдХреЗ рдЕрдВрджрд░ рдШреБрд╕рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдХрд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрддрд░ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХрдо рдХреЛрдб рдбрд╛рд▓реВрдВрдЧрд╛ред

рднрд╛рдЧ III рдХреЛрдб рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдБ рдЪрд▓рддрд╛ рд╣реИ?


рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, Dalvik VM рдореЗрдВ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдкрд┐рдЫрд▓рд╛ рдЬреНрдЮрд╛рди рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдорд╛рдирдиреЗ рд╕реЗ рдбрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЫрд▓рд╛рдВрдЧ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдорд╛рди рд╣реЛрдЧреАред рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!

рдиреЛрдЯ : рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдмреЗрд╣рддрд░ рдирд╣реАрдВ рддреБрд░рдВрдд рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдкрдврд╝реЗрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдзреАрд░реЗ-рдзреАрд░реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдФрд░ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реЛрдЧреАред

рдЬреБрджрд╛

рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ opcode рдХреИрд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрднрд╛рдЧреАрдп рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ:
  public class Summator { void test() { sum(44, 43); staticSum(42, 41); nSum(44, 43); nStaticSum(42, 41); } int sum(int a, int b) { return a + b; } static int staticSum(int a, int b) { return a + b; } native int nSum(int a, int b); native static int nStaticSum(int a, int b); } 


  name : 'test' type : '()V' access : 0x0000 () code - registers : 5 ins : 1 outs : 3 insns size : 21 16-bit code units outs : 3 insns size : 21 16-bit code units 0022a8: |[0022a8] com.m039.study.Summator.test:()V 0022b8: 1303 2c00 |0000: const/16 v3, #int 44 // #2c 0022bc: 1302 2b00 |0002: const/16 v2, #int 43 // #2b 0022c0: 1301 2a00 |0004: const/16 v1, #int 42 // #2a 0022c4: 1300 2900 |0006: const/16 v0, #int 41 // #29 0022c8: 6e30 2e00 3402|0008: invoke-virtual {v4, v3, v2}, Lcom/m039/study/Summator;.sum:(II)I // method@002e 0022ce: 7120 2d00 0100|000b: invoke-static {v1, v0}, Lcom/m039/study/Summator;.staticSum:(II)I // method@002d 0022d4: 6e30 2600 3402|000e: invoke-virtual {v4, v3, v2}, Lcom/m039/study/Summator;.nSum:(II)I // method@0026 0022da: 7120 2500 0100|0011: invoke-static {v1, v0}, Lcom/m039/study/Summator;.nStaticSum:(II)I // method@0025 0022e0: 0e00 |0014: return-void catches : (none) positions : 0x0008 line=29 0x000b line=30 0x000e line=31 0x0011 line=32 0x0014 line=33 locals : 0x0000 - 0x0015 reg=4 this Lcom/m039/study/Summator; 


рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ armv5te рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреА рд╣рд░ рдлрд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ (рдФрд░ рд▓реЗрдЦ рдкрд░ рдХреЙрдкреА) рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдФрд░ рдЕрдВрд╢ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдЖрдк рдКрдкрд░ рджреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореВрд▓ рд╡рд┐рдзрд┐ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХреИрд╕реЗ?рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдХреНрдпреЛрдВ рди рд╣реА рдЖрд╣реНрд╡рд╛рди (рдЗрдирд╡реЛрдХ-рд╡рд░реНрдЪреБрдЕрд▓) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдФрд░ рддреБрд░рдВрдд рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╡рд╣рд╛рдВ рдХреЛрдб рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЕрдЧреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдмрдирд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
- рдЖрднрд╛рд╕реА рдФрд░ рд╕реНрдерд┐рд░ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░
- рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдмрд╣реБрдд рдирд┐рд╖реНрдХрд░реНрд╖рдг
- рдФрд░ рдХрд┐рддрдиреЗ рдФрд░, рд╕рдВрднрд╡рддрдГ, рдирд┐рд╖реНрдХрд░реНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдХреМрди рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ

рдмрд╛рдХреА рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдзреНрдпрдпрди рд╕реЗ рдзреНрдпрд╛рди рднрдВрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрди

рдЖрдЗрдП рд╕реВрдЪреА рдХреЛ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рджреЗрдЦрдиреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред

рдХреЛрдб рдХрд╛ рд╡рд╣ рднрд╛рдЧ рдЬреЛ рдпреЛрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдФрд░ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
 0022b8: 1303 2c00 |0000: const/16 v3, #int 44 // #2c 0022bc: 1302 2b00 |0002: const/16 v2, #int 43 // #2b 0022c8: 6e30 2e00 3402 |0008: invoke-virtual {v4, v3, v2}, Lcom/m039/study/Summator;.sum:(II)I // method@002e 


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЙрдкрдпреБрдХреНрдд рд░рдЬрд┐рд╕реНрдЯрд░ рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдВрджрд░ рд╕реЗ рдХреИрд╕реА рджрд┐рдЦреЗрдЧреАред

const/16- рд╢рд╛рдпрдж рд╕рдВрдЦреНрдпрд╛ 0 рд╕реЗ рдЖрднрд╛рд╕реА рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдореВрд▓реНрдп 44 рдбрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдореВрд▓реНрдп 43ред ( рдзреНрдпрд╛рди рджреЗрдВ : рдпрджрд┐ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ v1 рдПрдХ рдЖрднрд╛рд╕реА рд░рдЬрд┐рд╕реНрдЯрд░ рдкрджрдирд╛рдо рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ)

invoke-vritual- рдЗрд╕ рдХреЗ рдореВрд▓реНрдп рдХреЛ v4 рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

const / 16

  %verify "executed" /* const/16 vAA, #+BBBB */ FETCH_S(r0, 1) @ r0<- ssssBBBB (sign-extended) mov r3, rINST, lsr #8 @ r3<- AA FETCH_ADVANCE_INST(2) @ advance rPC, load rINST SET_VREG(r0, r3) @ vAA<- r0 GET_INST_OPCODE(ip) @ extract opcode from rINST GOTO_OPCODE(ip) @ jump to next instruction 


рдпрд╣ рдХреЛрдб рджреВрд╕рд░реА рдмрд╛рдЗрдЯ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдорд╛рди рд▓рд┐рдЦрддрд╛ рд╣реИред рдпрд╣ (рдлрд┐рд░ рд╕реЗ) рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреЗрд╡рд▓ 2 рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╕реА рдХреЛрдб (рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг) рдХреЗ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдЦрдиреЗ / рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд╡рд░реНрдЪреБрдЕрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рдУрдкрдХреЛрдб рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрдХреНрд░рдордг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд, рдмрд╣реБрдд рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред

рдЖрд╣реНрд╡рд╛рди- рддрд░рд╣

2 рд╡рд░реНрдЪреБрдЕрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рднрд░реЗ рд╣реБрдП рд╣реИрдВ, рдЕрдм рдлрд╛рдЗрд▓ OP_INVOKE_VIRTUAL.S рдкрд░ рдЬрд╛рдПрдВред рдФрд░ рдЧрд╣рд░рд╛ рдЦреМрдл рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рддреБрд░рдВрдд рдЖрднрд╛рд╕реА (рдлрд╝рд╛рдЗрд▓ OP_INVOKE_VIRTUAL.S ) рдФрд░ рд╕реНрдерд┐рд░ ( OP_INVOKE_STATIC.S ) рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ ред

рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрдВрддрд░ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реИред DVmResolveMethod рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдФрд░ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ ".L $ {opcode} _continue:"ред

рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ DVmResolveMethod рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд░рдЬрд┐рд╕реНрдЯрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВред (рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдЕрдВрд╢):
- r0 <- method-> clazz
- r1 <- Priv *
- r2 <- METHOD_VIRTUAL рдпрд╛ METHOD_STATIC (рд╡рд┐рдзрд┐ рдкреНрд░рдХрд╛рд░)
- r3 <- рдЧреЛрдВрдж-> рд╡рд┐рдзрд┐

* рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрд╕рд╛рд░рдирд┐рд░реНрджреЗрд╢-рдкреНрд░рд╛рд░реВрдк Priv, рд╣рд╛рд▓рд╛рдВрдХрд┐ BBBB рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ

рдЕрдм рд╣рдо DVmResolveMethod рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ ред рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ 4 рддрд░реНрдХ (рдКрдкрд░ рджреЗрдЦреЗрдВ) рдмрд╣реБрдд рд╣реА рдХрдо рд╣реИ:

  Method* dvmResolveMethod(const ClassObject* referrer, u4 methodIdx, MethodType methodType) 


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдореЗрдердб рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ , рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрджреНрднреБрдд рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реБрдЪрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - nativeFuncред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рджреЗрд╢реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рднреА рд╣реЛрддрд╛ рд╣реИред

рдЕрдм рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдпрд╣ рд╡рд┐рдзрд┐ "рдХрд╣рд╛рдВ" рдЪрд▓ рд░рд╣реА рд╣реИред

OP_INVOKE_STATIC.S рдлрд╝рд╛рдЗрд▓ рдФрд░ OP_INVOKE_VIRTUAL.S рдореЗрдВ рджреЛрдиреЛрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдВрдд рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ bl common_invokeMethod${routine}ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдореБрдЦреНрдп рд╣реИрдВрдбрд▓рд░ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдб рдкрд╛рдж рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдлрд╛рдЗрд▓ ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рдХрд╛рд░рдг рдЙрдкрд╕рд░реНрдЧ "NoRange" рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ - %default { ... , "routine" : "NoRange" }

рд▓реЗрдХрд┐рди рдкрд╛рдж рд▓реЗрдЦ рджреЗрдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд░реНрде рд╣реИDalvikBridgeFuncрдореИрджрд╛рди рдореЗрдВ nativeMethod? рдпрджрд┐ рдЖрдк VM рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ DVmResolveNativeMethodnativeMethod рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ ред

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореВрд▓ рд╡рд┐рдзрд┐ (рд▓рд╛рдЗрдмреНрд░реЗрд░реА libNAME .so .so рдореЗрдВ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдЙрд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╢рдмреНрдж рд▓реЗрдиреЗ рджреЗрдВ, рдпрд╣ рдорд╛рдорд▓рд╛ рдПрдХрдорд╛рддреНрд░ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдорд╛рдирдирд╛ тАЛтАЛрдмреЗрд╣рддрд░ рд╣реИред

рдПрдХ рдХрдо рд╕рд╡рд╛рд▓, рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рджреЗрд╢реА рдкрджреНрдзрддрд┐ рдХреЛ рдХреМрди рдФрд░ рдХрд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╣рд╛рдВ рд╣реИред рд╕рдм рдХреЗ рдмрд╛рдж, рдкрд╛рдж рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓ рдХрднреА рд╕рдореАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рдереАред рд╕рд╛рдорд╛рдиреНрдп_invokeMethodNoRange

рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓реМрдЯ рд░рд╣рд╛ рд╣реИред рдЖрдк рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрддреНрддрд░ рднрд╛рдЧ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛, рдЬреЛ рдХрд┐ рдЖрд░рдкреАрдПрдл рдФрд░ рдЖрд░рдкреАрд╕реА рдЬреИрд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЙрдиреНрд╣реЗрдВ рднрд░рддрд╛ рд╣реИред

рдмрд╕ рдереЛрдбрд╝рд╛ рдзреИрд░реНрдп, рдФрд░ рд╡рд╣рд╛рдВ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, rINST, rPC, r2 рдХрд┐рд╕рд╕реЗ рднрд░рддрд╛ рд╣реИ? рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ- рдЙрджрд╛рд╣рд░рдг рдХреНрд╖реЗрддреНрд░, рдЕрд░реНрдерд╛рддред рдирд┐рд░реНрджреЗрд╢ (рдмрд╛рдЗрдЯрдХреЛрдб)ред рдФрд░ рдРрд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреНрд╖рдг рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рд▓реЗрдХрд┐рди рдореВрд▓ рд░реБрдЪрд┐ рдХрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рднреА рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдореВрд▓ рд╣реИ (рд╕рдВрдмрдВрдзрд┐рдд рдЭрдВрдбреЗ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рд╣реИ), рддреЛ рд╡рд╣реА рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдирд┐рдкрдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдиреНрдпрдерд╛, common_invokeMethodNoRange рдорд╛рдирдХ opcode рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рдерд╛, рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреЗрдХ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░ рдпрд╛ рдЧреИрд░-рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? footer.S, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХреБрдЫ рднреА рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдмрдВрдзрд┐рдд рдУрдкрдХреЛрдб рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЖрд╣реНрд╡рд╛рди-рдЖрднрд╛рд╕реА рдФрд░ рдЖрд╣реНрд╡рд╛рди-рд╕реНрдереИрддрд┐рдХ) рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕ рдкрд░ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕рдиреЗ рдХрд╣рд╛рдВ рдФрд░ рдХреНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдирд╣реАрдВ, рддреЛ рдЖрдЧреЗ рдХреА рд╕рдордЭ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдХрд╛рдо рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдерд╛ рдХрд┐ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ (рдореВрд▓ рд▓рдХреНрд╖реНрдп рджреЗрдЦреЗрдВ) рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫрд╛ рд╣реИред

рднрд╛рдЧ III рдкрд░рд┐рдгрд╛рдо


рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рдордиреЗ рдпрд╣ рднреА рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛рдВ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рдЖрдк рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ Dalvik VM рдХреЛрдб рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рднрд╛рдЧ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдЯрдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдСрдкрдХреЛрдб рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ, рдЗрд╕ рдмрд╛рддрдЪреАрдд рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдк рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдХреА рдорд╛рдирдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдПрдХ рдЕрд╕рдореНрдмрджреНрдз рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ рдЕрдкрдиреА рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдбрд╛рд▓рд╡рд┐рдХ рд╡реАрдПрдо рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд░рд┐рдгрд╛рдо


рдпрд╣рд╛рдБ рдореИрдВ рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕рд╕реЗ рдЕрдВрд╢ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЗрдЦ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк рдкрд╛рда рдореЗрдВ "рд░рд┐рдорд╛рд░реНрдХ" рд╢рдмреНрдж рднрд░ рдореЗрдВ рдЖрдП рд╣реЛрдВрдЧреЗ, рдпрд╣ рдПрдХ рдорд╕реМрджреЗ рдореЗрдВ рдкреВрд░реЗ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд▓рд╛рдпрдХ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕реЛрдЪ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреНрд░рд╢реНрди рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдЪреБрдирд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдХрдИ рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд╖рдп рдХреЗ рдкреНрд░рддрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИред

рдФрд░ рдЕрдм рдереЛрдбрд╝рд╛ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд╕рдВрдзрд╛рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рд╡реЗ рдЖрдкрдХреЛ рддреБрдЪреНрдЫ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХрдИ рдЪреАрдЬреЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдмрд╛рдж рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рд╣реИрдВ:

1. рд╡рд┐рдзрд┐ рдХреЙрд▓, рдЬреЛ рднреА рд╕реНрдерд┐рд░, рдЖрднрд╛рд╕реА (рдпрд╣ рддреНрд╡рд░рд┐рдд рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рднреА рд╣реИ), рдпрд╣ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╣реИ рдФрд░ рд╕рд░рд▓ рд╕реА (рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реА ++) рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Box2D рдХрд╛ рдПрдХ рд░реИрдкрд░ рд╣реИред рдпрджрд┐ рд╣рд░ рдмрд╛рд░ (рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ) рдЗрд╕ рдЖрд╡рд░рдг рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдХреНрдпрд╛ рд╡рд╕реНрддреБрдПрдВ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддреА рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди рдЙрдарддрд╛ рд╣реИ - рдХреНрдпреЛрдВ? рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рд╕реА рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рджреБрдирд┐рдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

2. opcodes рдХреЛрдбрд╛рдВрддрд░рдХ рдЖрд╡реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИрдВ, рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╡реЗ рдЬреЗрдПрдирдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реА рдореЗрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рд╡реЗ рджреЛ рдорд╛рдирджрдВрдбреЛрдВ рд╕реЗ рднреА рдмрджрддрд░ рд╣реИрдВ:

1) рд╡реЗ рдЕрдкрдиреА рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдореБрджреНрджреЛрдВ рдХреЛ рд╕реА рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдореЛрдбред рдЖрдк рдпрд╣ рднреА рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ opcode рд╕реА

2 рдореЗрдВ рдЧреИрд░-рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЧрддрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ ) рдкреНрд░рддреНрдпреЗрдХ opcode рдореЗрдВ рдЕрдЧрд▓рд╛ opcode рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рдмрд╛рдж, рдЕрдЧрд▓реЗ рдПрдХ рдХреЛ рд╕рдВрдХреНрд░рдордг, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдирд┐рд░реНрджреЗрд╢ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ blред

рдореИрдВрдиреЗ рдЕрдкрдиреА рд░реБрдЪрд┐ рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдореЗрд░реЗ рдЕрдиреБрдорд╛рди рдЬреНрдпрд╛рджрд╛рддрд░ рдиреНрдпрд╛рдпрд╕рдВрдЧрдд рдереЗред рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ рдФрд░ рдЖрдк рдореЗрд░реЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдЪрд▓реЗ рдЧрдПред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдФрд░ рдореБрдЦреНрдп рд░реБрдЪрд┐ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЕрдХреНрд╕рд░ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдмрд╣реБрдд рдмрд╛рд░ рд╕реНрдЯреАрд░рд┐рдпреЛрдЯрд╛рдЗрдк (рдЬрд╛рд╡рд╛ рдФрд░ рд╕реА / рд╕реА ++ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╣реАрдВ рднреА рдереЛрдбрд╝реА рд╕реА рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЙрдХреНрд╕ рд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ jni-tips.html рдлрд╝рд╛рдЗрд▓ рдФрд░ 2008 рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░ рдбреЙрдХреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдорд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рд╣реИ , рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╣рд╛рде рдЙрд╕ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗред

PS рдореИрдВ рддреБрд░рдВрдд рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдореБрдЭрд╕реЗ рдХреЛрдИ рдЧрд▓рддреА рд╣реБрдИ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ рдФрд░ рдлрд┐рд░ рдореИрдВ рддреБрд░рдВрдд рдмрджрд▓рд╛рд╡ рдХрд░реВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/In126356/


All Articles