어셈블리 언어 명령 구조에는 다음이 포함됩니다. 어셈블리 언어 수준 프로그래밍의 명령 구조. 어셈블리 언어의 데이터 형식과 명령 구조

어셈블리어 명령어(강의)

강의 계획

1. 주요 운영 그룹.

펜티엄.

1. 주요 업무그룹

마이크로프로세서는 다음과 같은 주요 작업 그룹을 구현하는 일련의 명령을 실행합니다.

전달 작업

산술 연산,

논리 연산

교대근무

비교 및 테스트 작업

비트 연산

프로그램 관리 운영

프로세서 제어 작업.

2. 프로세서 명령의 니모닉 코드 펜티엄

명령을 설명할 때 일반적으로 해당 니모닉 지정(니모닉 코드)이 사용되며, 이는 어셈블리 언어로 프로그래밍할 때 명령을 지정하는 데 사용됩니다. 어셈블러 버전에 따라 일부 명령의 니모닉 코드가 다를 수 있습니다. 예를 들어, 서브루틴을 호출하는 명령의 경우 니모닉 코드가 사용됩니다.부르다 또는 JSR (“다음으로 점프하세요. 서브루틴"). 그러나 주요 유형의 마이크로프로세서에 대한 대부분의 명령에 대한 니모닉 코드는 수행되는 작업을 정의하는 해당 영어 단어의 약어이기 때문에 동일하거나 약간 다릅니다. 프로세서에 채택된 명령 니모닉 코드를 살펴보겠습니다.펜티엄.

명령을 전달합니다. 이 그룹의 주요 팀은 팀입니다.MOV , 두 레지스터 간 또는 레지스터와 메모리 셀 간 데이터 전송을 제공합니다. 일부 마이크로프로세서는 메모리에서 여러 레지스터 내용의 대량 전송뿐만 아니라 두 메모리 셀 간의 전송을 구현합니다. 예를 들어, 68 제품군의 마이크로프로세서모토로라 xxx 명령을 실행하다이동하다 , 한 메모리 셀에서 다른 메모리 셀로의 전송을 제공하고 명령무브엠 , 지정된 레지스터 세트(최대 16개 레지스터)의 내용을 메모리에 쓰거나 메모리에서 로드합니다. 팀XCHG 두 개의 프로세서 레지스터 또는 레지스터와 메모리 셀의 내용을 상호 교환합니다.

입력 명령 안에 그리고 출력 밖으로 프로세서 레지스터에서 외부 장치로 데이터를 전송하거나 외부 장치에서 레지스터로 데이터를 수신하는 것을 구현합니다. 데이터가 전송되는 인터페이스 장치(입/출력 포트)의 번호를 지정하는 명령입니다. 많은 마이크로프로세서에는 외부 장치에 액세스하기 위한 특별한 명령이 없습니다. 이 경우 시스템 내 데이터의 입출력은 다음과 같은 명령어를 이용하여 수행된다.MOV , 필요한 인터페이스 장치의 주소를 지정합니다. 따라서 외부 장치는 메모리 셀로 어드레싱되며, 시스템에 연결된 인터페이스 장치(포트)의 주소가 위치하는 주소 공간에는 특정 섹션이 할당된다.

산술 연산 명령. 이 그룹의 주요 명령은 덧셈, 뺄셈, 곱셈, 나눗셈이며 다양한 옵션이 있습니다. 추가 명령 추가하다 그리고 빼기 보결 해당 작업을 수행하십시오.두 개의 레지스터, 즉 레지스터와 메모리 위치에 의해 소유되거나 직접 피연산자를 사용하여 소유됩니다. 팀 기원 후 , S.B. 속성 값을 고려하여 덧셈과 뺄셈을 수행합니다., 이전 작업 수행 중 전송을 구성할 때 설정합니다. 이러한 명령을 사용하면 비트 수가 프로세서 용량을 초과하는 피연산자의 순차적 추가가 구현됩니다. 팀 N.E.G. 피연산자의 부호를 변경하여 2의 보수로 변환합니다.

곱셈과 나눗셈 연산은 부호 있는 숫자(명령어)에 대해 수행될 수 있습니다. 멀, DIV ) 또는 서명되지 않은 (명령 MUL, DIV ). 피연산자 중 하나는 항상 레지스터에 있고, 두 번째 피연산자는 레지스터, 메모리 셀에 있거나 직접 피연산자일 수 있습니다. 작업 결과는 레지스터에 있습니다. 곱할 때 (명령 , 이물 ) 결과는 두 개의 레지스터가 사용되는 더블 비트입니다. 나눌 때 (명령DIV , IDIV ) 피제수로 이중 비트 피연산자가 사용되어 두 개의 레지스터에 배치되고 결과적으로 몫과 나머지가 두 개의 레지스터에 기록됩니다.

논리 연산 명령 . 거의 모든 마이크로프로세서는 명령을 사용하여 동일한 피연산자 비트에 대해 수행되는 논리 연산 AND, OR, Exclusive OR을 수행합니다. 그리고, 또는, 엑스 또는 . 연산은 두 레지스터, 즉 레지스터와 메모리 위치의 내용에 대해 수행되거나 직접 피연산자를 사용하여 수행됩니다. 팀 아니다 피연산자의 각 비트 값을 반전시킵니다.

시프트 명령. 마이크로프로세서는 주소가 지정된 피연산자의 산술, 논리 및 순환 시프트를 하나 이상의 비트로 수행합니다. 이동될 피연산자는 레지스터나 메모리 위치에 있을 수 있으며, 이동 비트 수는 명령어에 포함된 직접 피연산자에 의해 지정되거나 지정된 레지스터의 내용에 의해 결정됩니다. 환승 표시는 일반적으로 교대 구현에 포함됩니다.상태 레지스터(S.R.또는 이플래그)에는 레지스터나 메모리 셀에서 제거된 피연산자의 마지막 비트가 포함되어 있습니다.

