브랜치 (컴퓨터 과학)
브랜치(branch) 또는 분기는 컴퓨터가 다른 명령 시퀀스의 실행을 시작하도록 지시함으로써 순서대로 명령의 기본 실행 지시로부터 벗어날 수 있게 하는 컴퓨터 프로그램의 한 명령이다.[a] 또, 브랜치(branch, branching, branched)는 브랜치 명령 실행의 결과로서 각기 다른 명령 시퀀스로의 실행을 전환하는 행위를 가리키는 용어이기도 하다. 브랜치 명령은 프로그램 루프와 조건문의 제어 흐름을 구현하기 위해 사용된다.(예: 특정 조건이 만족하는 경우에만 특정 명령 시퀀스를 실행하는 것)
브랜치 명령은 무조건 브랜치를 수행하는 비조건적 브랜치, 그리고 일부 조건에 따라 브랜치를 수행할 수도, 수행하지 않을 수도 있는 조건적 브랜치로 나눌 수 있다. 또, 새로운 명령 시퀀스의 주소("대상" 주소)를 어떻게 규정하는지에 따라 브랜치 명령은 일반적으로 "직접적", "간접적", "상대적"으로 분류되는데, 이는 명령에 대상 주소가 포함되어 있거나 대상 주소가 발견되는 장소(예: 레지스터 또는 메모리 위치)를 규정하거나, 현재 및 대상 주소 간 차이를 규정하는 것을 의미한다.[1]
구현
편집예
편집다음 표는 잘 알려진 일부 아키텍처에서 볼 수 있는 기계 레벨 branch 또는 jump 명령을 나열한 것이다:
조건 또는 결과 | x86 | PDP-11, VAX | ARM (부분적으로 6502) | 등식 |
---|---|---|---|---|
zero (implies equal for sub/cmp) | JZ; JNZ | BEQ; BNE | BEQ; BNE | zero; not zero |
negative (N), sign (S), or minus (M) | JS; JNS | BMI; BPL | BMI; BPL | negative; not negative |
arithmetic overflow (flag called O or V) | JO; JNO | BVS; BVC | BVS; BVC | overflow; not overflow |
carry (from add, cmp, shift, etc.) | JC; JNC | BCS; BCC | BCS; BCC | carry; not carry |
unsigned below (lower) | JB | BLO | BLO * | borrow |
unsigned below or equal (lower or same) | JBE | BLOS | BLS * | borrow or zero |
unsigned above or equal (higher or same) | JAE | BHIS | BHS * | not borrow |
unsigned above (higher) | JA | BHI | BHI * | not borrow and not zero |
signed less than | JL | BLT | BLT | sign≠overflow |
signed less or equal | JLE | BLE | BLE | (sign≠overflow) or zero |
signed greater or equal | JGE | BGE | BGE | sign=overflow |
signed greater than | JG | BGT | BGT | (sign=overflow) and not zero |
같이 보기
편집각주
편집- ↑ "A Survey of Techniques for Dynamic Branch Prediction", S. Mittal, CPE 2018
- 내용주
- ↑ At least conceptually; see 비순차적 명령어 처리.
외부 링크
편집- Free IA-32 and x86-64 documentation, provided by Intel
- The PDP-11 FAQ
- The ARM instruction set