본문 바로가기
  • 컴공생의 공부 일기
  • 공부보단 일기에 가까운 것 같은
  • 블로그
📖 CS/시스템소프트웨어

💾시소실 - MIPS(ISA) 비트 포멧,산술연산,논리연산, Data Transfer 연산,branch&jump 연산

by 정람지 2023. 9. 11.

비트 포맷 

MIPS의 instruction은 모두 32비트 포맷으로 구성됨

메모리 : 4 기가바이트

 

메모리 용량이랑 instruction 크기가 32비트로 같은데 어떻게 메모리 주소를 표시함?

메모리는 직접 하지 않고 레지스터로 올린 후에 레지스터 주소를 표시 (느림)

그래서 메모리 직접접근은 Data Transfer instructions로 한정

연산 : 6비트 / 피연산자 5비트/

MIPS의 산술연산

저 이그잼플 번호들이 레지스터  (어셈블리 언어)

 

덧셈

뺄셍

맨 밑 add immediate 

기계어 자체에 숫자가 들어가 있음

instruction에 값이 들어있는 게 아니라 주소가 잇는거! 근데 immediate는 다른 거 (빠르단소리)

32비트 꽉 채워서 쓰게 됨

곱셈은 32비트 32비트 연산 시 64비츠까지 나올 수가 잇으므로 레지스터 3개로 한 되고 

아웃품 레지스터 2개도 필요함

low/high라는 맨 아래 레지스터 두개 곱셈 아웃풋 레지스터

(낮은 자릿수/높은 자릿수 저장)

 

(지금까지 정수 연산 보고 있는 거임)

나눗셈도 몫과 나머지로 저장이 됨

마찬가지 low/high라는 맨 아래 레지스터 두개에 저장이 됨

 

 

 

 

논리 연산과/ 메모리를 전달하는 메모리 트랜스퍼 연산

논리 연산도 레지스터 3개 => 2기 피연산자 하나는 결과 저장

 

c언어는 0이 아닌 모든 숫자는 다 참 ( 4&-8 은 참)

 

비트 단위의 연산 // 각 32비트 자리별로 비트 단위 연산! 

 

이것도 숫자를 직접 하는 immediate 있음 

16비트(immediate)와 32비트를 연산할 때 16비트짜리를 전부 0으로 확장함(일반적)

2의 보수 형태로 음수를 표시함

 

2의 보수: 어떤 수를 커다란 2의 제곱수에서 빼서 얻은 이진수

메모리에 접근하는 연산

load / store 크게 두 종류로 나뉨

읽어옴/저장

 

메모리의 주소를 나타내기 위해서 32비트 주소가 필요함

레지스터에 보통 넣어 놓음 

매번 바꾸는 건 어려우니 "떨어진 위치" 를 표시하기도 함 meaning에 +100(100만큼 떨어진 곳)

 

unsighed 가 붙으면 양수로 해석 취급 (남은 부분을 0로 채움)

signed 최상위 비트 확장

unsigned 0 확장

 

word 4바이트엿음!

4의 배수가 아닌 지점에서부터 읽고 싶으면 halfword 2번으로 끊어서 읽는 등의 조건이 잇음


branch & jump 연산

조건 분기 연산

branch on equal 

조건 없는 점프

26비트로 점프의 타겟 위치 표현 

 

점프 레지스터

위치를 레지스터 안에 적어놓고 쓰기 (시간이 추가적으로 걸림)