비교 및 테스트 명령 . 피연산자 비교는 일반적으로 다음 명령을 사용하여 수행됩니다.CMP , 피연산자를 빼고 특성 값을 설정합니다. N, Z, V, C얻은 결과에 따라 상태 레지스터에 기록됩니다. 이 경우 뺄셈 결과는 저장되지 않으며 피연산자의 값도 변경되지 않습니다. 획득된 특징값에 대한 후속 분석을 통해 상대값(>,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

일부 마이크로프로세서는 테스트 명령을 실행합니다. TST , 이는 비교 명령어의 단일 피연산자 버전입니다. 이 명령이 실행되면 부호가 설정됩니다. 엔,지주소가 지정된 피연산자의 부호와 값(0이 아니거나 같음)에 따라 결정됩니다.

비트 연산 지침 . 이 명령은 속성의 값을 설정합니다.테스트 중인 비트 값에 따라 상태 레지스터에 주소가 지정된 피연산자에서. 일부 마이크로프로세서에서는 비트 테스트 결과에 따라 속성이 설정됩니다.. 테스트 비트 수N명령에 지정된 레지스터의 내용이나 직접 피연산자에 의해 지정됩니다.

이 그룹의 명령은 테스트 중인 비트를 변경하기 위한 다양한 옵션을 구현합니다. 비티 이 비트의 값을 변경하지 않고 유지합니다.명령 에스 사후 테스트에서 값을 설정합니다. =1 및 명령 - 의미 =0.팀 테스트 후 비트 bn의 값을 반전시킵니다.

프로그램 관리 운영. 프로그램을 제어하기 위해 다음과 같은 많은 명령이 사용됩니다.

- 무조건적인 제어 전송 명령;

- 조건부 점프 명령;

- 프로그램 주기를 구성하는 팀;

- 인터럽트 명령;

- 속성을 변경하는 명령입니다.

무조건적인 제어권 이전은 명령에 의해 수행됩니다.JMP , 프로그램 카운터에 로드됩니다.PC실행할 다음 명령의 주소인 새 콘텐츠입니다. 이 주소는 명령에 직접 지정되거나JMP (직접 주소 지정) 또는 현재 내용의 합으로 계산됩니다.PC부호 있는 숫자(상대 주소 지정)인 명령에 지정된 오프셋입니다. 왜냐하면PC다음 프로그램 명령의 주소를 포함하며, 후자의 방법은 점프 주소, 지정된 바이트 수만큼 다음 주소에 대한 오프셋을 지정합니다. 양수 오프셋을 사용하면 프로그램의 후속 명령으로 전환되고 음수 오프셋을 사용하면 이전 명령으로 전환됩니다.

서브루틴은 명령을 사용하여 무조건적으로 제어를 전송함으로써 호출되기도 합니다.부르다 (또는 JSR ). 그러나 이 경우에는 로드하기 전에PC 서브루틴의 첫 번째 명령 주소를 지정하는 새 내용이 있는 경우, 서브루틴 실행 후 메인 프로그램(또는 이전 명령)으로 복귀하려면 현재 값(다음 명령의 주소)을 저장해야 합니다. 서브루틴을 중첩할 때 서브루틴). 조건부 점프 명령(프로그램 분기)이 로드됩니다.PC일반적으로 상태 레지스터의 다양한 속성의 현재 값에 따라 설정되는 특정 조건이 충족되면 새로운 콘텐츠가 생성됩니다. 조건이 충족되지 않으면 다음 프로그램 명령이 실행됩니다.

기능 제어 명령은 기능이 저장된 상태 레지스터의 내용을 읽고 개별 기능의 값을 변경하는 쓰기 기능을 제공합니다. 예를 들어 펜티엄 프로세서는 다음 명령을 구현합니다. LAHF 그리고 SAHF , 상태 레지스터에서 부호가 포함된 하위 바이트를 로드합니다. EFLAG레지스터의 하위 바이트로 EAX그리고 낮은 바이트를 패딩 이플래그등록부에서 EA엑스.. 팀 CLC, STC전송 기호 CF=0, CF=1의 값 설정을 수행하고 명령을 수행합니다. CMC이 속성의 값이 반전됩니다.속성은 조건부 전환 중 프로그램 실행 흐름을 결정하므로 속성 변경 명령은 일반적으로 프로그램을 제어하는 ​​데 사용됩니다.

프로세서 제어 명령 . 이 그룹에는 중지 명령, 작동 안 함 명령 및 프로세서나 개별 블록의 작동 모드를 결정하는 여러 명령이 포함됩니다. 팀HLT 프로그램 실행을 중지하고 프로세서를 중지 상태로 전환합니다. 이 상태는 인터럽트 또는 재시작 신호가 수신되면 종료됩니다(초기화). 팀 안돼 (“empty” 명령)은 어떠한 작업도 수행하지 않는 명령으로, 프로그램 지연을 구현하거나 프로그램에 형성된 공백을 메우기 위해 사용됩니다.

특수팀 CLI, STI 인터럽트 요청 서비스를 금지하고 활성화합니다. 프로세서에서펜티엄 이를 위해 제어 비트(플래그)가 사용됩니다.만약에기록부에 이플래그.

많은 최신 마이크로프로세서는 사용자나 다른 장치가 특정 시스템에서 사용되는 프로세서 유형에 대한 정보를 얻을 수 있도록 식별 명령을 발행합니다. 프로세서에서 펜투임이에 대한 명령은 CPUID , 프로세서에 대한 필요한 데이터가 레지스터에 입력되는 동안 EAXEBXECXEDX그런 다음 사용자나 운영 체제에서 읽을 수 있습니다.

프로세서가 구현하는 작동 모드와 처리 중인 특정 유형의 데이터에 따라 실행되는 명령 세트가 크게 확장될 수 있습니다.

일부 프로세서는 이진수로 산술 연산을 수행하거나 이러한 숫자를 처리할 때 결과를 수정하기 위해 특수 명령을 실행합니다. 많은 고성능 프로세서에는 다음이 포함됩니다. FPU - 숫자 처리 장치"부동 소수점".

많은 최신 프로세서는 여러 정수 또는 숫자의 그룹 처리를 구현합니다.씨 원리에 따라 하나의 명령을 사용하는 "부동 소수점" SIMD(“단일 명령어 – 다중 데이터” ”) - “하나의 명령 – 많은 양의 데이터.” 여러 피연산자에 대한 연산을 동시에 실행하면 비디오 및 오디오 데이터 작업 시 프로세서 성능이 크게 향상됩니다. 이러한 작업은 이미지, 오디오 신호 및 기타 응용 프로그램을 처리하는 데 널리 사용됩니다. 이러한 작업을 수행하기 위해 다양한 유형의 프로세서에서 해당 명령 세트를 구현하는 프로세서에 특수 블록이 도입되었습니다.펜티엄, 애슬론) 이름을 얻었습니다MMX (“ 밀티- 미디어 확장 ”) – 멀티미디어 확장,SSE(“스트리밍 SIMD 확장”) – 스트리밍 SIMD - 확대, “3 확대– 3차원 확장.

