728x90
Symbolic Constants (기호 상수)
C나 C++을 쓴 사람들은 #define PI 3.14
와 같이 해본 걸 볼 수가 있을텐데, 이것은 우리는 Symbolic Constants라고 불렀다. (전처리 과정을 거쳤다.)
- 즉 기호상수는 indentifier(Symbol)을 정수 표현식 또는 일부 텍스트와 연결하여 생성된다.
- 별도의 저장공간을 예약하지 않는다.
- 프로그램을 스캔할 때 어셈블러만 사용한다.
- 런타임중에 변경할 수 없다.
1. 동일 서명 지시문 (Equal-Sign Directive)
- 심볼 이름이 정수 표현식에 연결된다.
사용 : name = expression
- 일반적으로 표현식은 32비트이 정수값이다.
- 프로그램이 어셈블 될 때 전처리 단계에서 모든 이름 항복이 표현식으로 대체된다.
이건 마이크로 소프트의 MASM 어셈블러가 제공하는 기능이다.!
- 사용 이유 가독성과 유지보수에 장점.
현재 위치 카운터($) Current Location Counter
- 가장 중요한 심볼중에 하나이다.
- 예를 들어서 다음 선언은 selfPtr이라는 변수를 선언하고 변수의 오프셋 값으로 초기화한다. :
selfPtr DWORD $
즉 자기 자신을 가리키는 주소를 의미하는 변수 선언한 것이다.
키보드 정의에 사용 예시 (읽기 편하고 유지보수에 좋다)
DUP연산자 사용
- 프로긂 유지보수를 간소화하기 위해 DUP에서 사용하는 카운터는 기호상수여야 한다.
재정의
- =으로 정의된 기호는 동일 프로그램내부에셔 재정의 할 수 있다.
- 심볼의 값 변경은 런타임 실행 순서와 관련이 없다.
2. 심볼릭 상수를 사용해서 배열이나 문자열의 크기 계산하기
일반적으로 배열을 어셈블리어에서는 다음과 같이 사용이된다.
다만 배열의 크기를 명시적으로 지정하면 나중에 배열의 요소를 삽입하고 제거할 때 오류가 발생할 수 있다.
- 더 나은 방법은 어셈블러가 값을 계산하도록 하는 방법이다.
- $ 연산자 (현재위치 카운터)는 현재 프로그램문과 관련된 오프셋을 반환한다.
- 따라서 위와 같이 사용가능 (다만 이게 바이트 단위기 때문에 이렇게 사용이 된것이다. 만약 크기가 바이트가 아니면 알아서 나눠서 길이 구하기)
- ListSize는 목록 바로 뒤에 와야한다.
단어 및 배열 등 단어
!!사이즈로 나눠주기 주의!!
3. EQU Directive(지시어)
- 기호 이름을 정수 표현식 또는 임의의 텍스트와 연결한다.
- 세가지 형식이 존재한다.
- = 과 다른점은 = 는 int형식만 가능했지만(문자열도 다 아스키라 가능) 이건 다른것도 가능하다.
- 첫번째 형식에서는 표현식은 유효한 정수 표현식이어야 한다.
- 두번째 형식에서 심볼은 = 또는 EQU로 이미 정의된 기존 심볼의 이름이다.
- 세번째 형식은 <>괄호 안에 텍스트를 넣는다.
- 정수로 사용되지 않는 값을 정의 할 때 유용하다.
예시
결과
- 재정의를 허용하지 않는다.
- =지시어는 재정의 할 수 있었지만 EQU로 정의된 심볼은 동일한 소스코드파일에서 다시 정의할 수 없다.
- 이것은 실수를 방지할 수 있다.
4. TEXTEQU Directive(지시어)
- 텍스트 매크로로 알려진 것을 생성한다.
- 세가지 형식이 있다.
- 첫 번째는 텍스트를 할당합니다.
- 두 번째는 기존 텍스트 매크로의 내용을 할당합니다.
- 세번째는 상수 정수 표현식을 할당합니다
- 재정의 가능하다.
Uploaded by N2T
728x90
'CSE > system programing' 카테고리의 다른 글
[시스템 프로그래밍 6 -1] 어셈블리어 더하기 빼기 연산과 그에 따른 flag 세팅 (0) | 2023.04.06 |
---|---|
[시스템 프로그래밍 5-3] 데이터 전송지침 , 피연산자 유형(Operand Types) (0) | 2023.03.30 |
[시스템 프로그래밍 5-1] 어셈블리 기본 데이터 타입 (0) | 2023.03.30 |
[시스템 프로그래밍 4강] 어셈블리 언어 문법 및 구성요소 (0) | 2023.03.30 |
[시스템 프로그래밍 3-6] 입출력 시스템 (0) | 2023.03.20 |