- nop
아무 것도 하지 않는 것입니다.
- move vA, vB
A: 목표 레지스터(4bits), B: 소스 레지스터(4bits)
A값에 B값을 넣어 주는 것입니다. (C언어로 A = B)
- move-result vAA
A: 목표 레지스터(8bits)
직전의 invoke-... 함수 호출의 결과를 A에 넣어 줍니다.
- return-void
아무 것도 없이 리턴합니다.
- return vAA
A: 목표 레지스터(8bits)
- return-object vAA
A: 목표 레지스터(8bits)
- const/4 vA, #+B
A: 목표 레지스터(4bits), B: 정수(4bits)
- const/16 vAA, #+BBBB
A: 목표 레지스터(8bits), B: 정수(16bits)
- const vAA, #+BBBBBBBB
A: 목표 레지스터(8bits), B: 임의의 4바이트 상수
- const-string vAA, string@BBBB
A: 목표 레지스터(8bits), B: 문자열
B에 지정된 문자열에 대한 참조를 A에 넣어 줍니다.
- array-length vA, vB
A: 목표 레지스터(4bits), B: 배열 참조 레지스터(4bits)
- new-array vA, vB, type@CCCC
A: 목표 레지스터(8bits), B: 사이즈 레지스터, C: 타입
무조건 A로 지정된 오프셋으로 분기합니다.
- if-.... vA, vB, +CCCC
A: 비교할 첫번째 레지스터(4bits), B: 비교할 두번째 레지스터(4bits)
- if-....z vAA, +BBBB
A: 비교할 레지스터(8bits), B: 분기할 오프셋(16bits), 주로 :cond_0
- invoke-.... {vC, vD, ...}, meth@BBBB
B: 참조할 함수, C,D,... 함수의 인수
B로 지정한 함수를 실행합니다.
결과는 위에서 설명한 move-result 로 받을 수 있습니다.
invoke-virtual, invoke-direct, invoke-static, ... 등이 있습니다.
- unop vA, vB
A: 목표 레지스터(4bits), B: 소스 레지스터(4bits)
소스 레지스터B로 단항연산을 수행 후 목표 레지스터A에 결과를 저장합니다.
neg-int, neg-long, neg-float, neg-double: A = -B
not-int, not-long: A = ~B
int-to-long: int64 A = (int64) B; int32 B;
int-to-float: float A = (float) B; int32 B;
int-to-double: double A = (double) B; int32 B;
- binop vAA, vBB, vCC
A: 목표 레지스터(8bits),
B: 첫번째 소스 레지스터(8bits), C: 번째 소스 레지스터(8bits)
두 소스 레지스터 B, C로 부터 지정된 바이너리 연산을 수행 후 목표 레지스터A에 결과를 저장합니다.
add-int, add-long, add-float, add-double: A = B + C
sub-int, sub-long, sub-float, sub-double: A = B - C
mul-int, mul-long, mul-float, mul-double: A = B * C
div-int, div-long, div-float, div-double: A = B / C
rem-int, rem-long, rem-float, rem-double: A = B % C (B/C의 나머지)
and-int, and-long: A = B & C (And)
or-int, or-long: A = B | C(Or)
xor-int, xor-long: A = B ^ C(Exclusive Or)
shl-int, shl-long: A = B << (C&0x1f) (Shift Left)
shr-int, shr-long: A = B >> (C&0x1f) (Shift Right)
ushr-int, ushr-long: A = B >> (C&0x1f) (Shift Right)(Unsigned)
- binop/2addr vA, vB
A: 목표+첫번째 소스 레지스터(4bits), B: 두번째 소스 레지스터(4bits)
소스 레지스터 A, B로 부터 지정된 바이너리 연산을 수행 후 첫번째 소스 레지스터A에 결과를 저장합니다.
add-int/2addr, add-long/2addr, add-float/2addr, add-double/2addr: A = A + B
sub-int/2addr, sub-long/2addr, sub-float/2addr, sub-double/2addr: A = A - B
mul-int/2addr, mul-long/2addr, mul-float/2addr, mul-double/2addr: A = A * B
div-int/2addr, div-long/2addr, div-float/2addr, div-double/2addr: A = A / B
rem-int/2addr, rem-long/2addr, rem-float/2addr, rem-double/2addr: A = A % B
and-int/2addr, and-long/2addr: A = A & B
or-int/2addr, or-long/2addr: A = A | B
xor-int/2addr, xor-long/2addr: A = A ^ B
shl-int/2addr, shl-long/2addr: A = A << (B&0x1f)
shr-int/2addr, shr-long/2addr: A = A >> (B&0x1f)
ushr-int/2addr, ushr-long/2addr: A = A >> (B&0x1f)(Unsigned)
- binop/lit16 vA, vB, #+CCCC
A: 목표 레지스터(4bits),
B: 소스 레지스터(4bits), C: 정수 상수(16bits)
소스 레지스터 B와 상수C로 부터 지정된 바이너리 연산을 수행 후 목표 레지스터A에 결과를 저장합니다.
- binop/lit8 vAA, vBB, #+CC
A: 목표 레지스터(8bits),
B: 소스 레지스터(8bits), C: 정수 상수(8bits)
소스 레지스터 B와 상수C로 부터 지정된 바이너리 연산을 수행 후 목표 레지스터A에 결과를 저장합니다.
'AOSP' 카테고리의 다른 글
안드로이드 시스템 폴더 권한 변경하기 (0) | 2015.09.01 |
---|---|
안드로이드 /proc 파일 시스템 (0) | 2015.07.28 |
adb push 입력시 permission denied 문제 (0) | 2015.04.09 |
fastboot 에 디바이스가 물리지 않을 때 (0) | 2015.03.09 |
개발폰별 파일들 (0) | 2015.03.05 |