회사 프로세서의 특징인텔 , 80286 모델부터 프로세서가 보호된 가상 주소 모드로 작동할 때 제공되는 메모리 액세스 우선 제어입니다.보호 모드 "(보호 모드). 이 모드를 구현하려면 채택된 우선 순위 액세스 알고리즘에 따라 메모리 보호를 구성하는 데 사용되는 특수 명령 그룹이 사용됩니다.

어셈블리 언어의 명령 구조 기계 명령 수준의 프로그래밍은 컴퓨터 프로그래밍이 가능한 최소 수준입니다. 기계 명령 시스템은 기계 장비에 명령을 내려 필요한 작업을 구현하기에 충분해야 합니다. 각 기계 명령은 "무엇을 해야 할지"를 결정하는 연산 부분과 처리 개체, 즉 "무엇을 할지"를 결정하는 피연산자 두 부분으로 구성됩니다. 어셈블리 언어로 작성된 마이크로프로세서 기계 명령은 다음과 같은 형식을 갖는 단일 라인입니다. 레이블 명령/지시문 피연산자; 주석 레이블, 명령/지시문 및 피연산자는 하나 이상의 공백이나 탭 문자로 구분됩니다. 명령의 피연산자는 쉼표로 구분됩니다.

어셈블리 언어 명령 구조 어셈블러 명령은 마이크로프로세서가 수행해야 하는 작업을 번역자에게 알려줍니다. 어셈블리 지시어는 어셈블리 프로세스나 출력 파일의 속성에 영향을 미치는 프로그램 텍스트에 지정된 매개변수입니다. 피연산자는 데이터의 초기값(데이터 세그먼트 내) 또는 명령 조치가 수행되는 요소(코드 세그먼트 내)를 지정합니다. 명령어에는 피연산자가 하나 또는 두 개 있을 수도 있고 피연산자가 없을 수도 있습니다. 피연산자 수는 명령어 코드에 의해 암시적으로 지정됩니다. 명령이나 지시문이 다음 줄에서 계속되어야 하는 경우 백슬래시 문자( "" )가 사용됩니다. 기본적으로 어셈블러에서는 명령과 지시문을 작성할 때 대문자와 소문자를 구분하지 않습니다. 지시문 및 명령의 예 Count db 1 ; 이름, 지시문, 피연산자 1개 mov eax, 0 ; 명령, 피연산자 2개

식별자는 변수 이름과 레이블 이름을 나타내는 데 사용되는 유효한 문자 시퀀스입니다. 식별자는 다음 문자 중 하나 이상으로 구성될 수 있습니다. 모든 문자는 라틴 알파벳입니다. 0부터 9까지의 숫자; 특수 문자: _, @, $, ? . 점은 라벨의 첫 번째 문자로 사용될 수 있습니다. 예약된 어셈블러 이름(지시문, 연산자, 명령 이름)은 식별자로 사용할 수 없습니다. 식별자의 첫 번째 문자는 문자 또는 특수 문자여야 합니다. 최대 길이식별자는 255자이지만 번역기는 처음 32자를 허용하고 나머지는 무시합니다. 어셈블러 지시문을 포함하지 않는 줄에 작성된 모든 레이블은 콜론 ":"으로 끝나야 합니다. 레이블, 명령(지시문) 및 피연산자는 줄의 특정 위치에서 시작할 필요가 없습니다. 프로그램의 가독성을 높이기 위해 컬럼에 작성하는 것이 좋습니다.

레이블 어셈블러 지시문을 포함하지 않는 줄에 작성된 모든 레이블은 콜론 ":"으로 끝나야 합니다. 레이블, 명령(지시문) 및 피연산자는 줄의 특정 위치에서 시작할 필요가 없습니다. 프로그램의 가독성을 높이기 위해 컬럼에 작성하는 것이 좋습니다.

주석 프로그램에서 주석을 사용하면 특히 명령 집합의 목적이 불분명한 경우 프로그램의 명확성이 향상됩니다. 주석은 소스 모듈의 모든 행에서 세미콜론(;)으로 시작됩니다. "; 오른쪽에 있는 모든 문자 " 줄 끝에는 주석이 있습니다. 주석에는 공백을 포함하여 인쇄 가능한 모든 문자가 포함될 수 있습니다. 주석은 전체 줄에 걸쳐 있을 수도 있고 같은 줄의 명령 뒤에 올 수도 있습니다.

어셈블리 언어 프로그램 구조 어셈블리 언어로 작성된 프로그램은 모듈이라는 여러 부분으로 구성될 수 있으며 각 부분은 하나 이상의 데이터, 스택 및 코드 세그먼트를 정의할 수 있습니다. 어셈블리 언어로 된 모든 완전한 프로그램에는 실행이 시작되는 하나의 기본 모듈이 포함되어야 합니다. 모듈에는 적절한 지시문을 사용하여 선언된 프로그램, 데이터 및 스택 세그먼트가 포함될 수 있습니다.

메모리 모델 세그먼트를 선언하기 전에 지시어를 사용하여 메모리 모델을 지정해야 합니다. MODEL 수정자 memory_model, Calling_convention, OS_type, stack_parameter 기본 어셈블리 언어 메모리 모델: 메모리 모델 코드 주소 지정 데이터 주소 지정 운영 체제 코드 및 데이터 인터리빙 TINY NEAR MS-DOS 허용 SMALL NEAR MS-DOS, Windows 아니요 MEDIUM FAR NEAR MS-DOS, Windows 아니요 COMPACT NEAR FAR MS-DOS, Windows 아니요 LARGE FAR MS-DOS, Windows 아니요 HUGE FAR MS-DOS, Windows 아니요 NEAR Windows 2000, Windows XP, Windows 아니요 FLAT NEAR NT,

