archive-of-lena
iOS
Swift
UIKit
회고
Computer Science
Networking
짧은 메모
방명록
Home
Lena's Archive
iOS
Swift
UIKit
회고
Computer Science
컴퓨터구조
Networking
짧은 메모
방명록
컴퓨터구조
1. MIPS Introduction
H
Mar 4, 2024
2. Arithmetic Instructions
H
Mar 9, 2023
3. Data Transfer Instructions
H
Mar 16, 2023
r-format
i-format
lw
sw
lb
sb
4. Logical & Shift Instructions
H
Mar 21, 2023
4. Logical & Shift Instructions
Created by
H
HM
Date
Mar 21, 2023
MIPS Logical Instructions
and, andi, or, ori, xor, nor, ….
bit-by-bit operation
→ 다른 자리에 의해서 영향받지 않는다
inverting 명령어를 굳이 가지고 있지 않아도 된다 →
nor
이용하면 됨
and, or, xor, nor
usages
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/eed7353f-b35b-4cdb-bae2-2932be20b973/Screenshot_2023-04-18_at_12.01.12_PM.png
s3-us-west-2.amazonaws.com
and
한쪽이 1일 때는 그대로 / 한 쪽이 0일 때는 마스킹
2F만 남기고 모두 마스킹시키고 싶다면, 나머지를 모두 0으로 세팅하면 된다.
0xF234012F AND 0x000000FF = 0x0000002F
or
combining bit fields
nor
특정 bit를 반전시키고 싶을 때
조건 → source 피연산자 중 하나가 0이어야 함
R-format
and (or, nor) rd, rs, rt
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f91f64ea-dd24-4989-aca0-affac1141224/Screenshot_2023-04-04_at_12.55.54_PM.png
s3-us-west-2.amazonaws.com
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/02608e91-2081-41b1-8e19-fd82fd94324f/Screenshot_2023-04-04_at_12.57.16_PM.png
s3-us-west-2.amazonaws.com
andi
,
ori
I-format instruction
andi (ori) rt, rs, imm
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/76ad237b-00ab-4759-92c2-210a0ff6dd45/Screenshot_2023-04-04_at_12.57.29_PM.png
s3-us-west-2.amazonaws.com
Sign-extension & zero-extension
가급적 sign-extension 을 취한다 (기본) → zero-extension은 예외적
기본이 sign-extension 이라는 것의 의미
: 어떤 value를 따질 때 2의 보수 체계로 해석하겠다
논리연산은 예외
논리연산에 한해서 zero-extension을 하기로 약속함
Shift
shift types
logical shift
arithmetic shift
shift directions
left → 2의 배수를 곱한다
right → 2의 배수를 나눈다
결과값이 정수가 아니면, **floor value (**작거나 같은 가장 큰 정수)를 취한다
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/402e03b6-9790-451a-a665-01b55ecd303a/Screenshot_2023-04-04_at_12.59.35_PM.png
s3-us-west-2.amazonaws.com
Logical Shift
1.
Logical shift left
2.
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b94a2822-8acf-4483-af3d-8a3258e6412e/Screenshot_2023-04-04_at_1.01.23_PM.png
s3-us-west-2.amazonaws.com
MSB: MSB는 없어진다
LSB: LSB는 새로운 공간이 생겨서 채워야 함 → 0으로 채움
3.
Logical shift right
4.
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c0b517e4-f3a5-41b0-9ba9-099340ea1051/Screenshot_2023-04-04_at_1.02.02_PM.png
s3-us-west-2.amazonaws.com
LSB: LSB 없어진다
MSB: 빈공간 → 0으로 채움
unsigned value를 다루는 것과 같은 효과를 가진다 (0으로 채우니까)
Arithmetic Shift
1.
Arithmetic shift right
MSB:
원래 가지고 있던 sign 값으로 채운다
LSB: 없어진다
(1100 >>> 3) = 1111
2.
Arithmetic shift left
그냥 0으로 채우면 된다
MIPS Shift Instructions
sll, srl, sra
R-Format
shift-amount 가 존재하니까
그러나 두 개의 레지스터와 shift-amount 를 표시한다
sll rd, rt, shamt
// shift left logical
srl rd, rt, shamt
// shift right logical
sra rd, rt, shamt
// shift right arithmetic (sign-extension: MSB와 같은 값으로 extension한다 → 부호있는 수의 shift 연산에 사용됨)
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/87775c2b-beda-4547-99f8-2c50b8862ed9/Untitled.png
s3-us-west-2.amazonaws.com
sllv, srlv, srav
variable-shift instructions
상수만큼 shift 하는게 아닌
a
만큼 shift 하고싶을 때 사용
R-Format
sllv rd, rt, rs
// shift left logical variable
srlv rd, rt, rs
// shift right logical variable
srav rd, rt, rs
// shift right arithmetic variable
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dfbec090-6cff-4c1b-8b40-444085f2bc8d/Screenshot_2023-04-04_at_1.18.44_PM.png
s3-us-west-2.amazonaws.com
shift operations
sll, srl
sll $rd, $rt, 4
// 4가 sa. $rt를 4만큼 shift해서 rd에 담는다
sllv, srlv
sllv $rd, $rt, $rs
sll
srl
과 비슷하지만, shift amount가
$rs[4:0]
즉, 하위 다섯비트에서 온다
→ $rs가 가지고 있는 32bit 중 하위 5bit만큼 shift 한다는 의미
sra, srav
shift right arithmetic → sign-bit 를 확장한다
2의 보수 숫자를 나눌 때 유용
32비트 상수 load하기
1.
lw
instruction 사용하기
2.
→ 좋지않은 방법 (상수가 메모리에 있다는 가정하에 쓰는 것이므로)
3.
lui, ori
명령어 사용하기
lui
: load upper immediate (상위 16bit 먼저 load)
ori
: or immediate (하위 16bit)
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2bacf01a-ec8c-42a9-b28a-27ce8038ea8f/71692AD1-901A-48F0-A2EE-6E2BA0C14221.jpeg
s3-us-west-2.amazonaws.com
Pseudo Instructions
가짜 instruction. MIPS가 이해하지 못하는 명령어. 프로그래머나 컴파일러를 위해 만든 명령어
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/20f8629d-f525-483c-8460-496c9db17a48/Screenshot_2023-04-04_at_1.27.57_PM.png
s3-us-west-2.amazonaws.com
Made with SlashPage