연산코드
컴퓨터에게 명령하는 부분
더하기
빼기
등의 동작영어로는
Opcode
라고도 부름
오퍼랜드 (Operand)
연산 코드가
무엇에
적용될지 알려주는 부분데이터 값 + 데이터 주소 를 담음.
어셈블리어 동작
mov eax, 0 # 연산 코드: mov(옮기기), 오퍼랜드: eax(레지스터), 0(데이터)
add eax, edx # 연산 코드: add(더하기), 오퍼랜드: eax, edx(레지스터)
str edx, [rbp-4] # 연산 코드: str(저장하기), 오퍼랜드: edx, [rbp-4](메모리 위치)
명령어 구성은
연산 코드(할일) + 오퍼랜드(대상)
주소 지정 방식으로 데이터를 어떻게 찾을지 결정함.
연산 코드 4가지 유형
데이터 전송
데이터를 옮기거나 저장하는 작업
연산코드 의미
MOVE
데이터 옮기기
STORE
메모리에 저장하기
LOAD
메모리에서 CPU로 데이터를 가져오렴
PUSH
스택에 데이터를 저장하기
POP
스택에서 데이터 꺼내기
산술/논리 연산
연산 코드 의미 | |
ADD / SUBTRACT | 덧셈/뺄셈 수행 |
MULTIPLY / DIVIDE | 곱셈/나눗셈 수행 |
INCREMENT / DECREMENT | 1을 더하거나 빼기 |
AND / OR / NOT | 논리 연산 수행 |
COMPARE | 두 값을 비교 |
제어 흐름 변경
프로그램 실행 순서를 바꾸는 작업
연산 코드 의미
JUMP
특정 주소로 이동
CONDITIONAL JUMP
조건이 맞으면 특정 주소로 이동
HALT
프로그램 멈추기
CALL
특정 주소로 이동 후 돌아올 주소 저장
RETURN
저장된 주소로 돌아가기
입출력 제어
입출력 장치와 데이터를 주고받는 작업
연산 코드 의미
READ
입출력 장치에서 데이터 읽기
WRITE
입출력 장치에 데이터 쓰기
START IO
입출력 장치 시작
TEST IO
입출력 장치 상태 확인
위 내용 몰라도됨 근데..
주소 설정 방식
즉시 주소 지정 방식 (Immadiate Addressing Mode)
명령어 자체에
5
같은 숫자가 바로 들어있는 것을 말한다장점
빠르다
단점
큰 숫자나 복잡한 데이터 표현은 어렵다
[명령:더해라] [5]
직접 주소 지정 방식 (Direct Addressing Mode)
명령어 안에 5가 직접 들어있는 것이 아니라
5가 저장된 메모리 주소가 들어있음
[명령: 더해] [주소: 100번지] → [메모리 100번지에 5가 있음]
장점
큰 데이터나 여러 데이터 처리 용이
단점
메모리를 찾아가야 하느 좀 느리다.
간접 주소 지정 방식 (Indirect Addressing Mode)
설명
유효 주소의 주소를
오퍼랜드 필드
에 명시하기직접 주소 지정 방식보다
유효 주소 범위
가 넓어진다. (더 많은 데이터)두 번의 메모리 접근이 필요해서
직접 주소 지정 방식보다 느리다.
동작방식..
명령어에 지정 된 주소 → 메모리 위치 A
메모리 위치 A 에 저장된 값은 또 다른 주소(메모리 위치 B) 나타냄
최종적으로 메모리 위치 B에서 실제 데이터를 가져온다.
왜 이렇게 복잡하게 쓰는 거지?
유연하잖아
데이터 실제 위치를 명령어에 고정하지 않음
중간 주소를 통해 동적으로 참조한다.
프로그램 실행 중에 데이터의 위치가 변경되더라도 중간 주소만 수정하면 된다.
데이터 구조
배열, 연결 리스트, 테이블 같은 복잡한 데이터 구조를 다룰 때 유리함
리스트의 다음 요소 주소를 저장해두고 간접적으로 접근이 가능함.
레지스터 주소 지정 방식 (Register Addressing Mode)
설명
연산에 사용할 데이터를
레지스터
에 저장.해당 레지스터를 오퍼랜드 필드에 직접 명시함.
직접 주소 지정 방식과 비슷함
CPU 내부의 레지스터를 사용하기에 메모리 접근보다 빠르다.
단점
레지스터 크기 제한이 있음.. 데이터 양의 제한이 있다.