메모리 모델 작은 모델은 16비트 MS-DOS 응용 프로그램에서만 작동합니다. 이 모델에서는 모든 데이터와 코드가 하나의 물리적 세그먼트에 위치합니다. 이 경우 프로그램 파일의 크기는 64KB를 초과하지 않습니다. 소형 모델은 하나의 코드 세그먼트와 하나의 데이터 세그먼트를 지원합니다. 이 모델을 사용할 때 데이터와 코드는 가까운 것으로 처리됩니다. 중형 모델은 여러 코드 세그먼트와 하나의 데이터 세그먼트를 지원하며, 코드 세그먼트의 모든 참조는 기본적으로 멀리 간주되고 데이터 세그먼트의 참조는 가까운 것으로 간주됩니다. 컴팩트 모델은 원거리 데이터 주소 지정(far)을 사용하는 여러 데이터 세그먼트와 근거리 주소 지정(near)을 사용하는 하나의 코드 세그먼트를 지원합니다. 대규모 모델은 여러 코드 세그먼트와 여러 데이터 세그먼트를 지원합니다. 기본적으로 코드 및 데이터에 대한 모든 참조는 멀리 있는 것으로 간주됩니다. 거대 모델은 대용량 메모리 모델과 거의 동일합니다.

메모리 모델 플랫 모델은 세그먼트화되지 않은 프로그램 구성을 가정하며 32비트 운영 체제에서만 사용됩니다. 이 모델은 데이터와 코드가 단일 세그먼트에 위치한다는 점에서 소형 모델과 유사하지만 32비트입니다. 지침 이전에 플랫 모델에 대한 프로그램을 개발합니다. model flat은 지시어 중 하나를 배치해야 합니다: . 386, . 486, . 586 또는. 686. 프로세서 선택 지시문의 선택에 따라 프로그램 작성 시 사용할 수 있는 명령어 세트가 결정됩니다. 프로세서 선택 지시문 뒤의 문자 p는 보호된 작동 모드를 의미합니다. 데이터 및 코드 주소 지정은 거의 모든 주소와 포인터가 32비트입니다.

메모리 모델. MODEL 수정자 memory_model, looking_convention, OS_type, stack_parameter 수정자 매개변수는 세그먼트 유형을 정의하는 데 사용되며 다음 값을 사용할 수 있습니다. 16 사용(선택한 모델의 세그먼트가 16비트로 사용됨) 사용 32(선택한 모델의 세그먼트가 사용됨) 32비트). Calling_convention 매개변수는 고급 언어(C++, Pascal)를 비롯한 다른 언어에서 프로시저를 호출할 때 매개변수 전달 방법을 결정하는 데 사용됩니다. 매개변수는 C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL 값을 사용할 수 있습니다.

메모리 모델. MODEL 수정자 memory_model, Calling_convention, OS_type, stack_parameter OS_type 매개변수는 기본적으로 OS_DOS이며 현재 이 매개변수에 대해 지원되는 유일한 값입니다. stack_parameter 매개변수는 다음과 같이 설정됩니다. NEARSTACK(SS 레지스터는 DS와 동일하고 데이터 및 스택 영역은 동일한 물리적 세그먼트에 위치함) FARSTACK(SS 레지스터는 DS와 동일하지 않으며 데이터 및 스택 영역이 다른 물리적 세그먼트에 위치함) 기본값은 NEARSTACK입니다.

아무것도 하지 않는 프로그램의 예. 686 P. 모델 플랫, STDCALL. 데이터. 코드 시작: RET END START RET - 마이크로프로세서 명령. 프로그램이 올바르게 종료되는지 확인합니다. 프로그램의 나머지 부분은 번역기 작동에 관한 것입니다. . 686 P - Pentium 6(Pentium II) 보호 모드 명령이 허용됩니다. 이 지시어는 프로세서 모델을 나타내는 지원되는 어셈블러 명령어 세트를 선택합니다. . MODEL FLAT, stdcall - 플랫 메모리 모델. 이 메모리 모델은 수술실에서 사용됩니다. 윈도우 시스템. stdcall - 사용되는 프로시저 호출 규칙입니다.

아무것도 하지 않는 프로그램의 예. 686 P. 모델 플랫, STDCALL. 데이터. 코드 시작: RET END START. DATA는 데이터를 포함하는 프로그램 세그먼트입니다. 이 프로그램은 스택을 사용하지 않으므로 세그먼트를 사용합니다. 스택이 없습니다. . CODE는 코드를 포함하는 프로그램 세그먼트입니다. 시작 - 라벨. END START - 프로그램의 끝과 프로그램 실행이 START 레이블로 시작되어야 한다는 컴파일러에 대한 메시지입니다. 모든 프로그램에는 끝을 표시하는 END 지시문이 포함되어야 합니다. 소스 코드프로그램들. END 지시어 다음에 오는 모든 행은 무시됩니다. END 지시어 뒤에 지정된 레이블은 프로그램 실행이 시작되는 기본 모듈의 이름을 변환기에게 알려줍니다. 프로그램에 하나의 모듈이 포함되어 있으면 END 지시문 뒤의 레이블을 생략할 수 있습니다.

어셈블리 언어 번역기 번역기는 프로그래밍 언어 중 하나로 표시되는 프로그램을 목적 코드라고 하는 대상 언어의 프로그램으로 변환하는 프로그램 또는 기술 도구입니다. 기계 명령 니모닉을 지원하는 것 외에도 각 변환기에는 자체 지시어 및 매크로 도구 세트가 있으며 종종 다른 것과 호환되지 않습니다. 어셈블리 언어 번역기의 주요 유형: MASM(Microsoft Assembler), TASM(Borland Turbo Assembler), FASM(Flat Assembler) - Tomasz Gryshtar(폴란드어)가 작성한 무료 배포 멀티패스 어셈블러, NASM(Netwide Assembler) - 무료 Intel x 아키텍처 86용 어셈블러는 Simon Tatham이 Julian Hall과 함께 만들었으며 현재 Source의 소규모 개발자 팀에서 개발 중입니다. 노. 그물.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="Microsoft Visual Studio 2005에서 프로그램 번역 1) 파일->새로 만들기-를 선택하여 프로젝트를 생성합니다. > 프로젝트 메뉴 그리고"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="Microsoft Visual Studio 2005에서 프로그램 번역 2) 프로젝트 트리에서 (보기->솔루션 탐색기) 추가하다"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

프로그램을 Microsoft Visual Studio 2005로 변환 3) Code C++ 파일 형식을 선택하고 확장명과 함께 이름을 지정합니다. asm:

프로그램을 Microsoft Visual Studio 2005로 변환 5) 컴파일러 매개변수를 설정합니다. 프로젝트 파일에서 Custom Build Rules 메뉴를 마우스 오른쪽 버튼으로 클릭합니다.

프로그램을 Microsoft Visual Studio 2005로 변환하고 나타나는 창에서 Microsoft Macro Assembler를 선택합니다.

