컴퓨터 지식 네트워크 - 컴퓨터 설치 - 어셈블리 언어의 일반적인 지침

어셈블리 언어의 일반적인 지침

마이크로 컨트롤러의 어셈블리 언어 어셈블리 오류 원인 분석

현재 어셈블리 언어 명령 형식에는 두 가지 표준이 있습니다. Windows의 어셈블리 언어는 기본적으로 다음과 같은 Intel 스타일 구문을 따릅니다. MASM, NASM, Unix/Linux에서의 어셈블리 언어는 기본적으로 AT&T 스타일 구문을 따릅니다.

1. 어셈블리 언어 문의 일반 형식

[이름[:]] 명령어 코드 [첫 번째 피연산자] ][, 두 번째 피연산자]; 참고

어셈블리 명령 코드의 피연산자 수는 0, 1 또는 2일 수 있습니다. 피연산자 수가 2인 경우 명령문에는 두 가지 형식이 있습니다. :

Windows에서 Intel 스타일 어셈블리 언어 명령문 형식은 다음과 같습니다.

[Name[:]] 명령어 코드 목적 피연산자 DST, 소스 피연산자 SRC 참고

Unix/Linux에서의 AT&T 스타일 어셈블리 언어 명령문 형식은 다음과 같습니다.

[이름[:]] 명령 코드 소스 피연산자 SRC, 대상 작업 번호 DST 설명

예: CYCLE; : ADD AX,02H; (AX) 어셈블리 언어 명령문 형식의 "name"은 모든 명령문에 필수는 아니지만 명령문에 "name"이 포함된 경우 대부분의 경우 "name"은 특정 명령문의 주소를 나타냅니다. 메모리의 저장 단위, 즉 "이름" 뒤에 오는 항목이 메모리에 저장되는 첫 번째 저장 단위의 주소(예를 들어 세그먼트 내의 "이름" 세그먼트 주소 및 오프셋 주소 포함) 위 명령어에서 CYCLE은 명령문의 이름이고 CYCLE은 뒤에 있는 기계 명령어 코드가 메모리에 저장되는 첫 번째 주소를 나타냅니다. 명령어 코드 사이의 구분 기호는 콜론 ":" 또는 공백 문자일 수 있습니다. " "; 콜론으로 구분된 이름은 레이블을 나타냅니다. 명령 코드에 여러 피연산자가 있는 경우 이름은 레이블을 나타낼 수도 있습니다. 쉼표 ","; 명령 코드와 피연산자는 공백으로 구분되어야 합니다. 어셈블리 언어 명령문의 주석은 세미콜론 ";"으로 시작해야 합니다.

2. /p>

1.

어셈블리 언어의 상수에는 정수와 문자열이 포함됩니다. 어셈블리 언어는 다음과 같은 접미사를 사용합니다. : 2진수; O: 8진수; D: 10진수; H: 16진수;

값 뒤에 접미사가 없으면 기본값은 10진수입니다.

A 문자열 상수는 작은따옴표('') 쌍으로 묶인 문자열입니다.

2. 표현식:

피연산자와 연산자로 구성됩니다.

산술 연산자: +, -, *, /, MOD 등; 모듈로 연산 MOD는 두 숫자를 나눈 후 나머지를 취하는 것입니다.

논리 연산 연산자: AND(논리적 AND), OR(논리적) OR), NOT(논리적 부정), XOR(논리적 배타적 OR);

p>

참고: 논리 연산자는 피연산자 부분에 나타날 때만 논리 연산 명령어의 명령어 코드가 될 수 있습니다. 명령어의 예:

ADD AL, 0CH ADD 0FH ;첫 번째 ADD는 명령어 코드이고, 두 번째 ADD는 연산자입니다.

관계 연산 연산자: EQ(동일) ), NE(같지 않음), LT(보다 작음), GT(보다 큼), LE(작거나 같음), GE(크거나 같음);

