Java 바이트 코드 명령 목록
List of Java bytecode instructionsJava 바이트코드를 구성하는 명령 목록입니다. Java 바이트코드는 Java [1]가상 머신에 의해 최종적으로 실행되는 추상 머신 언어입니다.Java 바이트 코드는 Java Platform에서 실행되는 언어, 특히 Java 프로그래밍 언어에서 생성됩니다.
참조되는 모든 "값"은 Java 명령 집합에 따라 32비트 int를 참조합니다.
| 니모닉 | 오퍼코드 (16진수) | Opcode(2진수) | 기타 바이트 [카운트]:[오퍼랜드 라벨] | 스택 [전]→[후] | 묘사 |
|---|---|---|---|---|---|
| 알로드 | 32 | 0011 0010 | arrayref, 인덱스 → 값 | 배열에서 참조를 스택에 로드하다 | |
| 스토어 | 53 | 0101 0011 | arrayref, 인덱스, 값 → | 참조를 배열에 저장하다 | |
| aconst_internal. | 01 | 0000 0001 | →특수 | 늘 참조를 스택에 밀어넣다 | |
| 알로드 | 19 | 0001 1001 | 1: 인덱스 | → objectref | 로컬 변수 #index에서 스택에 참조를 로드합니다. |
| 알로드_0 | 2a | 0010 1010 | → objectref | 참조를 로컬 변수 0에서 스택으로 로드합니다. | |
| 알로드_1 | 2b | 0010 1011 | → objectref | 로컬 변수 1에서 스택에 참조를 로드합니다. | |
| 알로드_2 | 2c | 0010 1100 | → objectref | 참조를 로컬 변수 2에서 스택으로 로드합니다. | |
| 알로드_3 | 2D | 0010 1101 | → objectref | 로컬 변수 3에서 스택에 참조를 로드합니다. | |
| 아네와레이 | bd | 1011 1101 | 2: indexbyte1, indexbyte2 | 카운트 → arrayref | 클래스 참조 인덱스로 식별된 길이 수 및 구성요소 유형의 참조 배열을 새로 만듭니다(상수 풀의 indexbyte1 < <8 indexbyte2) |
| 회전하다 | b0 | 1011 0000 | objectref → [비어 있음] | 메서드에서 참조를 반환하다 | |
| 어레이 길이 | 있다 | 1011 1110 | arrayref → 길이 | 배열의 길이를 파악하다 | |
| 아스토어 | 3a | 0011 1010 | 1: 인덱스 | objectref → | 참조를 로컬 변수 #색인에 저장합니다. |
| 아스토어_0 | 4b | 0100 1011 | objectref → | 참조를 지역 변수 0에 저장 | |
| 아스토어_1 | 4c | 0100 1100 | objectref → | 참조를 지역 변수 1에 저장합니다. | |
| 아스토어_2 | 4D | 0100 1101 | objectref → | 참조를 로컬 변수 2에 저장합니다. | |
| 아스토어_3 | 4e | 0100 1110 | objectref → | 참조를 로컬 변수 3에 저장하다 | |
| 애스로 | bf | 1011 1111 | objectref → [ empty ], objectref | 에러 또는 예외를 발생시킵니다(스택의 나머지 부분은 클리어되고 슬로우 가능에 대한 참조만 남습니다). | |
| 키보드 | 33 | 0011 0011 | arrayref, 인덱스 → 값 | 배열에서 바이트 또는 부울 값 로드 | |
| 스토어 | 54 | 0101 0100 | arrayref, 인덱스, 값 → | 바이트 또는 부울 값을 배열에 저장하다 | |
| 바이푸시 | 10 | 0001 0000 | 1: 바이트 | → 값 | 바이트를 정수로 스택에 푸시하다 |
| 중단점 | ca | 1100 1010 | Java 디버거의 중단점용으로 예약되어 있으며 클래스 파일에 표시되지 않아야 합니다. | ||
| 열량 | 34 | 0011 0100 | arrayref, 인덱스 → 값 | 배열에서 문자를 로드하다 | |
| 캐스토어 | 55 | 0101 0101 | arrayref, 인덱스, 값 → | 문자를 배열에 저장하다 | |
| 체크캐스트 | c0 | 1100 0000 | 2: indexbyte1, indexbyte2 | objectref → objectref | objectref가 특정 유형이며 클래스 참조가 인덱스(indexbyte1 < 8 indexbyte2)의 상수 풀에 있는지 여부를 확인합니다. |
| d2f | 90 | 1001 0000 | 값 → 결과 | 더블을 플로트로 변환하다 | |
| d2i | 8e | 1000 1110 | 값 → 결과 | 더블을 int로 변환하다 | |
| d2l | 8층 | 1000 1111 | 값 → 결과 | 2루타를 롱으로 바꾸다 | |
| 아버지 | 63 | 0110 0011 | value1, value2 → 결과 | 더블을 두 개 추가하다 | |
| 달로드 | 31 | 0011 0001 | arrayref, 인덱스 → 값 | 배열에서 2루타를 날리다 | |
| 스토어 | 52 | 0101 0010 | arrayref, 인덱스, 값 → | 2루타를 배열에 저장하다 | |
| dcmpg | 98 | 1001 1000 | value1, value2 → 결과 | 2개의 복식 비교(NaN에서 1개) | |
| dcmpl | 97 | 1001 0111 | value1, value2 → 결과 | 2개의 복식 비교, NaN에서 -1 | |
| dconst_0 | 0e | 0000 1110 | → 0.0 | 상수 0.0(이중)을 스택에 밀어넣다 | |
| dconst_1 | 0f | 0000 1111 | → 1.0 | 1.0(이중)을 스택에 밀어넣다 | |
| ddiv | 6층 | 0110 1111 | value1, value2 → 결과 | 복식 두 개를 나누다 | |
| 로드 | 18 | 0001 1000 | 1: 인덱스 | → 값 | 로컬 변수 #index에서 이중 값을 로드합니다. |
| dload_0 | 26 | 0010 0110 | → 값 | 로컬 변수 0에서 더블을 로드하다 | |
| dload_1 | 27 | 0010 0111 | → 값 | 로컬 변수 1에서 더블을 로드하다 | |
| dload_2 | 28 | 0010 1000 | → 값 | 로컬 변수 2에서 더블을 로드하다 | |
| dload_3 | 29 | 0010 1001 | → 값 | 로컬 변수 3에서 더블을 로드하다 | |
| dmul | 6b | 0110 1011 | value1, value2 → 결과 | 두 배로 늘리다 | |
| 인식하다 | 77 | 0111 0111 | 값 → 결과 | 더블을 부정하다 | |
| 메모리 | 73 | 0111 0011 | value1, value2 → 결과 | 두 복식 사이의 나눗셈에서 나머지를 얻다 | |
| 되돌아가다 | af | 1010 1111 | 값 → [비어 있음] | 메서드에서 더블을 반환하다 | |
| 스토어 | 39 | 0011 1001 | 1: 인덱스 | 값 → | 로컬 변수 #인덱스에 이중 값을 저장합니다. |
| dstore_0 | 47 | 0100 0111 | 값 → | 지역 변수 0에 이중 저장 | |
| dstore_1 | 48 | 0100 1000 | 값 → | 지역 변수 1에 2배수를 저장하다 | |
| dstore_2 | 49 | 0100 1001 | 값 → | 지역 변수 2에 2배수를 저장하다 | |
| dstore_3 | 4a | 0100 1010 | 값 → | 지역 변수 3에 더블을 저장하다 | |
| 서브 | 67 | 0110 0111 | value1, value2 → 결과 | 2루타를 빼다 | |
| 이중 | 59 | 0101 1001 | 값 → 값, 값 | 스택 상단에 값을 복제하다 | |
| dup_x1 | 5a | 0101 1010 | value2, value1 → value1, value2, value1 | 맨 위에서 두 개의 값을 스택에 삽입합니다. value1과 value2는 double 또는 long 유형이어서는 안 됩니다. | |
| dup_x2 | 5b | 0101 1011 | value3, value2, value1 → value1, value3, value2, value1 | 최상위 값의 복사본을 스택2에 삽입(value2가 2배 또는 긴 경우 value3의 엔트리를 차지)하거나 3개의 값(value2가 2배 또는 긴 경우) | |
| 듀프2 | 5c | 0101 1100 | {value2, value1} → {value2, value1}, {value2, value1} | 상위 2개의 스택워드 중복(value1이 더블 또는 롱이 아닌 경우 2개의 값, value1이 더블 또는 롱인 경우 1개의 값) | |
| dup2_x1 | 5d | 0101 1101 | value3, {value2, value1} → {value2, value1}, value3, {value2, value1} | 두 단어를 중복하여 세 번째 단어 아래에 삽입(위 설명 참조) | |
| dup2_x2 | 5e | 0101 1110 | {value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1} | 두 단어를 복제하여 네 번째 단어 아래에 삽입하다 | |
| f2d | 8d | 1000 1101 | 값 → 결과 | 플로트를 더블로 변환하다 | |
| f2i | 8b | 1000 1011 | 값 → 결과 | 플로트를 int로 변환하다 | |
| f2l | 8c | 1000 1100 | 값 → 결과 | 플로트를 롱으로 변환하다 | |
| 패드 | 62 | 0110 0010 | value1, value2 → 결과 | 수레 두 개를 보태다 | |
| 팔로드 | 30 | 0011 0000 | arrayref, 인덱스 → 값 | 배열에서 플로트를 싣다 | |
| 패스트스토어 | 51 | 0101 0001 | arrayref, 인덱스, 값 → | 플로트를 배열에 저장하다 | |
| fcmpg | 96 | 1001 0110 | value1, value2 → 결과 | 2개의 플로트를 비교한다(NaN에 1개). | |
| fcmpl | 95 | 1001 0101 | value1, value2 → 결과 | 두 플로트를 비교한다(NaN에서 -1). | |
| fconst_0 | 0b | 0000 1011 | → 0.0f | 스택에 0.0f를 푸시하다 | |
| fconst_1 | 0c | 0000 1100 | → 1.0f | 스택에 1.0f 푸시 | |
| fconst_2 | 0d | 0000 1101 | → 2.0f | 스택 상에서 2.0f 푸시 | |
| fdiv | 6e | 0110 1110 | value1, value2 → 결과 | 수레 두 개를 나누다 | |
| 플로피 | 17 | 0001 0111 | 1: 인덱스 | → 값 | 로컬 변수 #index에서 float 값을 로드합니다. |
| 플로피_0 | 22 | 0010 0010 | → 값 | local 변수 0에서 float 값을 로드합니다. | |
| 플로피_1 | 23 | 0010 0011 | → 값 | 로컬 변수 1에서 플로트 값을 로드합니다. | |
| 플로피_2 | 24 | 0010 0100 | → 값 | 로컬 변수 2에서 플로트 값을 로드합니다. | |
| 플로피_3 | 25 | 0010 0101 | → 값 | 로컬 변수 3에서 플로트 값을 로드합니다. | |
| fmul | 6a | 0110 1010 | value1, value2 → 결과 | 플로트 두 개를 증식하다 | |
| 부정 | 76 | 0111 0110 | 값 → 결과 | 부동선을 무효로 하다. | |
| 프렘 | 72 | 0111 0010 | value1, value2 → 결과 | 두 플로트의 분할로 나머지를 얻다 | |
| 되돌아가다 | 아에 | 1010 1110 | 값 → [비어 있음] | 수레를 돌려주다. | |
| fstore | 38 | 0011 1000 | 1: 인덱스 | 값 → | float 값을 로컬 변수 #index에 저장합니다. |
| fstore_0 | 43 | 0100 0011 | 값 → | float 값을 지역 변수 0에 저장합니다. | |
| fstore_1 | 44 | 0100 0100 | 값 → | 플로트 값을 로컬 변수 1에 저장합니다. | |
| fstore_2 | 45 | 0100 0101 | 값 → | 플로트 값을 로컬 변수 2에 저장합니다. | |
| fstore_3 | 46 | 0100 0110 | 값 → | float 값을 지역 변수 3에 저장 | |
| fsub | 66 | 0110 0110 | value1, value2 → 결과 | 플로트 두 개를 빼다 | |
| 취득 필드 | b4 | 1011 0100 | 2: indexbyte1, indexbyte2 | objectref → 값 | objectref 필드 값을 가져옵니다.여기서 필드는 상수 풀인덱스(indexbyte1 <8 indexbyte2)의 필드 참조로 식별됩니다. |
| 정전기 | b2 | 1011 0010 | 2: indexbyte1, indexbyte2 | → 값 | 클래스의 정적 필드 값을 가져옵니다.여기서 필드는 상수 풀인덱스(indexbyte1 <8 indexbyte2)의 필드 참조로 식별됩니다. |
| 에 가다 | a7 | 1010 0111 | 2: branchbyte1, branchbyte2 | [변화 없음] | branchoffset의 다른 명령으로 이동합니다(부호 없는 바이트 branchbyte1 <8 branchbyte2에서 작성된 signed short). |
| goto_w | c8 | 1100 1000 | 4: branchbyte1, branchbyte2, branchbyte3, branchbyte4 | [변화 없음] | branchoffset의 다른 명령으로 이동합니다(부호 없는 바이트 branchbyte1 < 24 branchbyte2 < 16 branchbyte3 <8 branchbyte4 ) |
| i2b | 91 | 1001 0001 | 값 → 결과 | int를 바이트로 변환하다 | |
| i2c | 92 | 1001 0010 | 값 → 결과 | int를 문자로 변환하다 | |
| i2d | 87 | 1000 0111 | 값 → 결과 | int를 2배로 변환하다 | |
| i2f | 86 | 1000 0110 | 값 → 결과 | int를 플로트로 변환하다 | |
| i2l | 85 | 1000 0101 | 값 → 결과 | int를 long으로 변환하다 | |
| i2s | 93 | 1001 0011 | 값 → 결과 | int를 short로 변환하다 | |
| 추가 | 60 | 0110 0000 | value1, value2 → 결과 | 두 개의 int를 추가하다 | |
| 이루아도 | 2e | 0010 1110 | arrayref, 인덱스 → 값 | 배열에서 int를 로드하다 | |
| 그리고 | 7e | 0111 1110 | value1, value2 → 결과 | 두 정수에 대해 비트 단위로 AND를 수행합니다. | |
| 스토어 | 4층 | 0100 1111 | arrayref, 인덱스, 값 → | 배열에 int를 저장하다 | |
| iconst_m1 | 02 | 0000 0010 | → -1 | int 값 -1을 스택에 로드합니다. | |
| iconst_0 | 03 | 0000 0011 | → 0 | int 값 0을 스택에 로드합니다. | |
| 아이콘_1 | 04 | 0000 0100 | → 1 | int 값 1을 스택에 로드합니다. | |
| 아이콘_2 | 05 | 0000 0101 | → 2 | int 값 2를 스택에 로드하다 | |
| 아이콘_3 | 06 | 0000 0110 | → 3 | int 값 3을 스택에 로드하다 | |
| 아이콘_4 | 07 | 0000 0111 | → 4 | int 값 4를 스택에 로드합니다. | |
| 아이콘_5 | 08 | 0000 1000 | → 5 | int 값 5를 스택에 로드하다 | |
| 아이디브 | 6c | 0110 1100 | value1, value2 → 결과 | 두 정수를 나누다 | |
| if_acmpeq | a5 | 1010 0101 | 2: branchbyte1, branchbyte2 | value1, value2 → | 참조가 같을 경우 branch offset에서 branch to 명령(부호 없는 바이트 branchbyte1 <8 branchbyte2)으로 구성된 signed short) |
| if_acmpne | a6 | 1010 0110 | 2: branchbyte1, branchbyte2 | value1, value2 → | 참조가 동일하지 않은 경우 branchoffset에서 branch to 명령(부호 없는 바이트 branchbyte1 <8 branchbyte2)으로 구성된 signed short) |
| if_icmpeq | 9층 | 1001 1111 | 2: branchbyte1, branchbyte2 | value1, value2 → | int가 같을 경우 branch offset에서 branch-to-instruction(부호 없는 바이트 branchbyte1 <8 branchbyte2에서 작성된 signed short) |
| if_icmpge | a2 | 1010 0010 | 2: branchbyte1, branchbyte2 | value1, value2 → | value1이 value2보다 크거나 같으면 branchoffset에서 명령으로 분기합니다(부호 없는 바이트 branchbyte1 <8 branchbyte2에서 작성된 서명 쇼트). |
| if_icmpgt | a3 | 1010 0011 | 2: branchbyte1, branchbyte2 | value1, value2 → | value1이 value2보다 클 경우 branchoffset에서 명령으로 분기합니다(부호 없는 바이트 branchbyte1 <8 branchbyte2로 구성된 서명 쇼트). |
| if_icmple | a4 | 1010 0100 | 2: branchbyte1, branchbyte2 | value1, value2 → | value1이 value2보다 작거나 같으면 branchoffset(부호 없는 바이트 branchbyte1 <8 branchbyte2로 구성된 signed short)에서 명령으로 분기합니다. |
| if_icmplt | a1 | 1010 0001 | 2: branchbyte1, branchbyte2 | value1, value2 → | value1이 value2보다 작을 경우 branchoffset(부호 없는 바이트 branchbyte1 <8 branchbyte2로 구성된 signed short)에서 명령으로 분기합니다. |
| if_icmpne | a0 | 1010 0000 | 2: branchbyte1, branchbyte2 | value1, value2 → | int가 같지 않은 경우 branch offset에서 branch to 명령(부호 없는 바이트 branchbyte1 <8 branchbyte2)으로 구성된 signed short) |
| ifeq | 99 | 1001 1001 | 2: branchbyte1, branchbyte2 | 값 → | 값이 0인 경우 branchoffset(부호 없는 바이트 branchbyte1 <8 branchbyte2)에서 branch-offset 명령으로 분기합니다. |
| ifge | 9c | 1001 1100 | 2: branchbyte1, branchbyte2 | 값 → | 값이 0보다 크거나 같으면 branchoffset에서 branch to 명령으로 분기합니다(부호 없는 바이트 branchbyte1 <8 branchbyte2에서 작성된 signed short). |
| ifgt | 9d | 1001 1101 | 2: branchbyte1, branchbyte2 | 값 → | 값이 0보다 클 경우 branchoffset에서 명령으로 분기합니다(부호 없는 바이트 branchbyte1 <8 branchbyte2에서 작성된 서명 쇼트). |
| 아이플 | 9e | 1001 1110 | 2: branchbyte1, branchbyte2 | 값 → | 값이 0 이하일 경우 branchoffset에서 branch to 명령(부호 없는 바이트 branchbyte1 <8 branchbyte2)으로 구성된 signed short) |
| 이면 | 9b | 1001 1011 | 2: branchbyte1, branchbyte2 | 값 → | 값이 0보다 작을 경우 branch offset에서 branch to 명령(부호 없는 바이트 branchbyte1 <8 branchbyte2)으로 구성된 signed short) |
| 동작하고 있다 | 9a | 1001 1010 | 2: branchbyte1, branchbyte2 | 값 → | 값이 0이 아닌 경우 branchoffset에서 branch to 명령(부호 없는 바이트 branchbyte1 <8 branchbyte2)으로 구성된 signed short) |
| 무효인 경우 | c7 | 1100 0111 | 2: branchbyte1, branchbyte2 | 값 → | 값이 null이 아닌 경우 branchoffset(부호 없는 바이트 branchbyte1 <8 branchbyte2)에서 branch-offset 명령으로 분기합니다. |
| 무효 | c6 | 1100 0110 | 2: branchbyte1, branchbyte2 | 값 → | 값이 늘인 경우 branchoffset에서 명령으로 분기합니다(부호 없는 바이트 branchbyte1 <8 branchbyte2에서 작성된 서명 쇼트). |
| 인크 | 84 | 1000 0100 | 2: 인덱스, 고정 | [변화 없음] | 로컬 변수 #index를 부호 있는 바이트 상수별로 증가시킵니다. |
| 로드하다 | 15 | 0001 0101 | 1: 인덱스 | → 값 | 로컬 변수 #index에서 int 값을 로드합니다. |
| iload_0 | 1a | 0001 1010 | → 값 | 로컬 변수 0에서 int 값을 로드합니다. | |
| iload_1 | 1b | 0001 1011 | → 값 | 로컬 변수 1에서 int 값을 로드합니다. | |
| iload_2 | 1c | 0001 1100 | → 값 | 로컬 변수 2에서 int 값을 로드합니다. | |
| iload_3 | 1d | 0001 1101 | → 값 | 로컬 변수 3에서 int 값을 로드합니다. | |
| impdep1 | fe | 1111 1110 | 디버거 내의 구현 의존형 작업용으로 예약되어 있으며 클래스 파일에는 표시되지 않습니다. | ||
| impdep2 | ff | 1111 1111 | 디버거 내의 구현 의존형 작업용으로 예약되어 있으며 클래스 파일에는 표시되지 않습니다. | ||
| 이물 | 68 | 0110 1000 | value1, value2 → 결과 | 두 정수를 곱하다 | |
| 인식되지 않다 | 74 | 0111 0100 | 값 → 결과 | 부정하다 | |
| 인스턴스 | c1 | 1100 0001 | 2: indexbyte1, indexbyte2 | objectref → 결과 | objectref가 상수 풀(indexbyte1 <8 indexbyte2)의 클래스 참조 인덱스로 식별되는 특정 유형인지 여부를 판별합니다. |
| 발기된 | 바 | 1011 1010 | 4: indexbyte1, indexbyte2, 0, 0 | [param1, arg2, ...] → 결과 | 다이내믹 메서드를 호출하여 결과를 스택에 저장합니다(비활성일 수 있음).메서드는 상수 풀의 메서드레퍼런스인덱스(indexbyte1 <8 indexbyte2)에 의해 식별됩니다. |
| 호출 인터페이스 | b9 | 1011 1001 | 4: indexbyte1, indexbyte2, 카운트, 0 | objectref, [subject1, arg2, ...] → 결과 | objectref에서 인터페이스 메서드를 호출하여 결과를 스택에 저장합니다(비활성일 수 있음).인터페이스 메서드는 상수 풀의 메서드레퍼런스인덱스(indexbyte1 <8 indexbyte2)에 의해 식별됩니다. |
| 특별하다 | b7 | 1011 0111 | 2: indexbyte1, indexbyte2 | objectref, [subject1, arg2, ...] → 결과 | objectref에서 인스턴스 메서드를 호출하여 결과를 스택에 저장합니다(비활성일 수 있음). 메서드는 상수 풀의 메서드 참조 인덱스(indexbyte1 <8 indexbyte2)에 의해 식별됩니다. |
| 정체성이 없는 | b8 | 1011 1000 | 2: indexbyte1, indexbyte2 | [param1, arg2, ...] → 결과 | 스태틱 메서드를 호출하여 결과를 스택에 저장합니다(비활성일 수 있음). 메서드는 상수 풀의 메서드레퍼런스 인덱스에 의해 식별됩니다(indexbyte1 <8 indexbyte2). |
| 가상 호출 | b6 | 1011 0110 | 2: indexbyte1, indexbyte2 | objectref, [subject1, arg2, ...] → 결과 | objectref에서 가상 메서드를 호출하고 결과를 스택에 배치합니다(비활성일 수 있음). 메서드는 상수 풀의 메서드 참조 인덱스(indexbyte1 <8 indexbyte2)로 식별됩니다. |
| 또는 | 80 | 1000 0000 | value1, value2 → 결과 | 비트 단위 int OR | |
| 렘 | 70 | 0111 0000 | value1, value2 → 결과 | 논리적인 나머지 | |
| 되돌아가다 | ac | 1010 1100 | 값 → [비어 있음] | 메서드에서 정수를 반환하다 | |
| 이슐 | 78 | 0111 1000 | value1, value2 → 결과 | int shift 왼쪽 | |
| 인식하다 | 7a | 0111 1010 | value1, value2 → 결과 | int 산술 시프트 오른쪽 | |
| 스토어 | 36 | 0011 0110 | 1: 인덱스 | 값 → | 변수 #index에 int 값 저장 |
| istore_0 | 3b | 0011 1011 | 값 → | 변수 0에 int 값 저장 | |
| istore_1 | 3c | 0011 1100 | 값 → | 변수 1에 int 값 저장 | |
| istore_2 | 3D | 0011 1101 | 값 → | 변수 2에 int 값 저장 | |
| istore_3 | 3e | 0011 1110 | 값 → | 변수 3에 int 값 저장 | |
| 아이서브 | 64 | 0110 0100 | value1, value2 → 결과 | int 빼기 | |
| 플래시 | 7c | 0111 1100 | value1, value2 → 결과 | int 논리 이동권 | |
| 또는 | 82 | 1000 0010 | value1, value2 → 결과 | 내부 | |
| jsr† | a8 | 1010 1000 | 2: branchbyte1, branchbyte2 | → 주소 | branchoffset(부호 없는 바이트 branchbyte1 <8 branchbyte2에서 작성된 signed short)에서 서브루틴으로 점프하여 반환 주소를 스택에 배치합니다. |
| jsr_w† | c9 | 1100 1001 | 4: branchbyte1, branchbyte2, branchbyte3, branchbyte4 | → 주소 | branchoffset(부호 없는 바이트 branchbyte1 < 24 branchbyte2 < 16 branchbyte3 <8 branchbyte4 >에서 작성된 서명된 int)에서 서브루틴으로 점프하여 반환 주소를 스택에 배치합니다. |
| l2d | 8a | 1000 1010 | 값 → 결과 | 롱을 더블로 변환하다 | |
| l2f | 89 | 1000 1001 | 값 → 결과 | 롱을 플로트로 변환하다 | |
| l2i | 88 | 1000 1000 | 값 → 결과 | long을 int로 변환하다 | |
| 로드 | 61 | 0110 0001 | value1, value2 → 결과 | 롱 두 개를 더하다 | |
| 로드 | 2f | 0010 1111 | arrayref, 인덱스 → 값 | 배열에서 장척을 장전하다 | |
| 땅 | 7층 | 0111 1111 | value1, value2 → 결과 | 두 개의 긴 AND 비트 | |
| 라스토어 | 50 | 0101 0000 | arrayref, 인덱스, 값 → | 길게 늘어놓다 | |
| lcmp | 94 | 1001 0100 | value1, value2 → 결과 | 2개의 길이가 같으면 0을, value1이 value2보다 크면 1을, 그렇지 않으면 -1을 누릅니다. | |
| lconst_0 | 09 | 0000 1001 | → 0L | 0L(타입이 긴 숫자 0)을 스택에 푸시합니다. | |
| lconst_1 | 0a | 0000 1010 | → 1L | 1L(타입이 긴 번호)를 스택에 밀어넣습니다. | |
| ldc | 12 | 0001 0010 | 1: 인덱스 | → 값 | 상수 풀(String, int, float, Class, java.lang.invoke)에서 상수 #index를 푸시합니다.MethodType, java.lang.invoke.스택에 대한 MethodHandle 또는 동적으로 계산된 상수) |
| ldc_w | 13 | 0001 0011 | 2: indexbyte1, indexbyte2 | → 값 | 상수 풀(String, int, float, Class, java.lang.invoke)에서 상수 #index를 푸시합니다.MethodType, java.lang.invoke.스택에 대한 MethodHandle 또는 동적으로 계산된 상수(넓은 인덱스는 indexbyte1 <8 indexbyte2)로 구성됩니다. |
| ldc2_w | 14 | 0001 0100 | 2: indexbyte1, indexbyte2 | → 값 | 상수 풀(더블, 롱 또는 다이내믹하게 변환된 상수)에서 스택으로 상수 #인덱스를 푸시합니다(넓은 인덱스는 indexbyte1 <8 indexbyte2). |
| ldiv | 6d | 0110 1101 | value1, value2 → 결과 | 두 장으로 나누다 | |
| 로드 | 16 | 0001 0110 | 1: 인덱스 | → 값 | 로컬 변수 #index에서 긴 값을 로드합니다. |
| load_0 | 1e | 0001 1110 | → 값 | 로컬 변수 0에서 긴 값을 로드하다 | |
| load_1 | 1f | 0001 1111 | → 값 | 로컬 변수 1에서 긴 값을 로드하다 | |
| load_2 | 20 | 0010 0000 | → 값 | 로컬 변수 2에서 긴 값을 로드하다 | |
| load_3 | 21 | 0010 0001 | → 값 | 로컬 변수 3에서 긴 값을 로드하다 | |
| lmul | 69 | 0110 1001 | value1, value2 → 결과 | 롱을 두 번 곱하다 | |
| 인식하다 | 75 | 0111 0101 | 값 → 결과 | 오랫동안 부정하다. | |
| 룩스위치 | AB | 1010 1011 | 8+: <0~3바이트 패딩>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, match-pairs 쌍... | 키 → | 대상 주소는 키를 사용하여 테이블에서 검색되며 해당 주소의 명령에서 실행이 계속됩니다. |
| 로 | 81 | 1000 0001 | value1, value2 → 결과 | 두 개의 긴 비트의 OR | |
| 렘 | 71 | 0111 0001 | value1, value2 → 결과 | 두 장수의 나머지 분할 | |
| 되돌아가다 | 광고 | 1010 1101 | 값 → [비어 있음] | 장기간의 가치를 반환하다 | |
| lshl | 79 | 0111 1001 | value1, value2 → 결과 | 긴 값1의 왼쪽 비트 이동 int 값2 위치 | |
| shrr | 7b | 0111 1011 | value1, value2 → 결과 | 긴 값의 오른쪽 비트 이동1 int 값 2 위치 | |
| 스토어 | 37 | 0011 0111 | 1: 인덱스 | 값 → | 로컬 변수 #index에 긴 값을 저장합니다. |
| lstore_0 | 3f | 0011 1111 | 값 → | 로컬 변수 0에 긴 값을 저장합니다. | |
| lstore_1 | 40 | 0100 0000 | 값 → | 로컬 변수 1에 긴 값을 저장합니다. | |
| lstore_2 | 41 | 0100 0001 | 값 → | 로컬 변수 2에 긴 값을 저장합니다. | |
| lstore_3 | 42 | 0100 0010 | 값 → | 로컬 변수 3에 긴 값을 저장하다 | |
| 서브 | 65 | 0110 0101 | value1, value2 → 결과 | 롱 두 개를 빼다 | |
| 러시 | 7d | 0111 1101 | value1, value2 → 결과 | 긴 값의 비트 이동1을 int 값 2개 위치, 부호 없음 | |
| 표시하다 | 83 | 1000 0011 | value1, value2 → 결과 | 2개의 롱 비트 단위 XOR | |
| 모니터 | c2 | 1100 0010 | objectref → | 오브젝트의 monitor를 입력합니다("잠금 해제" – synchronized() 섹션의 시작). | |
| 모니터 렉시트 | c3 | 1100 0011 | objectref → | 오브젝트 종료 모니터("잠금 해제") – synchronized() 섹션의 끝) | |
| 복수 전쟁 | c5 | 1100 0101 | 3: 인덱스바이트1, 인덱스바이트2, 치수 | count1, [count2,...] → arrayref | 상수 풀 인덱스(indexbyte1 < 8 indexbyte2)에서 클래스 참조로 식별되는 유형의 치수 배열을 새로 만듭니다. 각 치수의 크기는 count1, [count2 등]으로 식별됩니다. |
| 신규 | bb | 1011 1011 | 2: indexbyte1, indexbyte2 | → objectref | 상수 풀 인덱스에서 클래스 참조로 식별되는 유형의 새 개체를 만듭니다(indexbyte1 < 8 indexbyte2). |
| 새로운 배열 | bc | 1011 1100 | 1: atype | 카운트 → arrayref | atype으로 식별되는 기본 유형의 카운트 요소를 사용하여 새 어레이 생성 |
| 하지 않다 | 00 | 0000 0000 | [변화 없음] | 수술을 하지 않다 | |
| 팝 | 57 | 0101 0111 | 값 → | 스택 상단의 값을 파기하다 | |
| 팝2 | 58 | 0101 1000 | {value2, value1} → | 스택의 상위 2개의 값(또는 더블 또는 롱의 경우 1개의 값)을 폐기합니다. | |
| 풋필드 | b5 | 1011 0101 | 2: indexbyte1, indexbyte2 | objectref, 값 → | objectref에서 필드를 값으로 설정합니다.여기서 필드는 상수 풀의 필드 참조 인덱스로 식별됩니다(indexbyte1 <8 indexbyte2). |
| 정전기 | b3 | 1011 0011 | 2: indexbyte1, indexbyte2 | 값 → | static 필드를 클래스의 값으로 설정합니다.여기서 필드는 상수 풀의 필드 참조 인덱스로 식별됩니다(indexbyte1 <8 indexbyte2). |
| 리트† | a9 | 1010 1001 | 1: 인덱스 | [변화 없음] | 로컬 변수 #index에서 가져온 주소에서 실행을 계속합니다(jsr과의 비대칭은 의도적임). |
| 돌아가다 | b1 | 1011 0001 | → [비어 있음] | 방법에서 무효를 반환하다 | |
| 살로드 | 35 | 0011 0101 | arrayref, 인덱스 → 값 | 어레이에서 로드 부족 | |
| 스토어 | 56 | 0101 0110 | arrayref, 인덱스, 값 → | 격납되어 있지 않다 | |
| 사이푸시 | 11 | 0001 0001 | 2: 바이트1, 바이트2 | → 값 | 단락을 정수로 스택에 밀어넣다 |
| 바꾸다 | 5f | 0101 1111 | value2, value1 → value1, value2 | 스택의 2개의 톱 워드를 스왑합니다(value1과 value2는 더블 또는 롱으로 할 수 없습니다). | |
| 테이블 스위치 | aa | 1010 1010 | 16+: [0~3바이트 패딩], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, highbyte2, highbyte3, highbyte4, jump offsets... | 인덱스 → | 테이블 내의 주소에서 오프셋 인덱스로 실행을 계속하다 |
| 넓은 | c4 | 1100 0100 | 3/5: opcode, indexbyte1, indexbyte2 또는 iinc, indexbyte1, indexbyte2, countbyte1, countbyte2 | [해당 지시사항과 동일] | execute opcode(opcode는 iload, fload, dload, istore, fstore, astore, lstore, dstore 또는 ret) 중 하나이지만 인덱스가 16비트이고 증분하는 상수가 16비트인 경우 execute iinc를 실행합니다. |
| (이름 없음) | cb-internal(cb-interface) | 이러한 값은 현재 opcode용으로 할당 해제되어 있으며 향후 사용을 위해 예약되어 있습니다. |
†Java 7(메이저 클래스 버전 51)[2]에서는 권장되지 않습니다.컴파일러에서 생성된 클래스 파일에는 표시되지 않습니다. ret명시적으로 권장되지 않지만, 이 기능이 없으면 무용지물입니다.jsr그리고.jsr_w동작 코드
「 」를 참조해 주세요.
- Jazelle DBX(Direct Bytecode eXecution).일부 ARM9 CPU 상에서 하드웨어에서 Java 바이트 코드를 실행하는 기능입니다.
- Common Intermediate Language(CIL; 공통 중간 언어).의 CLR에서 실행되는 동일한 바이트 코드 사양입니다.NET 프레임워크
레퍼런스
- ^ "The Java® Virtual Machine Specification – Java SE 12 Edition". Retrieved May 22, 2021.
- ^ "Chapter 4. The class File Format 4.9.1. Static Constraints". Retrieved May 22, 2021.