본문 바로가기

Hardware/assembly language

3장(어셈블리 언어의 기초)

정수 상수(integer constant)

정수 상수는 선택사항인 부호, 한 자리 이상의 숫자와 선택사항인 숫자의 밑을 나타내는 [진수(radix)라고 부르는] 접미 문자로 구성된다.

[ { + | - } ] digits [radix]

진수가 없으면 정수 상수는 10진수로 간주한다.

문자로 시작되는 16진수 상수는 어셈블러가 식별자로 해석하지 않도록 맨 앞에 0을 넣어야 한다.

 

정수 수식

정수 수식은 정수 값과 산술 연산자를 포함하는 수학식이다.

책에는 우선순위 해서 나열 되어있지만 다 필요 없고 마지막에 나오는 이 말만 명심하자.

연산의 순서를 명확히 하기 위해서 수식에 괄호를 사용하라. 그러면 우선순위 규칙을 기억할 필요가 없다.

 

실수 상수

실수 상수는 10진 실수 또는 부호화된 실수로 나타낸다 10진 실수는 선택사항인 부호 정수 소수점 선택사항인 소수부분을 나타내는

정수와 선택사항인 지수로 구성된다.

 

문자열 상수

따옴표로 둘러싸인 문자들의 열이다.

‘ABC’ ‘X’ ” assembly language”

 

식별자

식별자는 프로그래머가 선택한 이름이다. 식별자는 변수,상수,프로시저 또는 코드레이블 등에 사용된다.식별자를 만들 때에 다음사항에 유의해야 한다

.

-1개에서 247개 사이의 문자를 사용할 수 있다.

-대문자와 소문자를 구분하지 않는다.

-첫번째 문자는 알파벳 문자,_,@,?또는$이어야 한다. 그 다음의 문자들은 숫자가 올 수 있다.

 

디렉티브

디렉티브는 어셈블리가 인식하여 그것에 따라서 동작하는, 소스 코드에서 포함된 명령어이다. 디렉티브는 실행시간에 실행되지 않는다.

디렉티브는 변수, 매크로, 프로시저를 정의 할 수 있다.

MASM에서 디렉티브는 대소문자를 겹치지 않는다. 어셈블러는 .data .DATA .Data를 같은 것으로 인식한다.

 

레이블

레이블은 명령어 또는 데이터의 위치를 표시하는 식별자이다. 명령어 바로 앞에 있는 레이블 그 명령어의 주소를 의미한다.

마찬가지로, 변수 바로 앞에 있는 레이블은 변수의 주소를 의미한다.

어셈블-링크 실행 사이클

Count DWORD 12345 : 변수 이름 자료정의 12345

DUP 연산자

DUP 연산자는 상수 수식을 반복 카운터로 사용하여 여러 개의 데이터를 위한 저장공간을 할당한다.(문자열이나 배열에 유용)

BYTE 20 DUP(0) ; 20Bytes, all equal to zero .data

BYTE 20 DUP(?) :20Bytes, uninitialized .bss

BYTE 4 DUP(“STACK”) ;stack * 4= 20bytes

 

자료형

구형 데이터 디렉티브

Little endian

Big endian

비초기화 데이터 선언

.DATA? 디렉티브는 비초기화 데이터를 선언한다.

초기화 되지 않은 큰 블록의 데이터를 정의할 대에 .DATA? 디렉티브는 컴파일된 프로그램의 크기를 줄여준다.

적합한 코드

.data

smallArray DWORD 10 DUP(0) ; 40Byte

.DATA?

bigArray DWORD 5000 DUP(?) ;20,000 bytes, not initaialized

/* .Data? 영역으로 인해 20,000bytes 는 컴파일 되지 않았다 */

비적합한 코드

 

.data

smallArray DWPRD 10 DUP(0) ;40Bytes

bigArray DWORD 5000 DUP(?) ; 20,000Bytes

/* 20,000Bytes 보다 큰 컴파일된 프로그램은 만든다 */

'Hardware > assembly language' 카테고리의 다른 글

5장(프로시저)  (0) 2019.12.22
4장(데이터 전송, 주소지정과 산술연산)  (0) 2019.12.22
2장(x86 프로세서 구조)  (0) 2019.12.22
1장(기본 개념)  (0) 2019.12.22