Microsoft Visual Studio 2005에서 프로그램 번역 hello 파일에서 오른쪽 버튼을 눌러 확인하세요. 속성 메뉴의 asm 프로젝트 트리에서 일반->도구: Microsoft Macro Assembler를 설치합니다.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="Microsoft Visual Studio 2005에서 프로그램 번역 6) Build->Build hello를 선택하여 파일을 컴파일합니다. prj."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Windows OS에서의 프로그래밍 Windows OS에서의 프로그래밍은 API 기능(응용 프로그램 인터페이스, 즉 소프트웨어 응용 인터페이스)의 사용을 기반으로 합니다. 그 수는 2000에 이릅니다. Windows 프로그램은 주로 이러한 호출로 구성됩니다. 와의 모든 상호작용 외부 장치운영 체제 리소스는 원칙적으로 이러한 기능을 통해 발생합니다. Windows 운영 체제는 플랫 메모리 모델을 사용합니다. 모든 메모리 셀의 주소는 하나의 32비트 레지스터 내용에 따라 결정됩니다. Windows용 프로그램 구조에는 대화 상자(기본 창은 대화 상자), 콘솔 또는 창이 없는 구조, 클래식 구조(창, 프레임) 등 3가지 유형이 있습니다.

부르다 윈도우 기능 API 도움말 파일에서 모든 API 함수는 function_name(FA 1, FA 2, FA 3) 유형으로 표시됩니다. 유형 – 반환 값 유형; FAx – 나타나는 순서대로의 형식 인수 목록(예: int Message) Box(HWND h. Wnd, LPCTSTR lp. 텍스트, LPCTSTR lp. 캡션, UINT u. 유형); 이 기능메시지와 종료 버튼(또는 버튼)이 있는 창을 표시합니다. 매개변수의 의미: h. Wnd는 메시지 창이 나타날 창(lp)에 대한 설명자입니다. 텍스트 - 창에 나타날 텍스트, lp. 캡션 - 창 제목의 텍스트 u. 유형 - 창 유형, 특히 종료 버튼 수를 결정할 수 있습니다.

Windows API int 메시지 함수 호출. Box(HWND h. Wnd, LPCTSTR lp. 텍스트, LPCTSTR lp. 캡션, UINT u. 유형); 거의 모든 API 함수 매개변수는 실제로 32비트 정수입니다. HWND는 32비트 정수, LPCTSTR은 문자열에 대한 32비트 포인터, UINT는 32비트 정수입니다. 접미사 "A"는 종종 최신 버전의 함수로 이동하기 위해 함수 이름에 추가됩니다.

Windows API int 메시지 함수 호출. Box(HWND h. Wnd, LPCTSTR lp. 텍스트, LPCTSTR lp. 캡션, UINT u. 유형); MASM을 사용하는 경우 이름 끝에 @N N을 추가해야 합니다. 이는 전달된 인수가 스택에서 차지하는 바이트 수입니다. Win 32 API 함수의 경우 이 숫자는 인수 n의 수에 4를 곱한 값(각 인수의 바이트)으로 정의할 수 있습니다: N=4*n. 함수를 호출하려면 어셈블러 CALL 명령어를 사용합니다. 이 경우 모든 함수 인수는 스택(PUSH 명령)을 통해 전달됩니다. 인수 전달 방향: 왼쪽에서 오른쪽으로 - 아래에서 위로. 인수 u가 먼저 스택에 푸시됩니다. 유형. 지정된 함수에 대한 호출은 다음과 같습니다: CALL 메시지. 상자. 에이@16

Windows API int 메시지 함수 호출. Box(HWND h. Wnd, LPCTSTR lp. 텍스트, LPCTSTR lp. 캡션, UINT u. 유형); API 함수 실행 결과는 일반적으로 EAX 레지스터에 반환되는 정수입니다. OFFSET 지시문은 "세그먼트의 오프셋"을 나타내거나 고급 언어 용어로 번역하면 행 시작 부분에 대한 "포인터"를 나타냅니다. SI의 #define과 같은 EQU 지시문은 상수를 정의합니다. EXTERN 지시어는 함수나 식별자가 이 모듈 외부에 있음을 변환기에게 알려줍니다.

“안녕하세요 여러분!” 프로그램의 예 . 686 P. 모델 플랫, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "내 첫 프로그램", 0 STR 2 DB "안녕하세요 여러분!", 0 HW DD ? 외부 메시지. 상자. A@16: 근처. 코드 시작: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL 메시지. 상자. A@16 RET 종료 시작

INVOKE 지시문 MASM 언어 변환기를 사용하면 매크로 도구인 INVOKE 지시문을 사용하여 함수 호출을 단순화할 수도 있습니다. INVOKE 함수, ​​매개변수1, 매개변수2, ... 함수 호출에 @16을 추가할 필요가 없습니다. 매개변수는 함수 설명에 제공된 순서대로 정확하게 작성됩니다. 변환기의 매크로 수단을 통해 매개변수가 스택에 배치됩니다. INVOKE 지시문을 사용하려면 PROTO 지시문을 메시지 형식으로 사용하여 함수 프로토타입에 대한 설명이 있어야 합니다. 상자. A PROTO: DWORD, : DWORD 프로그램이 많은 Win 32 API 기능을 사용하는 경우, include 지시문 C: masm 32includeuser 32.inc를 사용하는 것이 좋습니다.

어셈블리 언어의 구조

위에서 고려한 배열은 동일한 유형의 요소 모음입니다. 그러나 애플리케이션에서는 특정 데이터 세트를 고려해야 하는 경우가 많습니다. 다른 유형단일 유형으로.

예를 들어, 다양한 유형의 데이터 모음을 하나의 개체와 연결해야 하는 데이터베이스 프로그램의 경우 이는 매우 중요합니다.

예를 들어, 이전에 3바이트 요소 배열로 작업한 Listing 4를 살펴보았습니다. 각 요소는 차례로 서로 다른 유형의 두 가지 요소, 즉 1바이트 카운터 필드와 저장 및 처리에 필요한 기타 정보를 전달할 수 있는 2바이트 필드로 구성됩니다. 독자가 고급 언어 중 하나에 익숙하다면 그러한 객체가 일반적으로 특수 데이터 유형을 사용하여 설명된다는 것을 알 수 있습니다. 구조물.

어셈블리 언어의 유용성을 향상시키기 위해 이 데이터 유형도 도입되었습니다.

우선순위 구조 다양한 유형의 고정된 수의 요소로 구성된 데이터 유형입니다.

