본문 바로가기

Computer Science/컴퓨터구조

[컴퓨터 구조] 어셈블리 언어

이 글은 www.youtube.com/watch?v=4h_EORNsQNY&list=PLc8fQ-m7b1hD4jqccMlfQpWgDVdalXFbH&index=28 보고 공부한 글입니다.

 

어셈블리 언어

언어 규칙

1. 라벨 필드(Lable) : 기호주소, 또는 공란

2. 명령어 필드: 기계명령어, 슈도 명령어

3. 코멘트 필드: 명령어에 대한 주석

 

1개의 명령이 3개의 필드로 구성되어 있다.

 

 

 

명령어 필드 항목

MMi, RRI, IO 명령이냐 에 따라에 바뀐다.

 

 

 

 

슈도 명령어(Pseudo instruction)

실제로 컴퓨터를 동작시키는 데 사용되는 코드는 아니다.

ORG N- N번지부터 시작하라
ex) ORG 0
0번지에 프로그램을 넣어라라는 뜻이다.
END
어셈블리 프로그램이 여기가 끝이다 라는 걸 알려준다.
DEC N – N
이 십진수를 알려준다.
HEX N – N
16진수를 알려준다.

 

 

 

 

 

어셈블리 프로그램 예

프로그램을 만들어보자

먼저 이 프로그램이 들어갈 주소를 정한다. ORG 100을 해서 100부터 시작한다고 알린다.

 

LDA 에서 뺄 수를 load해온다.

 

CMA – 1 의보 수로의보수로 만든다.

 

INC – 1을 증가시켜 2 의보 수로 만든다.

 

ADD MIN – MIN을 더한다.

 

STA DIF – DIF에 저장한다.

 

 

 

실제로 SUB, MIN, DIF의 주소는?

맵핑해놓는다. – 심볼테이블(주소-기호 테이블)을 만든다.

 

 

 

 

위 과정을 이진수(기계어)로의 변환

16진수형태

16진수 형태로 된 기계어 이진수로 변환시키면 된다.

 

 

 

 

 

어셈블러란?

기호-언어 프로그램을 이진 프로그램으로 번역하는 프로그램

Two pass 어셈블러

 

 

 

 

메모리 내에서 기호 프로그램의 표현

) PL3, LDA SUB i 을 Symbol Table로 만들어 보자

뒤에 i가 붙으면 간접 주소이다.

 

 

 

 

 

 

Symbol을 어떻게 기계어로 바꾸는지?

First Pass – address Symbol Table을 만드는 게 목적

 

1. 주소 기호 이진수 값의 관계 표 작성
2. Symbol Table
을 출력
3. Location Counter(LC)
를 사용하여 프로그램 주소 카운트

 

 

 

MIN , SUB, DIF의 Symbol을 기계어로 바꾸는 법은 하나하나 맵핑해서 Table 형태로 만드는 것이다.

 

 

Second Pass

 

LC0일 때 읽는다. -> pseudo 명령인가? -> ORG 인가? -> 다시 LC을 바꿔준다. -> DEC, HEX가 나오면 해당하는 값으로 바꿔주면 된다. 바꿔주는 symbol table에서 읽는다.

 

MRI이거나 RRI, IO명령이다.

 

이진수로의 번역 수행


4
개의 테이블 참조
MRI
명령어 Table
Non-MRI
명령어 Table
슈도 명령어 Table
Symbol Table

 

 

출력
기계어 코드

728x90