안녕하세요. WH 입니다.
지난 번 글까지해서 산술 연산자에 대한 내용까지 알아보았는데요,
내용이 기억나지 않으시면 아래 글을 참조하시길 바랍니다.
2022.02.07 - [컴퓨터 구조론( MIPS )] - 명령어 : 컴퓨터 언어 1
2022.02.07 - [컴퓨터 구조론( MIPS )] - 명령어 : 컴퓨터 언어 2
논리연산 명령어
논리 연산은 무엇때문에 필요할까요? 비트를 워드 단위로 묶는다( packing )거나, 워드를 비트 단위로 풀때( unpacking ) 주로 사용합니다. 뭐 2의 배수에 대한 곱하기나 나누기에 활용되기도 하지요.
$s0 에 8이 있다고 합시다.
0000 0000 0000 0000 0000 0000 0000 1000 이런 값이 말이죠
sll $t0, $s0, 4 라는 연산을 수행하면
0000 0000 0000 0000 0000 0000 1000 0000 ( = 128 )이 된답니다. 이 값은 $t0라는 레지스터에 저장 되겠죠.
기계어 형식은 다음과 같습니다.
op rs rt rd shamt funct
0 0 16 8 4 0
저번 글에서 미뤘던 shamot ( shift amount )를 나타내며 자리 이동 명령어에서 사용 됩니다. 또한 x만큼의 shift left 는 2^x을 뜻한답니다. 즉 곱하기 right는 나누기를 뜻하게 되겠지요.
논리 연산자 | MIPS instructions |
Shift left | sll |
Shift right | srl |
bit by bit AND | and, andi |
bit-by-bit OR | or, ori |
bit-by-bit NOT | nor ( nor에 피연산자 0을 붙임으로써 not 구현 ) |
AND
AND 는 어떤 비트 패턴에서 0 위치에 해당하는 비트들을 강제로 0으로 만드는 데 사용할 수 있는데, 일부 비트를 감추는 역할을 하기 때문에 마스크라고 부르기도 한답니다. 또한 상수가 논리연산자에서도 유용하기 때문에 andi 가 구현되어 있습니다.
OR
OR은 어떤 비트 패턴에서 두개의 피연사자 중 하나의 해당 비트가 1이면 결과치가 1로 바뀌는 논리 연산을 뜻합니다.
상수는 산술 연산에서 뿐만아니라 논리연산에서도 유용하기 때문에 ori 라는 연산자가 구현되어 있습니다.
NOR
피연산자 두개, 두 피 연산자를 OR한 값을 다시 NOT하는 비트 대 비트 논리 연산인데요. 피연산자 하나를 받아서 피연사자의 비트가 1이면 결과로 0을 0이면 결과를 1로 만듭니다. 또한 NOT 연산을 구현할 수 있는데요
NOR 0 = NOT ( A or 0 ) = NOT( A )가 된답니다. nor 연산은 주로 not 연산을 구현하는데 사용되기 때문에, 상수 피연산자를 사용하는 명령어가 따로 존재하지 않습니다.
참고 andi ori
andi나 ori를 사용하여 16비트에 0을 삽입하여 32비트 상수를 만들 수 있답니다.
이번 글은 조금 짧습니다만, 짧게 쓴 이유가 있습니다. 다음 다룰 내용이
분기와 관련된 내용인데 해당 내용이 길어질 것 같아 잘랐습니다.
읽어주셔서 감사합니다. 다음글도 찾아봐주세요!
'컴퓨터 구조론( MIPS )' 카테고리의 다른 글
명령어 : 컴퓨터 언어 5 (0) | 2022.02.07 |
---|---|
명령어 : 컴퓨터 언어 4 (0) | 2022.02.07 |
명령어 : 컴퓨터 언어 2 (0) | 2022.02.07 |
명령어 : 컴퓨터 언어 1 (0) | 2022.02.07 |
컴퓨터 구조론-기초 1( feat. 왜 배워야 할까 ) (0) | 2022.01.31 |