외로운 Nova의 작업실
Assembly 언어 공부 - 25(시프트와 회전 명령어) 본문
안녕하세요. 이번시간에는 어셈블리어의 시프트 연산과 회전 명령어에대해 알아보겠습니다.
- 시프트와 회전 명령어
SHL | 왼쪽 시프트 |
SHR | 오른쪽 시프트 |
SAL | 왼쪽 산술 시프트 |
SAR | 오른쪽 산술 시프트 |
ROL | 왼쪽 회전 |
ORO | 오른쪽 회전 |
RCL | 왼쪽 캐리포함 회전 |
RCR | 오른쪽 캐리포함 회전 |
SHLD | 2배 정밀도 왼쪽 시프트 |
SHRD | 2배 정밀도 오른쪽 시프트 |
- 논리 시프트와 산술 시프트
시프트 연산에는 총 2가지가 있습니다. 논리 시프트 연산과 산술 시프트 연산이죠. 시프트 연산을 할때는 항상 공백비트가 생깁니다. 이 공백비트를 0으로 채우는게 논리 시프트 연산이고, 이전의 숫자의 부호를 유지시키면서 채우는게 산술 시프트 연산이죠.
예를들어, 11111110b 를 오른쪽 시프트를 하게되면 01111111b가 됩니다. 하지만 오른쪽 산술 시프트를 하게되면 11111111b가 됩니다. 이 처럼 빈칸 공백에따라 어떤 비트를 넣을건지에따라 시프트 종류가 다릅니다.
- SHL, SHR
SHL은 왼쪽 시프트 연산입니다. 아래는 예시입니다.
.code
mov bl, 01111111b
shl bl, 1
위 연산의 결과는 11111110b 입니다. 만약 shl bl, 2 였다면, 11111100b가 되었을 겁니다.
SHR은 오른쪽 시프트 연산입니다. 아래는 예시입니다.
.code
mov bl, 11111110b
shr bl, 1
위 연산의 결과는 1111111b 입니다.
- SAL, SAR
SAL은 왼쪽 산술 시프트 연산입니다. 아래는 예시입니다.
.code
mov bl, 01111111b
sal bl, 1
위 연산의 결과는 01111110b 입니다. 부호비트를 0으로 일정하게 유지시켜줍니다.
SAR은 오른쪽 산술 시프트 연산입니다. 아래는 예시입니다.
.code
mov bl, 11111110b
sar bl, 1
위 연산의 결과는 1111111b 입니다. 부호비트를 1로 유지시켜줍니다.
- ROL, ROR
ROL은 왼쪽 회전 연산입니다. 아래는 예시입니다.
.code
mov bl, 10101010b
rol bl, 1
위 연산의 결과는 01010101b 입니다.
ROR은 오른쪽 회전 연산입니다. 아래는 예시입니다.
.code
mov bl, 10101010b
ror bl, 1
위 연산의 결과는 01010101b 입니다.
- RCL, RCR
RCL은 왼쪽 캐리포함 회전 연산입니다. 아래는 예시입니다.
.code
clc ;CF = 0
mov bl, 88h ; CF, BL = 0 10001000b
rcl bl, 1 ; CF, BL = 1 00010000b
rcl bl, 1 ; CF, BL = 0 00100001b
RCR은 오른쪽 캐리포함 회전 연산입니다. 아래는 예시입니다.
.code
clc ;CF = 0
mov bl, 88h ; CF, BL = 0 000010001b
rcr bl, 1 ; CF, BL = 1 000001000b
rcr bl, 1 ; CF, BL = 0 100000100b
'Programming > Assembly' 카테고리의 다른 글
Assembly 언어 공부 - 27(스택 프레임) (0) | 2022.09.10 |
---|---|
Assembly 언어 공부 - 26(double 시프트 연산자와 곱셈, 나눗셈) (0) | 2022.09.06 |
Assembly 언어 공부 - 24(조건부 제어흐름 디렉티브) (0) | 2022.08.30 |
Assembly 언어 공부 - 23(문자열 암호화 예제 프로그램) (0) | 2022.08.27 |
Assembly 언어 공부 - 22(점프 명령어 이론) (0) | 2022.08.25 |