프로그램에서 구조를 사용하려면 다음 세 단계를 수행해야 합니다.

    세트 구조 템플릿 .

    본질적으로 이는 새로운 데이터 유형을 정의하는 것을 의미하며, 이는 나중에 이 유형의 변수를 정의하는 데 사용될 수 있습니다.

    정의하다 구조 인스턴스 .

    이 단계에는 미리 정의된(템플릿 사용) 구조로 특정 변수를 초기화하는 작업이 포함됩니다.

    정리하다 구조 요소에 액세스하기 .

차이점이 무엇인지 처음부터 이해하는 것이 매우 중요합니다. 설명프로그램의 구조와 그 구조 정의.

설명하다 프로그램의 구조는 단순히 프로그램의 개요나 패턴을 나타내는 것을 의미합니다. 메모리가 할당되지 않았습니다.

이 템플릿은 번역가를 위한 필드 위치 및 기본값에 대한 정보로만 간주될 수 있습니다.

정의하다 구조는 변환기에게 메모리를 할당하고 이 메모리 영역에 기호 이름을 할당하도록 지시하는 것을 의미합니다.

구조는 프로그램에서 한 번만 설명할 수 있지만 여러 번 정의할 수 있습니다.

구조 템플릿에 대한 설명

구조 템플릿 설명의 구문은 다음과 같습니다.

구조_이름 STRUC

구조_이름 ENDS

여기 일련의 데이터 설명 지시어입니다. DB, DW, DD, DQ그리고 dt.

해당 피연산자는 필드 크기를 결정하고 필요한 경우 초기 값을 결정합니다. 이 값은 아마도 구조를 정의할 때 해당 필드를 초기화할 것입니다.

템플릿을 설명할 때 이미 언급했듯이 메모리는 할당되지 않습니다. 이는 단지 번역가를 위한 정보일 뿐이기 때문입니다.

위치프로그램의 템플릿은 임의적일 수 있지만 원패스 변환기의 논리에 따라 주어진 구조 유형의 변수가 정의된 위치 앞에 위치해야 합니다. 즉, 데이터 세그먼트의 특정 구조 유형을 가진 변수를 설명할 때 해당 템플릿은 데이터 세그먼트의 시작 부분이나 앞에 배치되어야 합니다.

특정 부서의 직원에 대한 데이터베이스를 모델링하는 예를 사용하여 구조 작업을 고려해 보겠습니다.

단순화를 위해 입력 시 정보 변환 문제를 피하기 위해 모든 필드가 문자 필드라는 점에 동의합니다.

다음 템플릿을 사용하여 이 데이터베이스의 레코드 구조를 정의해 보겠습니다.

구조 유형으로 데이터 정의

프로그램에서 템플릿을 사용하여 설명된 구조를 사용하려면 이 구조의 유형으로 변수를 정의해야 합니다. 이를 위해 다음과 같은 구문 구성이 사용됩니다.

[변수명] 구조_이름

    변수 이름- 이 구조 유형의 변수 식별자입니다.

    변수 이름을 지정하는 것은 선택 사항입니다. 지정하지 않을 경우 모든 메모리의 길이를 합한 크기의 메모리 영역 구조 요소.

    값 목록- 쉼표로 구분된 꺾쇠 괄호로 묶인 구조 요소의 초기 값 목록입니다.

    그의 임무도 선택 사항입니다.

    목록이 완전히 지정되지 않은 경우 이 변수에 대한 구조의 모든 필드는 지정된 경우 템플릿의 값으로 초기화됩니다.

    개별 필드를 초기화하는 것이 가능하지만 이 경우 누락된 필드를 쉼표로 구분해야 합니다. 생략된 필드는 구조 템플릿의 값으로 초기화됩니다. 주어진 구조의 유형으로 새 변수를 정의할 때 해당 템플릿의 모든 필드 값(즉, 기본적으로 지정된 값)에 동의하는 경우 꺾쇠 괄호만 작성하면 됩니다.

    예: 승리자 노동자.

예를 들어 위에서 설명한 구조 유형을 사용하여 여러 변수를 정의해 보겠습니다.

구조 작업 방법

프로그래밍 언어에 구조화된 유형을 도입한다는 아이디어는 다양한 유형의 변수를 하나의 객체로 결합하는 것입니다.

언어에는 구조의 특정 인스턴스 내에서 이러한 변수에 액세스할 수 있는 수단이 있어야 합니다. 명령에서 일부 구조의 필드를 참조하려면 특수 연산자가 사용됩니다. 기호 ". "(점). 다음 구문에서 사용됩니다.

    주소_식- 아래 표시된 구문 규칙에 따라 괄호 안의 일부 구조적 유형 또는 표현의 변수 식별자(그림 1)

    구조_필드_이름- 구조 템플릿의 필드 이름.

    실제로 이것은 주소이거나 구조 시작 부분에서 필드의 오프셋이기도 합니다.

따라서 운영자는 " . "(점)은 표현식을 평가합니다.

쌀. 5. 구조 필드 액세스 연산자의 주소 표현식 구문

우리가 정의한 구조의 예를 사용하여 설명하겠습니다. 노동자 구조 작업을 위한 몇 가지 기술.

예를 들어 다음으로 추출합니다. 도끼나이에 따른 필드 값. 근로자의 연령이 99세를 넘을 가능성은 거의 없으므로 이 문자 필드의 내용을 등록부에 입력한 후 도끼다음 명령을 사용하여 이진 표현으로 변환하는 것이 편리합니다. 아드.

데이터 저장의 원리로 인해 주의하세요 "낮은 주소의 낮은 바이트"나이의 가장 높은 숫자가 에 배치됩니다. , 막내는 .

조정하려면 다음 명령을 사용하십시오. xchg 알,아:

mov ax,word ptr sotr1.age ;모든 연령 sotr1

아니면 다음과 같이 할 수 있습니다:

구조 배열에 대한 추가 작업은 1차원 배열과 동일한 방식으로 수행됩니다. 여기에서 몇 가지 질문이 발생합니다.

크기를 어떻게 처리하고 배열 요소의 인덱싱을 구성하는 방법은 무엇입니까?

프로그램에 정의된 다른 식별자와 유사하게 변환기는 구조 유형의 이름과 구조 유형이 있는 변수의 이름에 유형 속성을 할당합니다. 이 속성의 값은 이 구조의 필드가 차지하는 크기(바이트)입니다. 연산자를 사용하여 이 값을 검색할 수 있습니다. 유형.

