설명이있는 간단한 8086 어셈블리 언어 프로그램

문제를 제거하기 위해 도구를 사용해보십시오





어셈블리 수준 프로그래밍은 하위 수준에 매우 중요합니다. 임베디드 시스템 디자인은 하드웨어를 조작하기 위해 프로세서 명령에 액세스하는 데 사용됩니다. 가장 원시적 인 기계 수준의 언어는보다 적은 수의 클록 사이클을 소비하고 적은 메모리를 사용하는 효율적인 코드를 만드는 데 사용됩니다. 고급 프로그래밍 언어 . 프로그래머가 임베디드 하드웨어를 알고 있어야하는 프로그램을 작성하기위한 완전한 하드웨어 지향 프로그래밍 언어입니다. 여기에서는 어셈블리 레벨 프로그래밍 8086의 기초를 제공합니다.

어셈블리 레벨 프로그래밍 8086

어셈블리 레벨 프로그래밍 8086



어셈블리 레벨 프로그래밍 8086

그만큼 어셈블리 프로그래밍 언어 니모닉을 사용하여 개발 된 저수준 언어입니다. 마이크로 컨트롤러 또는 마이크로 프로세서는 0 또는 1과 같은 이진 언어 만 이해할 수 있으므로 어셈블러는 어셈블리 언어를 이진 언어로 변환하고 메모리에 저장하여 작업을 수행합니다. 프로그램을 작성하기 전에 임베디드 설계자는 컨트롤러 또는 프로세서의 특정 하드웨어에 대한 충분한 지식이 있어야하므로 먼저 8086 프로세서의 하드웨어를 알아야했습니다.


프로세서의 하드웨어

프로세서의 하드웨어



8086 프로세서 아키텍처

8086은 직렬 버스, RAM 및 ROM, I / O 장치 등과 같은 모든 주변 장치를 나타내는 프로세서로 시스템 버스를 사용하여 모두 외부에서 CPU에 연결됩니다. 8086 마이크로 프로세서에는 CISC 기반 아키텍처 , 32 개의 I / O, 직렬 통신 , 추억과 카운터 / 타이머 . 마이크로 프로세서는 기능을 읽고 저장하기 위해 메모리가 필요한 작업을 수행하는 프로그램이 필요합니다.

8086 프로세서 아키텍처

8086 프로세서 아키텍처

어셈블리 레벨 프로그래밍 8086은 메모리 레지스터를 기반으로합니다. 레지스터는 마이크로 프로세서 및 컨트롤러 데이터를 더 빠르게 수집하고 저장하는 방법을 제공하는 메모리에 있습니다. 곱셈, 덧셈 등을 수행하여 데이터를 프로세서 또는 컨트롤러로 조작하려면 데이터를 처리하고 저장하기 위해 레지스터가 필요한 메모리에서 직접 수행 할 수 없습니다. 8086 마이크로 프로세서에는 다음과 같은 명령어에 따라 분류 할 수있는 다양한 종류의 레지스터가 포함되어 있습니다.

범용 레지스터 : 8086 CPU는 8 개의 범용 레지스터로 구성되어 있으며 각 레지스터는 AX, BX, CX, DX, SI, DI, BP, SP와 같은 그림과 같이 고유 한 이름을 가지고 있습니다. 이들은 모두 16 비트 레지스터로, 주로 숫자를 유지하는 데 사용되는 AX, BX, CX, DX 등 4 개의 레지스터가 두 부분으로 나뉩니다.

특수 목적 레지스터 : 8086 CPU는 IP 및 플래그 레지스터와 같은 2 개의 특수 기능 레지스터로 구성되어 있습니다. IP 레지스터는 현재 실행중인 명령어를 가리키며 항상 CS 세그먼트 레지스터와 함께 수집하도록 작동합니다. 플래그 레지스터의 주요 기능은 기계적 기능이 완료된 후 CPU 작동을 수정하는 것이며 직접 액세스 할 수 없습니다.
세그먼트 레지스터 : 8086 CPU는 CS, DS, ES, SS와 같은 4 개의 세그먼트 레지스터로 구성되어 있으며 세그먼트 레지스터에 모든 데이터를 저장할 수 있도록 주로 사용되며 세그먼트 레지스터를 사용하여 메모리 블록에 액세스 할 수 있습니다.


간단한 어셈블리 언어 프로그램 8086

