[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. 문법

이번장에서는 특정한 기계에 의존하지 않는 문법을 설명한다. as 의 문법은 많은 다른 어셈블러들의 문법과 비슷하다. as는 Vax 의 비트필드를 어셈블 하지 못하는 것만 제외하면, BSD 4.2 assembler, except that as does not assemble Vax bit-fields.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 전처리

전처리기는 다음과 같은 작업을 한다.

It does not do macro processing, include file handling, or anything else you may get from your C compiler’s preprocessor. You can do include file processing with the .include directive (see section .include). You can use the GNU C compiler driver to get other “CPP” style preprocessing, by giving the input file a ‘.S’ suffix. See (gcc.info)Overall Options section ‘Options Controlling the Kind of Output’ in Using GNU CC.

공백문자들과, 주석, 문자 상수들의 지나친 사용은 전치리 되지 않은 입력 파 일의 일부로서 사용될 수 없다.

만일 입력파일의 첫줄이 #NO_APP 이거나 ‘-f’옵션으로 어셈블을 시도하였다 면 그 입력파일은 전처리 되지 않을 것이다. 이러한 입력파일에서, 파일의 일 부분은 전처리되어야 하는 텍스트 이전에 #APP 에 해당하는 라인을 놓음으로써 전처리 될 수 있으며, 그 다음에 #NO_APP 라인을 놓는다. 이러한 특징은 컴파일 러에서의 asm 구문을 제공할 목적으로 작성되었으며 컴파일러의 출력은 보통 전 처리 될 필요가 없다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 Whitespace

화이트 공백문자(whitespace)는 하나이상의 빈칸이거나 탭등이 될 수 있다. 화이트 문자는 심볼들을 분리하는 데 사용되며 사람들이 프로그램을 쉽게 읽을 수 있도록 만든다. 문자 상수가 아니라면(see section 문자 상수), 어떠한 화이트문자도 명백히 하나의 공백문자로 취급된다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.3 주석

주석을 as에게 번역하는 방법은 2가지가 있다. 양쪽다 주석은 하나의 공백문 자와 동일한다.

/*’에서 그 다음의 ‘*/’까지는 주석이다.

 
/*
  The only way to include a newline ('\n') in a comment
  is to use this sort of comment.
*/

/* This sort of comment does not nest. */

줄단위 주석을 시작하면 그 다음 뉴라인은 주석의 일부로 되고, 역시 무시된다. The line comment character is ‘;’ for the AMD 29K family; H8/300 ‘;’ for the H8/300 family;

H8/500 ‘!’ for the H8/500 family;

;’ for the HPPA; ‘#’ on the i960; ‘!’ for the Hitachi SH; ‘!’ on the SPARC; ‘|’ on the 680x0; ‘#’ on the Vax; ‘!’ for the Z8000; see 기계에 의존하는 것들.

어떤 기계에는 두가지의 다른 줄단위 주석에 사용되는 문자가 있다. 하나는 라 인에서 첫번째로 화이트문자가 아닌 것을 주석의 시작으로 하는 것이고, 다른 것 은 항상 해당하는 문자는 주석의 시작으로 간주하는 것이 있다.

과거의 어셈블러들과 호환성을 유지하려면 ‘#’으로 시작하는 라인에 대해 특별 히 해석되어야 한다. ‘#’다음에는 절대적인 표현(see section 표현)이 기대된다. 이것은 다음 라인의 논리적인 줄번호 정도가 될 것이다. Then a string (see section 문자열) is allowed: if present it is a new logical file name. The rest of the line, if any, should be whitespace.

만일 라인상에서 첫번째 비화이트 문자가 숫자가 아니라면 그 라인은 무시된다. (주석처럼.)

 
                          # This is an ordinary comment.
# 42-6 "new_file_name"    # New logical file name
                          # This is logical line # 36.

이러한 특징들을 반대하는 사람이 많은 데, 미래의 as 버젼에는 이런 것들이 사라질 것이다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.4 심볼들

심볼은 한글자 이상으로 대소문자와 십진수, ‘_.$’로 조합되는 것이다. 거의 대부분의 기계에서 여러분들은 $을 심볼이름으로 사용할 것이다(기계에 의존하는 것들에서 언급한 경우를 제외하고는). 심볼은 10진수로 시작하지 않는다. 심볼을 만들어 내는 방법은 많으며 길이의 제한도 없다. 심볼을 만들 재료인 글자 들도 충분하다. 심볼은 위에서 언급한 문자 집합에 포함되지 않는 문자들이나 파 일을 시작함으로써 심볼은 그 경계가 정해진다(소스 프로그램은 뉴라인으로 끝나 야 하며, 파일의 끝은 심볼을 경계짓는 것으로 될 수 없다). See section 심볼.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.5 구문

하나의 구문은 뉴라인문자(‘\n’)이나 라인 분리 역할을 하는 문자로 끝이 난다. (라인 분리자는 주석문자와 충돌하지 않는다면 보통 ‘;’이다. see section 기계에 의존하는 것들.) 뉴라인이나 분리 문자는 바로 앞의 구문의 일부분으로 취급된다. 문자 상수에 있어서 뉴라인과 분리자는 에외인데, 그럴 경우는 구문의 끝을 의 미하지 않는다.

구문을 기술하는 데 있어서 end-of-file로 끝을 맺는 다면 그것은 에러로 취급 된다. 입력파일에서 마지막 글자는 반드시 뉴라인 이어야 한다.

구문을 여러줄에 걸쳐 쓰야 할 경우에는 뉴라인의 앞에 \문자를 적어줄 수 있 다. as가 백슬래쉬와 함께 뉴라인을 읽는 다면 둘다 무시된다. 또한 심볼 이름을 지칭할 때에도 여러분들의 소스 프로그램에 별다른 영향을 주지 않으면서 백슬래 쉬와 함께 뉴라인을 심볼의 중간에 적을 수도 있다.

만일 텅빈 구문이 나온다면 그것은 화이트 문자를 포함할 것이므로 무시된다.

하나의 구문이 0개 이상의 라벨로 시작된다면, 구문의 종류가 무엇인지를 결정 하는 키 심볼(key symbol)이 선택적으로 따라 올 수 있다. 키 심볼은 나머지 구 문의 문법을 결정한다. 만일 심볼이 ‘.’로 시작한다면 그 구문은 어셈블리 지시 자임을 뜻하며, 일반적으로 어떤 컴퓨터에서도 괜찮은 것이 될 것이다. 심볼이 구문에서 하나의 문자로 시작한다면 그것은 어셈블리 언어에서의 명령어임을 뜻 한다. 다른 기계에서의 서로 다른 as 버젼은 다른 명령어들을 인식할 것이다. 이 것은 사실 심볼이 다른 컴퓨터의 어셈블리 언어상에서 다른 명령어로 묘사되는 것이다.

라벨은 바로 뒤에 콜론(:)이 따라오는 하나의 심볼이다. 화이트 문자는 라벨 의 앞이나 콜론의 뒤에 오는 것이 허용된다. 하지만 라벨의 심볼과 콜론 사이에 는 화이트문자가 올 수 없을 것이다. (see section 라벨)

For HPPA targets, labels need not be immediately followed by a colon, but the definition of a label must begin in column zero. This also implies that only one label may be defined on each line.

 
label:     .directive    followed by something
another_label:           # This is an empty statement.
           instruction   operand_1, operand_2, …

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6 상수

하나의 상수는 하나의 숫자이며, 이것은 문맥에 신경 쓸 필요없다. 예를 들면,

 
.byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
.ascii "Ring the bell\7"                  # A string constant.
.octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
.float 0f-314159265358979323846264338327\
95028841971.693993751E-40                 # - pi, a flonum.

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.1 문자 상수들

두종류의 문자상수들이 있다. 하나의 문자상수는 1바이트의 수치표현으로 될 것이다. 문자열 상수는 많은 바이트로 될 것이며 그들의 값은 산술 계산 표현 식에서 사용되지 않을 것이다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.1.1 문자열

문자열은 더블 쿼터(")사이에 쓰여진다. 문자열은 더블쿼터와 널 문자들을 포함할 것이다. 특별한 문자를 문자열 속으로 취하는 방법은 그 문자들앞에 백 슬래쉬 ‘\’ 문자를 붙임으로써 그것의 일상적인 의미로 부터 탈출시키는 것이다. 예를 들면, ‘\\’는 하나의 백슬래쉬를 의미한다. 처음의 \는 두번째 글자를 원래 글자의 뜻대로 해석하라는 것을 의미한다. (as가 두번째 \를 이스케이 프 문자로 인식하지 않도록 한다는 의미이다). 이스케이프 열의 완전한 리스트 를 아래에 보이겠다.

\b

Mnemonic for backspace; for ASCII this is octal code 010.

\f

Mnemonic for FormFeed; for ASCII this is octal code 014.

\n

Mnemonic for newline; for ASCII this is octal code 012.

\r

Mnemonic for carriage-Return; for ASCII this is octal code 015.

\t

Mnemonic for horizontal Tab; for ASCII this is octal code 011.

\ digit digit digit

An octal character code. The numeric code is 3 octal digits. For compatibility with other Unix systems, 8 and 9 are accepted as digits: for example, \008 has the value 010, and \009 the value 011.

\x hex-digits...

A hex character code. All trailing hex digits are combined. Either upper or lower case x works.

\\

Represents one ‘\’ character.

\"

Represents one ‘"’ character. Needed in strings to represent this character, because an unescaped ‘"’ would end the string.

\ anything-else

어떤 다른 문자가 \에 의해 이스케이프 된다면 경고가 출력될 것이고 ‘\’가 없다고 생각하고 어셈블을 계속한다. 만일 여러분들이 ’\’문자 다음의 따라오는 문자들의 글자해석을 확실히 원치 않을 목적으로 이 스케이프 시퀀스를 사용한다면 괜찮은 생각일지도 모른다. 그러나 as가 아무리 문자에 대한 다른 해석을 하지 않는다 할지라도, as는 당신의 코드가 틀렸다는 것을 알고 있으며 경고를 출력한다.

이스케이프 가능한 문자들과 어떤 이스케이프가 제공되는 지는 어셈블러 에 따라서 큰 차이가 있다. 우리가 생각하고 있는 이스케이프 시퀀스 열은 BSD 4.2 어셈블러가 인식하고, 보편적인 C 컴파일러가 인식하는 것으로 할 작정이다. 만일 미심쩍다면 이스케이프 시퀀스 열을 사용하지 말라.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.2 Number Constants


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.2.1 Characters

A single character may be written as a single quote immediately followed by that character. The same escapes apply to characters as to strings. So if you want to write the character backslash, you must write '\\ where the first \ escapes the second \. As you can see, the quote is an acute accent, not a grave accent. A newline immediately following an acute accent is taken as a literal character and does not count as the end of a statement. The value of a character constant in a numeric expression is the machine’s byte-wide code for that character. as assumes your character code is ASCII: 'A means 65, 'B means 66, and so on.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.3 숫자 상수들

as에는 대상 기계에서 그것들이 저장되는 방법에 따라 서로 다른 3가지 종류의 숫자가 있다. 정수(Integers)는 C 언어에서의 int와 같은 것이 될 것이다. Bignums는 정수이나, 그것은 32비트 보다 더 많이 저장된 다. Flonums는 부동소숫점 숫자이다. 아래에서 설명한다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.3.1 정수

이진수는 ‘0b’나 ‘0B’다음에 0개이상의 이진수 형식의 십진수 ‘01’이 뒤 따른다.

팔진수는 ‘0’다음에 0개이상의 팔진수로 될 수 있는 십진수(‘01234567’)가 뒤따른다.

십진수는 0이 아닌 숫자로 시작하며 0개이상의 십진수(‘0123456789’)가 뒤따른다.

16진수는 ‘0x’나 ‘0X’다음에 0개 이상의 16진수(‘0123456789abcdefABCDEF’)가 뒤따른다.

정수는 보통 값을 가진다. 음수를 표시하기 위해서는 ‘-’를 앞에 붙인다. (see section 접두사 조작자).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.3.2 Bignums

Bignums는 32비트 이상의 값을 가진다는 것을 제외하고는 정수(integer)와 같은 문법과 의미를 가진다. 이러한 구별은 어떤 곳에서는 bignums가 허용 되지 않으면서 정수는 허용되는 문제 때문에 생겼다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.3.3 Flonums

flonum은 부동 소숫점 숫자(floating point number)의 재연이다. 이 변환은 간접적으로 진행된다. text에서의 십진 부동 소수점 숫자는 as에 의해 일반적 인 바이너리 부동 소숫점 숫자로 충분한 정밀도를 가지면서 변환된다. 이 일 반적인 부동소숫점 숫자는 특정한 컴퓨터의 부동소숫점 포맷으로 as의 포팅에 의해 변환되는 것이다.

부동소숫점 숫자의 구성은 다음과 같다.

적어도 하나의 정수 부분이나 소수점 이하 부분이 있어야 한다. 부동 소숫점 숫자는 보통 십진수에 기초한다.

as는 정수(integers)를 사용하여 모든 처리를 한다. Flonums는 as가 돌아가는 어떠한 부동 소숫점 하드웨어에 독립적으로 계산된다.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Autobuild on October 25, 2015 using texi2html 1.82.