본문 바로가기

Assembly

7-1강 - Integer Arithmetic 1 (shift와 rotate)

1. Shift and Rotate Instructions

1) Logical Shift

  • 논리 shift는 새로 생긴 자리를 0으로 채운다. 
  • 밀려 나가는 값은 CF로 들어간다.

1> SHL [SHift Left] (Instruction)

=> 2^n을 곱한 것과 같다.

- 왼쪽으로 한 칸씩 shift

- 새로 생긴 자리는 0으로 채운다.

- 마지막으로 밀려 나간 값은 CF에 저장된다. 

2> SHR [SHift Right] (instruction)

=> 2^n을 나눈 것과 같다.

- 오른쪽으로 한 칸씩 shift 

- 새로 생긴 자리는 0으로 채운다.

- 마지막으로 밀려 나간 값은 CF에 저장된다.

2) Arithmetic Shift

  • 새로 생긴 자리를 sign bit로 채운다.
  • 밀려 나가는 값은 CF로 들어간다.

1> SAL [Shift Arithmetic Left] (Instructions)

SHL과 동일하다. (sign bit는 맨 왼쪽에 있는 것이라 왼쪽으로 밀어버리면 CF로 들어가니까)

2> SAR [Shift Arithmetic Right] (Instructions)

- 오른쪽으로 한 칸씩 shift

- 새로 생긴 왼쪽 자리는 sign bit로 다시 채운다. 

- 밀려 나가는 값은 CF에 저장된다.

3) Rotate 계열

bit의 손실이 없다.

 

1> ROL [ROtate Left] (instruction)

- 왼쪽으로 한 칸씩 shift

- 새로 생긴 오른쪽 자리는 맨 왼쪽 bit로 채운다. (rotate)

- 맨 왼쪽 bit (밀려 나가는 bit)은 CF에 저장된다.

2> ROR [ROtate Right] (instruction)

- 오른쪽으로 한 칸씩 shift

- 새로 생긴 왼쪽 자리는 맨 오른쪽 bit로 채운다. (rotate)

- 맨 오른쪽 bit (밀려 나가는 bit)은 CF에 저장된다.

4) Shift Double 계열

1> SHLD [SHift Left Double] (instruction)

형식 : SHLD destination, source, count

- detination을 count만큼 왼쪽으로 shift한다.

- 비워진 비트들은 source의 최상위 비트들로 채워진다.

2> SHRD [SHift Right Double] (instruction)

형식 : SHLD destination, source, count

- detination을 count만큼 오른쪽으로 shift한다.

- 비워진 비트들은 source의 최상위 비트들로 채워진다.

 

2. Shift and Rotate Applications

1) Shifting Multiple Doublewords

element들이 동일한 array의 data에 대해 연쇄적으로 bit를 shift 할 수 있다. 

처음 element는 shift하고 다음 element는 rotate를 해서 새로 생기는 자리를 (1로) 채우면 되기 때문이다.

1> 예제 1

코드

과정

2> 예시 2

2) Isolating a Bit String

특정 bit들을 특정 자리로 골라내는 작업

해당 예제는 month 변수 값을 따로 저장하게 한다.

3) Binary Multiplication

곱셈을 shift로 구현하는 방법


4) Displaying Binary Bits

shift 연산으로 생기는 CF (carry flag)를 보여주는 작업

 


3. Multiplication and Division Instructions
4. Extended Addition and Subtraction
5. ASCII and Packed Decimal Arithmetic