임베디드 시스템-어셈블리 언어

어셈블리 언어는 다음을 제공하기 위해 개발되었습니다. mnemonics또는 기계 레벨 코드 명령에 대한 기호. 어셈블리 언어 프로그램은 니모닉으로 구성되어 있으므로 기계 코드로 변환해야합니다. 이 변환을 담당하는 프로그램은assembler. 어셈블리 언어는 CPU의 내부 구조와 직접적으로 작동하기 때문에 종종 저수준 언어로 불립니다. 어셈블리 언어로 프로그래밍하려면 프로그래머는 CPU의 모든 레지스터를 알아야합니다.

C, C ++, Java 및 기타 다양한 언어와 같은 다른 프로그래밍 언어는 CPU의 내부 세부 사항을 처리하지 않기 때문에 고급 언어라고합니다. 반대로 어셈블러는 어셈블리 언어 프로그램을 기계어 코드로 변환하는 데 사용됩니다 (때로는object code 또는 opcode). 마찬가지로 컴파일러는 고급 언어를 기계어 코드로 변환합니다. 예를 들어, C 언어로 프로그램을 작성하려면 C 컴파일러를 사용하여 프로그램을 기계어로 번역해야합니다.

어셈블리 언어의 구조

어셈블리 언어 프로그램은 ADD 및 MOV와 같은 어셈블리 언어 명령어이거나 호출 된 문인 일련의 문입니다. directives.

instruction CPU에 무엇을해야하는지 알려주고 directive (또는 pseudo-instructions)는 어셈블러에 지침을 제공합니다. 예를 들어 ADD 및 MOV 명령어는 CPU가 실행하는 명령이고 ORG 및 END는 어셈블러 지시문입니다. 어셈블러는 ORG 지시문이 사용될 때 메모리 위치 0에 opcode를 배치하고 END는 소스 코드의 끝을 나타냅니다. 프로그램 언어 명령어는 다음 네 개의 필드로 구성됩니다.

[ label: ]   mnemonics  [ operands ]   [;comment ]

대괄호 ([])는 필드가 선택 사항임을 나타냅니다.

  • 그만큼 label field프로그램이 이름으로 코드 줄을 참조 할 수 있습니다. 레이블 필드는 특정 문자 수를 초과 할 수 없습니다.

  • 그만큼 mnemonicsoperands fields함께 프로그램의 실제 작업을 수행하고 작업을 수행합니다. ADD A, C & MOV C, # 68과 같은 문 여기서 ADD 및 MOV는 opcode를 생성하는 니모닉입니다. "A, C"및 "C, # 68"은 피연산자입니다. 이 두 필드에는 지시문이 포함될 수 있습니다. 지시문은 기계어 코드를 생성하지 않고 어셈블러에서만 사용되는 반면 명령은 CPU가 실행할 기계어 코드로 변환됩니다.

1.0000         ORG  0H            ;start (origin) at location 0 
2 0000 7D25    MOV  R5,#25H       ;load 25H into R5 
3.0002 7F34    MOV  R7,#34H       ;load 34H into  R7 
4.0004 7400    MOV  A,#0          ;load 0 into A 
5.0006 2D      ADD  A,R5          ;add contents of R5 to A 
6.0007 2F      ADD  A,R7          ;add contents of R7 to A
7.0008 2412    ADD  A,#12H        ;add to A value 12 H 
8.000A 80FE    HERE: SJMP HERE    ;stay in this loop 
9.000C END                        ;end of asm source file
  • 그만큼 comment field 주석 표시기 인 세미콜론으로 시작합니다.

  • 프로그램에서 "HERE"레이블을 확인하십시오. 명령을 참조하는 모든 레이블 뒤에는 콜론이 와야합니다.

8051 프로그램 조립 및 실행

여기서 우리는 어셈블리 언어의 기본 형태에 대해 논의 할 것입니다. 어셈블리 언어 프로그램을 만들고, 조립하고, 실행하는 단계는 다음과 같습니다.

  • 먼저 편집기를 사용하여 위 프로그램과 유사한 프로그램을 입력합니다. 모든 Microsoft 운영 체제와 함께 제공되는 MS-DOS EDIT 프로그램과 같은 편집기를 사용하여 프로그램을 만들거나 편집 할 수 있습니다. 편집기는 ASCII 파일을 생성 할 수 있어야합니다. 소스 파일의 "asm"확장자는 다음 단계에서 어셈블러에서 사용됩니다.

  • "asm"소스 파일에는 1 단계에서 만든 프로그램 코드가 포함되어 있습니다.이 코드는 8051 어셈블러에 공급됩니다. 그런 다음 어셈블러는 어셈블리 언어 명령어를 기계어 코드 명령어로 변환하고.obj file (개체 파일) 및 .lst file(목록 파일). 그것은 또한source file그래서 일부 어셈블러에서는이 파일에 "src"확장자가 있어야합니다. "lst"파일은 선택 사항입니다. 어셈블러가 감지 한 오류뿐만 아니라 모든 opcode와 주소를 나열하기 때문에 프로그램에 매우 유용합니다.

  • 어셈블러에는 다음과 같은 세 번째 단계가 필요합니다. linking. 링크 프로그램은 하나 이상의 오브젝트 파일을 가져 와서 "abs"확장자를 가진 절대 오브젝트 파일을 생성합니다.

  • 다음으로 "abs"파일은 "OH"(object to hex converter)라는 프로그램에 공급되어 ROM에 구울 준비가 된 "hex"확장자를 가진 파일을 만듭니다.

