비트 포맷
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비트로 점프의 타겟 위치 표현
점프 레지스터
위치를 레지스터 안에 적어놓고 쓰기 (시간이 추가적으로 걸림)
'📖 CS > 시스템소프트웨어' 카테고리의 다른 글
💾시소실 - MIPS(ISA) C언어와 MIPS 어셈블리 언어 (0) | 2023.09.14 |
---|---|
💾시소실 - MIPS(ISA) 연산별 비트 구조 (0) | 2023.09.14 |
💾시소실 - MIPS(ISA) 레지스터 및 메모리 모델 (0) | 2023.09.08 |
💾시소실 - 시스템 소프트웨어와 ISA (0) | 2023.09.08 |