어셈블러란 무엇인가요?
어셈블러 프로그램은 연산 및 주소 지정 모드에 대한 니모닉과 구문의 조합을 숫자 등가물로 변환하여 객체 코드를 생성합니다. 이 표현에는 일반적으로 연산 코드("연산 코드")와 기타 제어 비트 및 데이터가 포함됩니다. 또한 어셈블러는 상수 표현식을 계산하고 메모리 위치 및 기타 엔티티의 심볼릭 이름을 확인합니다. 심볼릭 참조를 사용하는 것은 어셈블러의 핵심 기능으로, 프로그램 수정 후 지루한 계산과 수동 주소 업데이트를 줄여줍니다. 또한 대부분의 어셈블러에는 텍스트 치환을 수행하기 위한 매크로 기능이 포함되어 있습니다. 예를 들어, 일반적인 짧은 명령어 시퀀스를 서브루틴 대신 인라인으로 생성할 수 있습니다.

일부 어셈블러는 몇 가지 간단한 유형의 명령어 세트별 최적화를 수행할 수도 있습니다. 이에 대한 구체적인 예로 다양한 벤더의 유비쿼터스 x86 어셈블러를 들 수 있습니다. 점프 사이징이라고 불리는 대부분의 어셈블러는 요청에 따라 몇 번의 패스로 점프 명령어 교체(긴 점프를 짧은 점프 또는 상대 점프로 대체)를 수행할 수 있습니다. 일부 어셈블러는 CPU 파이프라인을 최대한 효율적으로 활용하기 위해 합리적인 명령어 스케줄링을 최적화하는 데 도움이 되는 RISC 아키텍처용 어셈블러와 같이 명령어의 간단한 재배열 또는 삽입을 수행할 수도 있습니다.
What is Assembler?
An assembler program creates object code by translating combinations of mnemonics and syntax for operations and addressing modes into their numerical equivalents. This representation typically includes an operation code ("opcode") as well as other control bits and data. The assembler also calculates constant expressions and resolves symbolic names for memory locations and other entities. The use of symbolic references is a key feature of assemblers, saving tedious calculations and manual address updates after program modifications. Most assemblers also include macro facilities for performing textual substitution – e.g., to generate common short sequences of instructions as inline, instead of called subroutines.

Some assemblers may also be able to perform some simple types of instruction set-specific optimizations. One concrete example of this may be the ubiquitous x86 assemblers from various vendors. Called jump-sizing, most of them are able to perform jump-instruction replacements (long jumps replaced by short or relative jumps) in any number of passes, on request. Others may even do simple rearrangement or insertion of instructions, such as some assemblers for RISC architectures that can help optimize a sensible instruction scheduling to exploit the CPU pipeline as efficiently as possible.