어셈블리 언어의 표현은 다음을 구성할 수 없습니다. 명령문은 단독이지만 명령문의 구성 요소만 될 수 있습니다.

참고: 명령문의 표현식 평가는 명령문이 실행될 때가 아니라 소스 프로그램이 어셈블링되고 링크될 때 완료됩니다. 따라서 명령문의 각 표현식 값은 어셈블리 또는 링크 시 결정되어야 합니다. 즉, 표현식의 각 식별자 값은 어셈블리 또는 링크 중에 결정되어야 합니다.

3 . 라벨:

라벨은 식별자로 표시되는 명령어의 이름으로 해당 명령어의 위치(주소)를 나타내는 데 사용됩니다.

라벨에는 세 가지 속성이 있습니다. 세그먼트 주소, 오프셋 주소 및 유형;

라벨의 세그먼트 주소 및 오프셋 주소 속성은 다음을 참조해야 합니다.

라벨에 해당하는 명령어가 위치한 세그먼트의 세그먼트 주소와 세그먼트 내 오프셋 주소;

라벨에는 NEAR와 FAR의 두 가지 유형이 있습니다. 라벨은 NEAR 유형으로 정의됩니다. 레이블은 세그먼트 내에서 사용되며 FAR 유형으로 정의하면 세그먼트 간에 레이블을 사용할 수 있습니다.

레이블 정의: 명령어 앞에 식별자와 콜론 ":"을 추가합니다. code;

예: START: PUSH DS

이 명령문에서 START는 우리가 정의한 레이블로 PUSH 명령의 주소를 나타냅니다. 따라서 레이블을 사용할 수 있습니다. 프로그램 전송 명령어의 피연산자(예: 리디렉션할 주소)로 레이블도 의사 명령어를 사용하여 정의할 수 있습니다. 예를 들어 LABEL 의사 명령어 및 프로세스 정의 의사 명령어를 사용하여 정의합니다.

4. 변수:

고급 언어처럼 모두가 상수는 아닙니다. 어셈블리 언어에도 자체 변수가 있습니다. 프로그램 실행 중에 변수 값이 변경될 수 있습니다. ;

A. 변수 정의: 어셈블리 언어에서 변수 정의는 의사 명령어를 통해 완료됩니다. ;변수 정의를 위한 의사 명령어 형식은 다음과 같습니다.

변수 이름 DB 표현식, 단일 바이트 변수라고도 하는 바이트 변수 정의(1개의 연속 바이트), DB-->BYTE

변수 이름 DW 표현식은 더블 바이트 변수라고도 하는 단어 변수를 정의합니다. (연속 2바이트), DW-->WORD

변수 이름 DD 표현식은 이중 단어 변수를 정의합니다. 4바이트 변수라고도 합니다(연속 4바이트), DD-->DWORD

변수 이름 DF 표현식은 6바이트 변수(6개의 연속 바이트)라고도 하는 6바이트 변수를 정의합니다. DF-->FWORD

변수 이름 DQ 표현식은 정의합니다. 8바이트 변수라고도 하는 긴 단어 변수(8연속 바이트), DQ-->QWORD

변수 이름 DT 표현 단면 변수 정의(10연속 바이트), DT--> TBYTE;

이 중 변수 이름은 합법적인 식별자로, 변수 이름 ":" 뒤에는 콜론을 추가할 수 없으며, 공백만 사용할 수 있습니다. 변수 이름은 필수가 아니며 선택 사항입니다. 변수 유형은 DB, DW, DD, DQ 및 DT 키워드로 정의됩니다.

변수 정의 문에서 "표현식"은 변수를 초기화하는 데 사용되며 다음과 같은 상황이 있을 수 있습니다.

(1) 하나 이상의 상수 또는 표현식. 여러 상수 또는 표현식인 경우 마침표는 DATA1--DATA4와 같이 구분되어야 합니다.

(2) . 작은따옴표가 있는 문자열;

