[컴퓨터구조] 16비트 컴퓨터를 설계하자 - Instruction set 정의하기
위 포스팅에서 보았듯이,
아래 표는 16비트 Basic 컴퓨터에서 수행가능한 모든 명령 25개이다.
우리는 이런 명령어들을 이용해 16비트 컴퓨터상에서 Programming을 해 볼 것이다.
assembly programming을 할 건데, 앞서 알아아 햘 기본사항부터 확인하자.
Assembly 언어로 쓰인 프로그램에서 한 line의 구성
각 라인은 3가지 field로 구성된다.
- label field : symbolic address를 쓰거나 비워둔다.
- instruction field : machine intstruction 또는 pseudoinstruction
- comment field : 주석
아래 프로그램은 곧 자세히 살펴볼 어셈블리 프로그래밍 에시이다.
일단 이 예시를 통해 각 field가 어떤느낌인지 알고 지나가자.
어느부분이 label filed고
어느부분이 instruction filed고
어느부분이 comment field인지 느낌이 올 것이다.
◆ instruction filed
- machine instruction 또는 pseudoinstruction이 온다.
ㅇ Machine instruction
- machine instruction은 Memory-reference거나 아니거나 둘중 하나다.
(잊었으면 이 포스팅 참고! : Instruction set 정의하기)
- Memory-reference instruction 을 MRI라고 하고, 아닌 것을 non-MIR라고 하자.
다음은 MRI와 non-MRI가 작성된 모습이다.
ㅇ Pseudo instruction
- machine instruction은 아니고 단지 assembler에게 정보를 주기 위한 instruction이다.
16비트 컴퓨터에서는 4가지뿐이다. (Mano가 정의)
일단 이렇게 instruction field가 뭔지 알았으면
이제 그만 어셈블리 프로그래밍의 예시를 하나 보자.
나머지 field는 예시를 보며 확인해보자.
Assembly 프로그래밍 예시 - 두 수의 차
이 프로그램은 83과 -23의 차를 구하는 어셈블리 프로그램이다.
읽어보면 상당히 간단해서 쉽게 이해할 수 있다.
눈으로 더 잘 보이라고 내가 따로 컬러표시도 해놓았다 ^-^
◆ label filed
가만보면 label filed에 "MIN," "SUB," "DIF," 라고 적혀있는 명령어들이 있다.
이렇게 마침 label filed가 나왔으니 label filed 작성 유의점을 공부해보자.
▷ label field에 작성하는 sysmbolic address 주의점
- 최대 3자의 alphanumerical 문자로 구성
- 첫자는 반드시 letter
- Comma로 끝남
+참고: 깨알 수학영어 지식! minuend, subtrahend란 뭘까?
subtraction sentence는, 즉 두 수의 뺄셈식은 숫자 3개로 이루어져있다.
ㅇ - ㅁ = ㅂ
ㅇ: minuend
ㅁ: subtrahend
ㅂ: difference
라고 부른다.
------접은글 끝.
이 어셈블리 프로그램을 Hexadecimal code (곧 binary code)로 나타내면 이렇다.
즉, 기계어로 변역한 모습은 아래와 같다.
참고: 우리가 작성한 어셈블리 언어 프로그램을 어셈블하게되면 binay code가 나온다. 이 어셈블하는 과정은 이 포스팅에서 만날 수 있다.
ORG 100으로 시작해서 Program Counter을 100으로 맞추고 시작하여 101, 102, ..., 108까지 쭉쭉 가고 END한다.
Pseudo instruction은 ORG, DEC, HEX, END 이렇게 4개가 모두 보인다.
그중 DEC, HEX 값은 상수값 그대로 내용에 들어간다.
Machine instruction은 그 외의 나머지 명령어들이다.
일단 16진수로 표현한 명령의 내용을 좀 보자.
7로 시작하는 것은 (최상위비트가 0 1 1 1인) register-reference instruction
F로 시작하는 것은 (최상위비트가 1 1 1 1인) input-output instruction
0~6으로 시작하는 것은 (최상위비트가 저 두경우가 아닌) memory-reference instruction
이라고 얘기했었다: [컴퓨터구조] 16비트 컴퓨터를 설계하자 - Instruction set 정의하기
16진수의 첫 숫자 말고 나머지 세 숫자도 살펴보자.
memory-ref 명령인 경우에는 피연산자의 번지(주소 부분)가 되겠고
다른 명령인 경우에는 명령의 종류를 결정하는 비트부분이 되겠다.
그래서 잘 보면 LDA SUB 명령을 16진수로 나타내면 2107인데
- 맨앞 값 2는 direct addressing mode일 때 LDA operation에 해당한다.
- 107은 피연산자 SUB이 있는 107번지인 것을 확인할 수 있다.
나머지 memory-ref 명령어들도 이런 식으로 관찰해보면 그렇다.
.
.
그럼 Assembler는 어셈블리 언어로 쓰여진 프로그램을 어떻게 기계어로 번역해줄까?
아래 포스팅에서 자세히 확인하자.
[컴퓨터구조] 16비트 컴퓨터에서 프로그래밍하기 - Assembler가 어셈블리 프로그램을 기계어로 번역하는 과정
'컴퓨터구조 & OS' 카테고리의 다른 글
[컴퓨터구조] 파이프라이닝 | 개념, 성능, 문제점 (0) | 2021.11.19 |
---|---|
[컴퓨터구조] 16비트 컴퓨터에서 프로그래밍하기 - Assembler가 어셈블리 프로그램을 기계어로 번역하는 과정 (0) | 2021.10.18 |
[컴퓨터구조] 16비트 컴퓨터 설계하기 - instruction 실행의 종합적인 흐름 | flowchart (0) | 2021.10.16 |
[컴퓨터구조] 16비트 컴퓨터 설계하기 - I/O instruction의 실행 단계에서 벌어지는 일들 (0) | 2021.10.16 |
[컴퓨터구조] 16비트 컴퓨터 설계하기 - 명령어의 실행단계에서 벌어지는 일들 (2) | 2021.10.15 |