데이터 형식

8051 마이크로 컨트롤러에는 8 비트의 단일 데이터 유형이 포함되어 있으며 각 레지스터도 8 비트 크기입니다. 프로그래머는 CPU에서 처리 할 수 ​​있도록 8 비트 (00 ~ FFH 또는 10 진수 255)보다 큰 데이터를 분해해야합니다.

DB (바이트 정의)

DB 지시문은 어셈블러에서 가장 널리 사용되는 데이터 지시문입니다. 8 비트 데이터를 정의하는 데 사용됩니다. 10 진수, 2 진, 16 진 또는 ASCII 형식 데이터를 정의하는데도 사용할 수 있습니다. 10 진수의 경우 10 진수 뒤의 "D"는 선택 사항이지만 "B"(이진) 및 "Hl"(16 진수)에는 필수입니다.

ASCII를 나타내려면 문자를 따옴표로 묶으십시오 ( 'like this'). 어셈블러는 숫자 / 문자에 대한 ASCII 코드를 자동으로 생성합니다. DB 지시문은 두 문자보다 큰 ASCII 문자열을 정의하는 데 사용할 수있는 유일한 지시문입니다. 따라서 모든 ASCII 데이터 정의에 사용해야합니다. DB의 몇 가지 예가 아래에 나와 있습니다.

ORG  500H 
DATA1:  DB   28                     ;DECIMAL (1C in hex) 
DATA2:  DB   00110101B              ;BINARY  (35 in hex) 
DATA3:  DB   39H                    ;HEX 
        ORG  510H 
DATA4:  DB   "2591"                 ;ASCII  NUMBERS 
        ORG  520H                         
DATA6:  DA   "MY NAME IS Michael"   ;ASCII CHARACTERS

ASCII 문자열 주위에 작은 따옴표 또는 큰 따옴표를 사용할 수 있습니다. DB는 또한 바이트 크기의 청크로 메모리를 할당하는 데 사용됩니다.

어셈블러 지시어

8051의 일부 지침은 다음과 같습니다.

  • ORG (origin)− origin 지시문은 주소의 시작을 나타내는 데 사용됩니다. 16 진수 또는 10 진수 형식의 숫자를 사용합니다. 숫자 뒤에 H가 제공되면 숫자는 16 진수로 처리되고 그렇지 않으면 10 진수로 처리됩니다. 어셈블러는 십진수를 헥사로 변환합니다.

  • EQU (equate)− 메모리 위치를 차지하지 않고 상수를 정의하는 데 사용됩니다. EQU는 레이블이 프로그램에 나타나도록 상수 값을 데이터 레이블과 연결하고 해당 상수 값이 레이블을 대체합니다. "MOV R3, #COUNT"명령을 실행하는 동안 레지스터 R3은 값 25로로드됩니다 (# 기호에 유의). EQU 사용의 장점은 프로그래머가 한 번 변경할 수 있고 어셈블러가 모든 발생을 변경할 수 있다는 것입니다. 프로그래머는 전체 프로그램을 검색 할 필요가 없습니다.

  • END directive− 소스 (asm) 파일의 끝을 나타냅니다. END 지시문은 프로그램의 마지막 줄입니다. END 지시문 이후의 모든 것은 어셈블러에서 무시됩니다.

어셈블리 언어의 레이블

어셈블리 언어의 모든 라벨은 아래에 주어진 규칙을 따라야합니다.

  • 각 레이블 이름은 고유해야합니다. 어셈블리 언어 프로그래밍에서 레이블에 사용되는 이름은 대문자와 소문자, 숫자 0에서 9까지의 알파벳 문자와 @, 밑줄 (_) 비율의 물음표 (?), 마침표 (.)와 같은 특수 문자로 구성됩니다. 및 달러 ($).

  • 첫 번째 문자는 알파벳 문자 여야합니다. 숫자 일 수 없습니다.

  • 예약어는 프로그램에서 라벨로 사용할 수 없습니다. 예를 들어 ADD 및 MOV 단어는 명령어 니모닉이므로 예약어입니다.