바이트형(DB) 변수의 경우 각 변수의 크기는 1바이트입니다. 각 바이트는 1문자의 ASCII 코드 값을 저장합니다. . 전체 문자열은 동일한 작은따옴표 쌍 안에 제공될 수 있습니다. 이는 DATA5와 같은 문자 배열을 정의하는 것과 같습니다.

단어 유형(DW) 변수의 경우 각 변수의 크기는 2입니다. 각 변수의 값은 2자를 초과할 수 없습니다. 2자이면 상위 비트가 상위 바이트에 저장되고 1자이면 하위 비트가 저장된다는 규칙을 따릅니다. , 문자의 ASCII 코드 값은 하위 바이트에 저장되고 상위 바이트는 00입니다. 예를 들어 DATA6;

더블 워드형(DD) 변수의 경우 각 변수의 크기는 4입니다. 각 변수의 값은 2자를 초과할 수 없습니다. 2자인 경우에도 하위 바이트에 저장되지만 2자의 값이 저장되는 규칙을 따릅니다. 더블워드 변수의 하위 2바이트에, 1문자의 값이 더블워드 변수의 하위 1바이트에 저장됩니다. ;

롱 워드형(DQ) 변수의 경우 크기는 다음과 같습니다. 각 변수는 8바이트이고, 각 변수의 값은 2자를 초과할 수 없습니다. 2자이면 상위 비트와 하위 바이트 규칙에 따라 하위 바이트에 저장됩니다. 2개의 문자는 Long Word 변수의 하위 2바이트에 저장되고, 1개의 문자의 값은 Long Word 변수의 하위 1바이트에 저장됩니다.

(3) 질문. "?" 표시는 변수의 값이 불확실함을 나타냅니다. 즉, 변수가 나타내는 메모리 단위의 내용이 불확실합니다. 즉, 표현식이 물음표인 경우 새 값이 저장되지 않습니다. 변수에 해당하는 메모리 영역이지만 해당 저장 공간은 DATA7, DATA8

>

(4). 이때 형식은 반복횟수 DUP(표현식)이며, 반복모드는 해당 변수에 해당하는 메모리 영역에 반복적으로 저장할 수 있음을 나타낸다. 반복 횟수는 의사 명령어에 의해 결정됩니다. 이는 DATA9, DATA10과 같은 배열을 정의하는 것과 같습니다.

변수 정의 예:

DATA1 DB 20H; -바이트변수

DATA2 DW 0204H, 1000H ;2바이트 변수

DATA3 DB (-1*3),(15/3) ;1바이트 변수

DATA4 DD 123456H ;4바이트 변수

DATA5 DB '0123' ;문자 배열과 동일한 문자열 변수

DATA6 DW 'AB','C',' D' ;문자열 배열과 동일한 문자열 변수 ;

DATA7 DB ;1바이트 변수, 초기화되지 않음

DATA8 DD ;4바이트 변수, 초기화되지 않음

p>

DATA9 DB 5 DUP(0 ); 5개의 0으로 초기화된 1바이트 변수, 5개의 DB 유형 요소가 있는 배열과 동일

DATA10 DW 3 DUP(?); 초기화되지 않은 바이트 변수, 배열과 동일 DW형 요소가 3개 있는 배열

변수 정의문의 의사 명령어 기능은 표현식의 값을 메모리에 순차적으로 저장하는 것입니다. 변수 이름에 해당하는 주소부터 시작하는 영역입니다. 표현식의 각 값 항목 값이 차지하는 메모리 바이트 수는 변수 유형에 해당합니다.

요약: 실제로 변수의 변수 이름입니다. 메모리 세그먼트의 변수에 해당하는 메모리 영역의 유효 주소(오프셋)를 나타냅니다. 높은 주소는 주소 값이 상대적으로 크다는 것을 의미하며, 낮은 주소는 주소 값이 상대적으로 작다는 것을 의미합니다. 주소는 상대적입니다.

