본문 바로가기

CS

[어셈블리] 쉬프트 연산

쉬프트 연산

쉬프트 연산은 비트를 좌측이나 우측으로 옮기는 연산인데,

산술 쉬프트 연산에서는 최상위 비트를 그대로 유지함

ex) 1001 1010  >>1  => 1101 0101 

 

어셈블리에서는 shl, shr을 통해 쉬프트 연산을 할 수 있다.

mov eax, 0x12345678

처음에 eax에 4바이트의 데이터를 저장한다.

shl eax, 8 

=>34567800

shr eax, 8

=>345678

왼쪽으로 8비트(2바이트)만큼 이동했다가 오른쪽으로 다시 8비트만큼 이동했다. 

 

쉬프트 연산을 할 때 <<1을 하면 부호가 양수인 가정 하에 모든 비트가 x2되므로 값이 두배 증가한다. >>1을 하면 마찬가지로 양수일 때 값이 원래 값에 2로 나눈 것과 같다. 그래서 컴파일러가 내부적으로 계산을 할 때 사용하기도 한다.

 

 

'CS' 카테고리의 다른 글

[어셈블리] 반복문  (0) 2022.06.18
[어셈블리] 분기문  (0) 2022.06.18
[어셈블리] 입출력, 사칙 연산  (0) 2022.06.18
[어셈블리] 변수와 레지스터  (0) 2022.06.18
[어셈블리] 레지스터 기초  (0) 2022.06.18