시프트연산, 덧셈연산

원래벌레·2022년 4월 19일
0

💎 시프트 연산

  • 시프트 연산은 직렬 데이터 전송입니다.

💍 논리적인 시프트 연산

  • 좌측 시프트 연산 : 왼쪽으로 이동 시키고 비는 곳은 0으로 채운다.

  • 우측 시프트 연산 : 우측으로 이동 시키고 비는 곳은 0으로 채운다.

  • 순환 시프트 : 연산이 순환적으로 이루어져서
    A레지스터의 있는 값을 B 레지스터로 옮길 때와 같은 일을 할 때 사용된다.
    ex) A : 1101 / B : 0000
    4번 연산이 발생한 후 결과 A : 1101 / B : 1101

💍 산술적인 시프트 연산

  • 좌측으로 가면 2배, 우측으로가면 12\frac12배 된다.

  • 좌측 시프트 연산
    1) 부호 비트는 고정시키고, 좌측으로 이동시킨다.
    2) 비는 곳은 0으로 채운다.
    3) 만약에 현재 가지고 있는 비트 이상으로 이동을 하려고하면 , 논리적인 시프트 연산이 발생하고 모든 비트는 0이 된다. 이 경우 오버플로우로 인식한다.

  • 우측 시프트 연산
    1) 부호 비트는 고정시키고, 우측으로 이동 시킨다.
    2) 비는 비트는 부호 비트로 채운다.
    3) 우측 시프트를 하면서 언더플로우가 발생하다가 모든 자리수의 비트가 0또는 1만 있을때, 0 또는 -1로 인식하고 또 다시 좌측 시프트 연산을 하더라도 값이 달라지지 않는다.

💍 시프트 연산을 이용한 mask 방법

  • 이진수로 표현된 어떤 자료중 특정 부분을 추출하고 싶을 때,
    1) 원하는 부분의 끝이 이진수의 0의 자리수에 오도록 해준다.
    2) 앞에 부분을 mask 처리한다.

  • if문의 bool 제어
    1) if(x) a=y else a=z; which is the same as z=x ? y : z ;
    2) 위의 식은 a = ((x<<31) >>31)&y +((!x) << 31 ) >> 31) & z ;
    3) 위의 식으로 x가 1일때 a=y, x가 0일때는 a=z가 된다.

💎 덧셈

  • 두 수를 더하고, 만약 올림수가 발생하면 버림

  • Full Adder 회로 여러개를 통해서 여러 비트의 합을 구합니다.

  • C플래그 : 올림수
    S플래그 : 부호
    Z 플래그 : 0(zero)
    V 플래그 : 오버플로우 - 4비트 덧셈 연산을 기준으로 C4와 C3의 값이 서로 다르면 오버플로우가 발생합니다.

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글