구조 인스턴스의 크기가 알려지면 구조 배열에서 인덱싱을 구성하는 것이 특별히 어렵지 않습니다.

예:

한 구조의 필드를 다른 구조의 해당 필드로 복사하는 방법은 무엇입니까? 아니면 전체 구조를 복사하는 방법은 무엇입니까? 필드를 복사해 봅시다 해당 분야의 세 번째 직원 다섯 번째 직원:

mas_sotr 작업자 10 dup()

mov bx, 오프셋 mas_sotr

mov si,(작업자 유형)*2 ;si=77*2

mov di,(작업자 유형)*4 ;si=77*4

프로그래머가 되면 조만간 좋은 주부처럼 보일 것 같아요. 그는 그녀와 마찬가지로 무언가를 저장하고 줄이고 최소한의 재료로 멋진 저녁 식사를 만들 곳을 끊임없이 찾고 있습니다. 그리고 이것이 성공한다면, 당신이 얻는 도덕적 만족은 주부와의 멋진 저녁 식사보다 적지 않으며 아마도 그 이상일 것입니다. 이러한 만족의 정도는 직업에 대한 사랑의 정도에 달려 있는 것 같습니다.

반면에 소프트웨어 및 하드웨어 개발의 성공은 프로그래머를 다소 편안하게 만들고 파리와 코끼리에 대한 잘 알려진 속담과 유사한 상황이 자주 관찰됩니다. 사소한 문제를 해결하기 위해 무거운 도구가 사용됩니다. 일반적으로 그 효과는 비교적 대규모 프로젝트를 실행할 때만 중요합니다.

언어에 다음 두 가지 유형의 데이터가 존재하는 것은 아마도 음식을 준비하거나 제품을 배치할 때 테이블의 작업 영역(RAM)을 최대한 효율적으로 사용하려는 "주부"의 욕구로 설명될 수 있습니다(프로그램 데이터 ).

명령은 목적에 따라 구별될 수 있습니다(IBM PC 어셈블러 명령의 니모닉 연산 코드의 예는 괄호 안에 표시됩니다).

l 산술 연산 수행(ADD 및 ADC - 캐리를 사용한 덧셈 및 덧셈, SUB 및 SBB - 빌림을 사용한 뺄셈 및 뺄셈, MUL 및 IMUL - 무부호 및 부호 있는 곱셈, DIV 및 IDIV - 무부호 및 부호 있는 나누기, CMP - 비교 등)

l 논리 연산(OR, AND, NOT, XOR, TEST 등)을 수행합니다.

l 데이터 전송(MOV - 전달, XCHG - 교환, IN - 마이크로프로세서에 입력, OUT - 마이크로프로세서에서 출력 등)

l 제어 이전(프로그램 분기: JMP - 무조건 점프, CALL - 프로시저 호출, RET - 프로시저에서 복귀, J* - 조건부 점프, LOOP - 루프 제어 등)

l 문자열 처리(MOVS - 전송, CMPS - 비교, LODS - 로드, SCAS - 스캔. 이러한 명령은 일반적으로 접두사(반복 수정자) ​​REP와 함께 사용됩니다.

l 프로그램 중단(INT - 소프트웨어 인터럽트, INTO - 오버플로 시 조건부 인터럽트, IRET - 인터럽트에서 복귀);

l 마이크로프로세서 제어(ST* 및 CL* - 플래그 설정 및 재설정, HLT - 중지, WAIT - 대기, NOP - 유휴 등).

와 함께 전체 목록조립 명령은 작업에서 찾을 수 있습니다.

데이터 전송 명령

l MOV dst, src - 데이터 전송(이동 - src에서 dst로 보내기).

전송: 레지스터 간 또는 레지스터와 메모리 간 1바이트(src 및 dst가 바이트 형식인 경우) 또는 1워드(src 및 dst가 워드 형식인 경우)를 전송하고 레지스터 또는 메모리에 직접 값을 씁니다.

피연산자 dst와 src는 동일한 형식(바이트 또는 워드)을 가져야 합니다.

Src는 r(레지스터) - 레지스터, m(메모리) - 메모리, i(임피던스) - 즉치값 유형일 수 있습니다. Dst는 r, m 유형일 수 있습니다. 하나의 명령에 다음 피연산자를 사용할 수 없습니다: rsegm과 i; m 유형의 피연산자 두 개와 rsegm 유형의 피연산자 두 개). i 피연산자는 간단한 표현식일 수도 있습니다.

이동 도끼, (152 + 101B) / 15

식 평가는 번역 중에만 수행됩니다. 플래그를 변경하지 않습니다.

l PUSH src - 단어를 스택에 푸시합니다(push - 밀어붙이다; src에서 스택으로 푸시). src의 내용(16비트 레지스터(세그먼트 레지스터 포함) 또는 16비트 워드를 포함하는 두 개의 메모리 셀)을 스택 맨 위에 배치합니다. 플래그는 변경되지 않습니다.

l POP dst - 스택에서 단어를 팝합니다(pop - pop; 스택에서 dst까지 계산). 스택 상단에서 워드를 제거하고 이를 dst(모든 16비트 레지스터(세그먼트 레지스터 포함)) 또는 두 개의 메모리 셀에 배치합니다. 플래그는 변경되지 않습니다.

기계 명령 수준의 프로그래밍은 프로그램을 작성할 수 있는 최소 수준입니다. 기계 명령 시스템은 컴퓨터 하드웨어에 명령을 내려 필요한 작업을 구현하기에 충분해야 합니다.

각 기계 명령은 두 부분으로 구성됩니다.

  • 운영 - "무엇을 해야할지"를 결정합니다.
  • 피연산자 - 처리 개체 정의, "무엇을 해야할지".

어셈블리 언어로 작성된 마이크로프로세서 기계 명령은 다음 구문 형식을 갖는 한 줄입니다.

명령/지시어 레이블 피연산자 ;주석

이 경우 해당 줄의 필수 필드는 명령 또는 지시문입니다.

레이블, 명령/지시문 및 피연산자(있는 경우)는 하나 이상의 공백이나 탭 문자로 구분됩니다.

명령이나 지시문이 다음 줄에서 계속되어야 하는 경우 백슬래시 문자(\)가 사용됩니다.

기본적으로 어셈블리 언어는 명령이나 지시문을 작성할 때 대문자와 소문자를 구분하지 않습니다.

코드 예시:

