8086 어셈블리어

FeelSoo·2022년 5월 21일
0
post-custom-banner




어셈블리어란? 기계어에 가까운 저급언어로 기계어와 1대1 대응이 되는 프로그래밍 언어다.

기계어는 1과 0으로만 이루어진 2진수 형태의 언어다.


고급 프로그래밍 언어로 쓰인 원시코드(source code)는 컴파일하여 목적 코드(기계어)로 번역해주어야만 컴퓨터가 인식하고 해당 연산을 수행한다.

** 컴파일러는 보조기억장치에 저장되어 있는 원시코드를 한꺼번에 목적코드로 번역하여 주기억장치에 적재한다.



아래와 같이 고급언어로 프로그래밍을 진행했을 땐 번역시 컴파일 과정을 거치지만 저급 언어, 즉 어셈블리어를 이용하여 프로그래밍을 진행했을 땐 어셈블 과정을 거치게 된다.


어셈블리어는 컴퓨터 각 장치들의 구체적 동작을 제어하며 기계어 하나에 하나의 니모닉 명령어를 사용한다.

** 니모닉 명령어 : 기계어와 대응되는 명령 기호들 ---- ex) ADD, MOV, SUB

또한 프로세서 마다 따로 정의한다.

주로 시스템프로그래밍에 사용되며 하드웨어 이해에 적합하다.



< 문장의 두 가지 형태 >

어셈블리어 문장 작성 방식에는 두 가지가 있다.

  1. 어셈블리 지시어

  2. 어셈블리 명령어

어셈블리 지시어는 컴퓨터가 무엇을 하도록 지시하는 것이 아니라, 어셈블러에 대한 지시사항을 전달한다.

기계어로 번역되지 않고, 기계에 의해 실행되지도 않음

ex ) 변수 정의용 기호 DW, DQ, DD .. etc

반면 어셈블리 명령어는 컴퓨터로 하여금 무엇을 수행하라고 직접 명령한다.

기계어로 번역되어 기계에 의해 실행된다.

ex ) ADD, MOV .. ect



다음은 숫자를 표현하는 방식이다.

다음은 상수를 정의할 때 재정의가 불가한 케이스와 가능한 케이스를 구분한 예시이다.

보다시피 레이블 상수를 정의하는 방법에는 2가지가 있다.

  1. EQU

  2. = ( 등호 사용 )


EQU를 활용했을 때는 재정의가 불가능하고 등호를 사용해서는 재정의가 가능하다.

변수를 정의하는 방법에는 5가지가 있다.

  1. (레이블 이름) DB 식 : 해당 레이블에 1byte 크기의 기억장소 확보하고, 식 값을 기억

  2. (레이블 이름) DW 식 : 워드 ( 2byte ) 확보하고 해당 레이블에 식 값 기억

  3. (레이블 이름) DD 식 : 2워드 ( 4byte ) 확보하고 해당 레이블에 식 값 기억

  4. (레이블 이름) DQ 식 : 4워드 ( 8byte ) 확보하고 해당 레이블에 식 값 기억

  5. (레이블 이름) DT 식 : 10 byte 확보하고 해당 레이블에 식 값 기억





    다음은 프로그램의 기본 형태이다.



< 명령어의 조건적 분기 >

조건 분기 명령어 형식 :

CMP A, B

J( something ) < 분기될 주소 >

// Compare A, B --- A, B 를 비교해서 ( A - B해보고 ) Something 하면 <> 주소의 명령을 실행해라

CMP를 사용하면 연산항을 비교한 값이 플래그 레지스터 ( FR ) 에 세팅된다. 이후 J(?) 값에 의해 판별되고 해당하면 뒷 주소로 분기된다.

if ( ~ ) { return ~ } 구문의 오리지널 버젼이다.

J값 뒤에 붙일 수 있는 값들은 다음과 같다.

다음은 이를 활용한 예시다.



< 무조건적 분기 >

JMP <> // <>로 무조건 분기

ex ) JMP OVER // 주소 OVER로 분기

profile
세상은 넓고 배울건 많다
post-custom-banner

0개의 댓글