어셈블리 언어 프로그래밍 8086에는 다음과 같은 몇 가지 규칙이 있습니다.

  • 조립 수준 프로그래밍 8086 코드는 대문자로 작성해야합니다.
  • 레이블 뒤에는 콜론이 와야합니다. 예 : label :
  • 모든 레이블과 기호는 문자로 시작해야합니다.
  • 모든 주석은 소문자로 입력됩니다.
  • 프로그램의 마지막 줄은 END 지시어로 끝나야합니다.

8086 프로세서에는 WORD PTR (워드 용) (2 바이트), BYTE PTR (바이트 용)과 같이 데이터에 액세스하기위한 두 개의 다른 명령이 있습니다.

연산 코드 및 피연산자

연산 코드 및 피연산자

Op 코드 : 단일 명령어는 CPU에서 실행할 수있는 연산 코드로 호출됩니다. 여기서 'MOV'명령어는 연산 코드라고합니다.

피연산자 : 단일 조각 데이터를 연산 코드로 작동 할 수있는 피연산자라고합니다. 예를 들어, 뺄셈 연산은 피연산자에서 뺀 피연산자에 의해 수행됩니다.
통사론: 서브 b, c

8086 마이크로 프로세서 어셈블리 언어 프로그램

키보드에서 문자를 읽기위한 프로그램 작성

MOV ah, 1h // 키보드 입력 서브 프로그램
INT 21h // 문자 입력
// 문자는 al에 저장됩니다.
MOV c, al // alto c에서 문자 복사

문자 읽기 및 표시를위한 프로그램 작성

MOV ah, 1h // 키보드 입력 서브 프로그램
INT 21h // 문자 읽기
MOV dl, al // 문자를 dl로 복사
MOV ah, 2h // 문자 출력 서브 프로그램
INT 21h // 문자를 dl로 표시

범용 레지스터를 사용하여 프로그램 작성

ORG 100h
MOV AL, VAR1 // VAR1 값을 AL로 이동하여 확인합니다.
LEA BX, VAR1 // BX에서 VAR1의 주소를 가져옵니다.
MOV BYTE PTR [BX], 44h // VAR1의 내용을 수정합니다.
MOV AL, VAR1 // VAR1의 값을 AL로 이동하여 확인합니다.
권리
VAR1 DB 22h
종료

라이브러리 함수를 사용하여 문자열을 표시하는 프로그램 작성

emu8086.inc // 매크로 선언 포함
ORG 100h
'Hello World!'를 인쇄하십시오.
GOTOXY 10, 5
PUTC 65 // 65 –‘A’의 ASCII 코드
PUTC‘B’
RET // 운영 체제로 돌아갑니다.
END // 컴파일러를 중지하라는 지시.

산술 및 논리 명령어

산술 및 논리 장치의 8086 프로세스는 덧셈, 나눗셈 및 증가 연산의 세 그룹으로 분리되었습니다. 대부분 산술 및 논리 명령어 프로세서 상태 레지스터에 영향을 미칩니다.

어셈블리 언어 프로그래밍 8086 니모닉은 작업을 수행하는 데 사용되는 MOV, MUL, JMP 등과 같은 연산 코드 형식입니다. 어셈블리 언어 프로그래밍 8086 예제

부가
ORG0000h
MOV DX, # 07H // 7 값을 AX // 레지스터로 이동
MOV AX, # 09H // 값 9를 누산기 AX로 이동 //
AX, 00H 추가 // R0 값에 CX 값을 더하고 결과를 AX //에 저장
종료
곱셈
ORG0000h
MOV DX, # 04H // 값 4를 레지스터 DX //로 이동
MOV AX, # 08H // 값 8을 누산기 AX로 이동 //
MUL AX, 06H // 곱셈 결과는 Accumulator AX에 저장됩니다. //
종료
빼기
ORG 0000h
MOV DX, # 02H // 값 2를 등록 DX //로 이동
MOV AX, # 08H // 값 8을 누산기 AX로 이동 //
SUBB AX, 09H // 결과 값은 Accumulator A에 저장됩니다. X //
종료
분할
ORG 0000h
MOV DX, # 08H // 값 3을 등록 DX //로 이동
MOV AX, # 19H // 값 5를 누산기 AX로 이동 //
DIV AX, 08H // 최종 값은 Accumulator AX에 저장됩니다. //
종료

따라서 이것은 어셈블리 레벨 프로그래밍 8086, 8086 프로세서 아키텍처에 대한 8086 프로세서, 산술 및 논리 명령에 대한 간단한 예제 프로그램입니다. 또한이 기사 또는 전자 프로젝트에 관한 질문이 있으시면 아래 의견 섹션에 의견을 보내 문의하실 수 있습니다.