카운트 DB 1 ;이름, 지시문, 피연산자 1개
이동 eax,0 ;명령, 두 개의 피연산자
cbw ; 팀

태그

상표 어셈블리 언어에는 다음 기호가 포함될 수 있습니다.

  • 라틴 알파벳의 모든 문자;
  • 0부터 9까지의 숫자;
  • 특수 문자: _, @, $, ?.

마침표는 레이블의 첫 번째 문자로 사용할 수 있지만 일부 컴파일러에서는 이 문자 사용을 권장하지 않습니다. 예약된 어셈블러 이름(지시문, 연산자, 명령 이름)은 레이블로 사용할 수 없습니다.

레이블의 첫 번째 문자는 문자 또는 특수 문자여야 합니다(숫자는 제외). 최대 라벨 길이는 31자입니다. 어셈블러 지시문이 포함되지 않은 줄에 작성된 모든 레이블은 콜론(:)으로 끝나야 합니다.

마이크로프로세서가 수행해야 하는 작업을 번역자에게 알려줍니다. 데이터 세그먼트에서 명령(또는 지시문)은 필드, 작업 공간 또는 상수를 정의합니다. 코드 세그먼트에서 명령은 이동(mov) 또는 추가(add)와 같은 작업을 지정합니다.

지시어

어셈블러에는 어셈블리 및 나열 프로세스를 제어할 수 있는 여러 연산자가 있습니다. 이러한 연산자를 호출합니다. 지시어 . 이는 프로그램을 조립하는 과정에서만 작동하며 명령과 달리 기계어를 생성하지 않습니다.

피연산자

피연산자 – 기계 명령이나 프로그래밍 언어 명령문이 실행되는 개체입니다.
명령어에는 하나 또는 두 개의 피연산자가 있을 수도 있고 피연산자가 전혀 없을 수도 있습니다. 피연산자 수는 명령어 코드에 의해 암시적으로 지정됩니다.
예:

  • 피연산자 없음 ret ;Return
  • 피연산자 1개 증가 ecx ;ecx 증가
  • 두 피연산자는 eax,12를 더하고, eax에 12를 더합니다.

레이블, 명령(지시문) 및 피연산자는 줄의 특정 위치에서 시작할 필요가 없습니다. 그러나 프로그램을 더 쉽게 읽을 수 있도록 열에 작성하는 것이 좋습니다.

피연산자는 다음과 같습니다.

  • 식별자;
  • 작은따옴표나 큰따옴표로 묶인 문자열;
  • 2진수, 8진수, 10진수 또는 16진수 체계의 정수입니다.
식별자

식별자 – 연산 코드, 변수 이름, 라벨 이름과 같은 프로그램 개체를 나타내는 데 사용되는 유효한 문자 시퀀스.

식별자 기록 규칙.

  • 식별자는 하나 이상의 문자로 구성될 수 있습니다.
  • 기호로는 라틴 알파벳 문자, 숫자 및 일부 특수 문자(_, ?, $, @)를 사용할 수 있습니다.
  • 식별자는 숫자 문자로 시작할 수 없습니다.
  • 식별자의 길이는 최대 255자까지 가능합니다.
  • 변환기는 식별자의 처음 32자를 허용하고 나머지는 무시합니다.
코멘트

주석은 실행 가능한 줄과 문자로 구분됩니다. . 이 경우 세미콜론 이후부터 줄 끝까지 작성된 모든 내용은 주석입니다. 프로그램에서 주석을 사용하면 특히 명령 세트의 목적이 불분명한 경우 프로그램의 명확성이 향상됩니다. 주석에는 공백을 포함하여 인쇄 가능한 모든 문자가 포함될 수 있습니다. 주석은 전체 줄에 걸쳐 있을 수도 있고 같은 줄의 명령 뒤에 올 수도 있습니다.

어셈블리 프로그램 구조

어셈블리 언어로 작성된 프로그램은 다음과 같은 여러 부분으로 구성될 수 있습니다. 모듈 . 각 모듈에는 하나 이상의 데이터, 스택 및 코드 세그먼트가 정의되어 있습니다. 완전한 어셈블러 프로그램에는 실행이 시작되는 하나의 기본 모듈이 포함되어야 합니다. 모듈에는 적절한 지시문을 사용하여 선언된 코드 세그먼트, 데이터 세그먼트 및 스택 세그먼트가 포함될 수 있습니다. 세그먼트를 선언하기 전에 .MODEL 지시어를 사용하여 메모리 모델을 지정해야 합니다.

어셈블리 언어로 된 "아무 것도 하지 않는" 프로그램의 예:

686P
.모델 플랫, STDCALL
.데이터
.암호
시작:

RET
종료 시작

이 프로그램에는 하나의 마이크로프로세서 명령만 포함되어 있습니다. 이 명령은 RET입니다. 프로그램이 올바르게 종료되는지 확인합니다. 일반적으로 이 명령은 프로시저를 종료하는 데 사용됩니다.
프로그램의 나머지 부분은 번역기 작동에 관한 것입니다.
.686P - Pentium 6(Pentium II) 보호 모드 명령이 허용됩니다. 이 지시어는 프로세서 모델을 나타내는 지원되는 어셈블러 명령어 세트를 선택합니다. 지시어 끝에 표시된 문자 P는 프로세서가 보호 모드에서 작동 중임을 번역자에게 알립니다.
.MODEL FLAT, stdcall - 플랫 메모리 모델. 이 메모리 모델은 다음에 사용됩니다. 운영 체제윈도우. 표준 호출
.DATA는 데이터가 포함된 프로그램 세그먼트입니다.
.CODE는 코드가 포함된 프로그램 블록입니다.
시작 - 라벨. 어셈블러에서 태그는 현대 고급 언어에서는 말할 수 없는 큰 역할을 합니다.
END START - 프로그램의 끝과 프로그램 실행이 START 라벨로 시작되어야 한다는 번역자에게 보내는 메시지입니다.
각 모듈에는 프로그램 소스 코드의 끝을 표시하는 END 지시문이 포함되어야 합니다. END 지시어 뒤에 오는 모든 줄은 무시됩니다. END 지시어를 생략하면 오류가 발생합니다.
END 지시문 뒤에 지정된 레이블은 프로그램 실행이 시작되는 기본 모듈의 이름을 변환기에게 알려줍니다. 프로그램에 하나의 모듈이 포함되어 있으면 END 지시문 뒤의 레이블을 생략할 수 있습니다.




맨 위