5. 변수의 속성:

(1). 속성 소개

변수에는 다음과 같은 속성이 있습니다.

A.세그먼트 주소(SEG): 변수가 위치한 세그먼트의 세그먼트 주소

B.오프셋 주소(OFFSET): 변수가 위치한 세그먼트 내의 오프셋 주소

C. 유형(TYPE): 변수의 유형은 각 변수가 차지하는 메모리 바이트 수를 정의합니다. DB, DW, DD, DQ, DT. 유형은 각각 1, 2, 4, 8, 10이며 일반적으로 DB, DW, DD 유형에 정의된 변수를 각각 BYTE 유형, DWORD 유형이라고 합니다.

유형 일반적으로 사용되는 식별자 값 목록:

식별자 유형 바이트 변수 단어 변수 이중 단어 변수 근처 레이블 NEAR 먼 레이블 FAR

TYPE의 값은 1 2 4 -1 -2입니다.

D. 길이(LENGTH): 변수가 정의된 경우 DUP 연산자가 포함된 변수 정의에서 변수 이름으로 정의된 변수의 개수는 변수 이름으로 정의된 변수의 개수입니다. 정의 형식의 반복; 기타 다양한 변수 정의에서 각 변수 이름으로 정의된 변수 수는 1입니다.

E. 크기(SIZE ): 변수 정의문에서 총 바이트 수입니다. 동일한 변수 이름에 할당된 모든 변수이며 그 값은 변수의 유형과 길이입니다.

그 중 세그먼트 주소와 오프셋 주소 및 유형 속성이 변수의 주요 속성인 반면, 길이는 크기 속성은 변수의 보조 속성입니다.

(2) 속성 연산자:

연산자 표현 의미

SEG SEG 변수 이름 또는 레이블은 세그먼트를 검색합니다. 변수 이름이나 라벨이 위치한 세그먼트의 주소

OFFSET OFFSET 변수 이름이나 라벨은 변수 이름이나 라벨이 위치한 세그먼트의 오프셋 주소를 검색합니다.

TYPE TYPE 변수 이름 또는 레이블은 변수 이름 또는 레이블의 유형(변수가 차지하는 바이트 수)을 검색합니다.

LENGTH LENGTH 변수 이름은 변수의 길이를 검색합니다.

SIZE SIZE 변수 이름 변수의 크기 가져오기

이러한 연산자는 단독으로 명령문을 구성할 수 없으며 표현식의 구성 요소로만 사용할 수 있으며 표현식 평가도 어셈블리 프로세스 중에 완료됩니다.

6 .force 유형

변환 연산자 PTR

형식: 데이터 유형 PTR 주소 표현

형식의 "데이터 유형"은 BYTE, WORD, DWORD, NEAR 및 FAR일 수 있습니다. 변수 유형, 후자의 두 유형은 레이블 유형입니다. 형식의 표현식은 변수, 레이블 및 기타 주소 표현식일 수 있습니다.

PTR 연산자의 기능은 정의된 변수 또는 유형을 재정의하는 것입니다. 레이블의 범위는 현재 문에만 있습니다. 예:

DATA1 DW 02H

MOV BYTE PTR DATA1,AL

이 명령어에서는 다음과 같습니다. DATA1 유형을 BYTE 유형으로 변환한 다음 AL의 내용을 DATA1의 가장 낮은 바이트에 저장합니다. 범위는 이 MOV 문에만 있습니다. 이 문 이후의 DATA1은 여전히 ​​DW 유형입니다. 즉, 원래 유형입니다. DATA1은 수정되지 않았습니다.

上篇: 도움말, 왜 노트북을 켤 때마다 고급 시작 옵션이 표시되나요? 下篇: 결전 식신 영황슈퍼스타 광저우 콘서트 백도운 (셰팅펑 좋아하는 아기들이 빨리 와요)
관련 내용