안 쓰던 블로그

컴퓨터구조-어셈블리 프로그램 구조 본문

컴퓨터 구조

컴퓨터구조-어셈블리 프로그램 구조

proqk 2020. 4. 18. 19:54
반응형

어셈블리 언어

-기계어를 사람이 사용하는 언어에 가깝게 문자로 기호화

-CPU에따라 어셈블리 언어 형식이 다름

 

어셈블리 프로그램은 어셈블리 과정을 통해 기계어로 변환된다

어셈블리 과정은 어셈블러가 담당

 

 

기본 어셈블리 명령어

ADD 덧셈

SUB 뺄셈

MUL 곱셈

DIV 나눗셈

MOV 데이터 이동

LOAD 기억장치로부터 데이터 가져옴

STOR 기억장치로 데이터 저장

 

인텔 8086버전 어셈블리 언어

대소문자 구분x

1줄에 명령어 1개씩

 

명령어 형식

명령어는 4개 필드로 구성된다

레이블(이름): 연산자 오퍼랜드(피연산자) ;주석

ex) DOSTART: ADD 10 ;가산기에 10을 더하고 결과를 가산기에 저장

 

-레이블

JUMP, LOOP같은 순환/반복 명령을 할 때 해당 레이블로 프로그램 카운터 이동

문자, 숫자, 특수문자 ?, ., @, _, $, %를 사용하여 나타낼 수 있다

중간에 공백이 있으면 안 되고 마침표가 있다면 반드시 첫 번째 문자로 사용되어야 한다

숫자로 시작하면 안 되며 허용되는 특수문자 이외의 문자는 사용 금지

 

 

-연산

명령어/지시어로 구분

 

-오퍼랜드

레지스터 이름, 정수, 라벨, 연산자, 주소 등 기록

 

-주석

세미콜론으로 시작하며 프로그램 설명

 

 

실행과정

1. 기억장치 250번지에서 데이터를 가져와서 누산기에 적재한다(LOAD를 의미하는 게 1)

2. 기억장치 251번지의 데이터를 1번에서 누산기에 적재한 데이터와 덧셈을 수행하고 결과를 다시 누산기에 저장

3. 기억장치 251번지에 그 결과를 저장

4. 프로그램 주소 170번지로 점프

 

LOAD 250, ADD 251 이런 명령어를 기계 코드로 바꾼 것이 1250, 5251

1은 LOAD, 5는 ADD, 2는 STOR, 8은 JUMP다

 

 

위의 표를 그림으로 옮기면 이렇게 된다


PC: 프로그램 카운터 (다음에 실행할 명령어 주소)  
AC: 누산기 (산술/논리연산 하고 결과 임시 저장) 
IR: 명령어 레지스터 (현재 실행중인 명령어)

 

100 LOAD 250  //1250

 

[1단계]

기억장치 내 100번지에 있는 명령어 1250을 IR(=명령어 레지스터)로 가져온다

 

[2단계]

IR에 저장된 명령어를 실행할 거라 연산에 필요한 값(0004)을 메모리 250번지에서 AC(=누산기)로 가져옴

PC(=프로그램 카운터)에 다음에 실행할 명령어 주소 101 저장

 

 

참고로 이 사진에서는
100~101같은 건 주소 부분이고
250~같은 건 데이터 부분이라고 생각하면 된다

 

101 ADD 251   //5251 

 

[3단계]

1250이 끝났으므로 다음 명령어 101명령을 실행해야 한다

101번지 명령어 5251을 IR로 가져온다

 

[4단계]

251번지의 값(0003)을 ALU(누산기)에다가 넣고 아까 누산기에 넣었던 값(0004)과 덧셈한 뒤 결과값을 다시 ALU에 임시 저장된다

다음 실행할 명령어 주소 102가 PC로 들어간다

 

 

102 STOR 251  // 2251

 

[5단계]

PC값에 따라 102번지 명령어를 IR로 가져온다

 

[6단계]

2251은 누산기 연산결과를 메모리 251번지에 저장하라는 명령

AC값을 251번지에 저장하고 PC에 다음에 실행할 명령 103을 저장한다

 

 

103 JUMP 170  //8170

 

[7단계]

PC값인 103번지 명령어를 IR로 가져온다

 

[8단계]

170번지로 점프한다는 명령어

이 이후에는 170번지의 명령을 실행한다

 

 

 

명령어 집합

CPU가 수행할 동작을 정의하는 2진수 코드로 된 명령어들의 집합

일반적으로 어셈블리 코드 형태로 표현된다

CPU사용목적, 특성에 따라 결정된다

 

명령어 집합 설계를 위해 결정되어야 할 사양들

-연산종류: CPU가 수행할 연산들의 수와 종류 및 복잡도 결정

-데이터 형태: 연산을 수행할 데이터 형태, 데이터 길이(비트 수), 수의 표현방식

-명령어 형식: 명령어 길이, 오퍼랜드 필드 수와 길이

-주소 지정 방법: 피연산자의 주소를 지정하는 방식

 

명령어 형식

-연산 코드

함수 연산 기능: 산술/논리 연산 수행

전달 기능: cpu와 주기억장치 사이, cpu 내 레지스터 간의 정보교환과 적재, 저장 기능

제어 기능: 프로그램 수행 흐름을 제어. 명령어 실행 순서 바꾸는 분기, 서브루틴 호출 명령어(아래 다시 설명) 등

입출력 기능: cpu와 외부 장치들 간의 데이터 이동 수행

 

16비트 명령어 형식

사진은 전체가 명령어 집합 구조임 
만약 위에서 다뤘던 예시 중에 명령어 코드 5251이라면 연산코드 5고 오퍼랜드1이 251이고 오퍼랜드2는 패딩인 셈이다

 

 

연산 코드 중 제어 기능에 속하는 명령어 분기, 서브루틴 호출 명령어 자세한 설명

분기 명령어

명령어 내용에 따라 무조건 오퍼랜드 주소로 이동하거나 조건 만족 시 이동

오퍼랜드: 다음에 실행할 명령어 주소를 포함한 비트

 

서브루틴 호출 명령어

호출 명령어: 현재 PC(프로그램 카운터) 내용을 스택에 저장하고 서브루틴의 시작 주소로 분기하는 명령어

복귀 명령어: cpu가 원래 실행하던 프로그램으로 되돌아가도록 하는 명령어

 

 

 

연습 문제

1. 단계4가 끝난 후에 실행될 명령어의 연산은 무엇이고 무슨 연산을 하는가?

정답: 

2251이니까 STOR명령이 실행될 것이다

STOR은 기억장치로 데이터를 저장하는 명령어다

 

2. 단계4에서 ALU에서 연산되는 두 데이터 값 4와 3은 각각 어느 데이터 주소에서 가져왔나?

정답: 250번지에서 0004, 251번지에서 0003을 가져왔다

 

 

3. 다음 중 가능한 레이블 이름은?

1) GO GO

2) 1position

3) v1.1

4) goto*point

5) TOP

 

정답: 5번이 정답

1번은 중간에 빈칸, 2번은 숫자로 시작, 3번은 중간에 마침표(마침표는 맨 앞에만 가능), 4번은 허용되지 않는 특수문제 *사용

 

반응형
Comments