개발/컴퓨터구조

[컴퓨터구조] Logical Operation란? (+ 계산방법)

IT의 타이탄 2023. 9. 21. 14:32
SMALL

안녕하세요 이번 글에서는 Logical Operation란 무엇이며, 이에 대한 계산방법은 어떻게 하는지에 대해 가르쳐드릴까 합니다.

 

 

Logical Operation는 Mips Instruction에서 사용되는 명령어인데요. 이에 대한 내용들을 이번 글에서 풀어보고자 합니다.

 

 

이 글은 다음과 같은 상황에 처하신 분이 본다면, 효과적인 글입니다.

 

 

1. 컴퓨터 구조시간에 Logical Operation를 배웠지만, 잘 이해가 되지 않는 분

 

2. 교수님에게 질문하기에는 부끄러워서 혼자서 논리 연산에 대해 배우려고 하시는 분

 

3. Logical Operation에 대한 과제를 하려고하는데 개념에 막혀서 이도저도 못하시는 분

 

 

이번 글의 목차는 다음과 같으니, 여러분에게 필요한 정보만 가져가시길 바랍니다.

 

 

[목차]

 

1. Logical Operation란?

 

2. Logical Operation를 MIPS instruction에서 어떻게 계산하는지? 

 

 

서론이 길었습니다. Logical Operation에 대해서 먼저 알아보도록 하겠습니다.

 

 

Logical Operation에 대한 a부터 z까지

1. Logical Operation란?

Logical Operation란, 논리 연산에 사용하는 논리 명령어 입니다.

 

 

컴퓨터구조를 배우기전에 소프트웨어의 이해와 같은 1학년 과목 혹은 수학에서 우리는 다음과 같은 기호 및 명칭을 본적이 있을 것입니다.

 

AND / OR / NOR

 

Mips Instruction에서도 산술 연산이 아닌 논리연산도 가능한데요. 이는 컴퓨터는 2진수로 계산을 하기 때문에 가능한 일입니다.

 

 

그렇다면 Logical Operation에서는 주로 어떤 명령어가 쓰이는지 보도록 하겠습니다.

 

 

Logical Operation에서는 사진과 같이 AND / OR / NOR / ANDI / ORI / SLL / SRL 이 존재합니다.

 

 

이에 대한 계산방법을 한번 알아보도록 하겠ㅅ븐디ㅏ.

 

 

2. Logical Operation 계산 방법

1. AND, OR, NOR

 

먼저 AND의 경우에는 3개의 목적어가 뒤에 붙습니다. 예를 들어 다음과 같은 논리 연산 instruction이 존재한다고 가정합시다.

 

 

and $s1, $s2, $s3

 

 

이 구조에서는 다음과 같은 개념들이 사용되곤 합니다.

 

명령어 목적지 operand, 소스1 operand, 소스2 operand 

 

즉, 여기서는 and는 명령어가 되고 $s1는 목적지 oprand ,$s2는 소스1 operand, $s3는 소스2 operand가 됩니다.

 

 

add instruction에서 배운것처럼 and를 그대로 적용하면 $s1의 값에다가 $s2와 $s3의 and 연산한 것을 담아라 라는 뜻이 됩니다.

 

 

or과 nor도 마찬가지로 위와 같은 구조가 있다면 다음과 같이 해석해서 문제를 해결하시면 됩니다.

 

#or 연산 예시
or $s1, $s2, $s3 #$s1의 값에다가 $s2와 $s3의 or 연산한 것을 담아라

#nor 연산 예시
nor $s1, $s2, $s3 #$s1의 값에다가 $s2와 $s3의 nor 연산한 것을 담아라

 

그렇다면 andi와 ori는 어떤 구조로 이루어져 있을까요? 아마 이전의 글을 학습하시거나 눈치가 빠르신분들은 알아차렸을지도 모릅니다.

 

👉  눈치가 빠른사람이 되기 위해선?

 

 

 

2. andi, ori

 

andi와 ori는 소스2 목적어가 오는 자리에 상수가 들어오게 됩니다.  따라서 다음과 같은 문장구조를 가지고 있습니다.

 

명령어 목적지 operand, 소스1 operand, 상수

 

이때, 상수의 범위는 16bit 즉, 0 ~ 2^16입니다. 그 이유는 I-format이라는 Mips Instruction을 표현하는 방법 때문인데요.

 

 

이는 아직 안다뤘기 때문에 범위가 그렇다는 것만 알고계시면 될 것 같습니다.

 

 

이에 대한 계산 방식은 다음과 같습니다.

 

#andi 연산 예시
andi $s1, $s2, 2 #$s1의 값에다가 $s2와 2를 and 연산한 것을 담아라

#ori 연산 예시
ori $s1, $s2, 2 #$s1의 값에다가 $s2와 2를 or 연산한 것을 담아라

 

다음은 sll과 srl에 대해 배워보도록 하겠습니다.

 

 

3. sll, srl

 

sll이란, shift left logical이라는 의미로, 왼쪽으로 비트들은 N만큼 움직이라는 명령어입니다.

 

 

srl이란, shift right logical이라는 의미로, 왼쪽으로 비트들은 N만큼 움직이라는 명령어입니다.

 

 

예를들어, $s0이 9라는 값을 가지고 있고 왼쪽으로 4만큼 움직였을 때의 값을 $t2에 담아라는 식과 값은 다음과 같습니다.

 

sll $t2, $s0, 4

$s0 : 0000 0000 0000 0000 0000 0000 0000 1001 = 9 (10진수)

$t2 : 0000 0000 0000 0000 0000 0000 1001 0000 (왼쪽으로 4칸 움직임) = 144 (10진수)

 

마찬가지로 sll을 srl로만 바꾸고 상수값이 2가 들어올 때의 값은 다음과 같습니다.

srl $t2, $s0, 2

$s0 : 0000 0000 0000 0000 0000 0000 0000 1001 = 9 (10진수)

$t2 : 0000 0000 0000 0000 0000 0000 0000 0010 (오른쪽으로 2칸 움직임) = 2 (10진수)

 

여기서 문제가 하나 발생됩니다. ,srl을 사용할 때에 레지스터에 저장된 값이 음수일 경우에는 이상한 값이 나오게 됩니다.

 

srl $t2, $s0, 1

$s0 : 1000 0000 0000 0000 0000 0000 0000 0000 : -1

$t2 : 0100 0000 0000 0000 0000 0000 0000 0000 : 1,073,741,824

 

이처럼 오른쪽으로 1칸을 움직였는데, 음수에서 양수가 되버린 상황이 존재하기 때문에, 이때에는 sra라는 명령어를 사용해야합니다.

 

 

sra는 shift right arthimetic으로 오른쪽 산술 움직임이라는 직역을 가지고 있습니다. 즉, 산술의 경우에는 signed bit로 인식하고 있기 때문에 최상위비트를 통해 음수와 양수를 구분하게 되는 것입니다.

 

 

이에 대한 자세한 내용은 다음글에 설명드리도록 하겠습니다.

 

 


 

지금까지 Logical Operation에 대해 배워보았습니다.

 

 

만약 글을 읽으시고 궁금하신 내용이나 질문이 생겼다면 아래의 댓글을 남겨주시면 감사하겠습니다.

 

 

긴 글 읽어주셔서 감사드리고 더 좋은 정보로 찾아뵙도록 하겠습니다.

LIST