상위 질문
타임라인
채팅
관점
부호 확장
위키백과, 무료 백과사전
Remove ads
부호 확장(Sign extension, 니모닉에서 특히 sext로 약칭)은 컴퓨터 산술에서 숫자의 이진수의 비트 수를 늘리면서 숫자의 부호(양수/음수)와 값을 보존하는 연산이다. 이는 사용되는 특정 부호 있는 숫자 표현에 따라 달라지는 절차에 따라 숫자의 최상위 쪽에 숫자를 추가하여 수행된다.
예를 들어, "00 1010
"(10진수 양수 10)을 나타내는 데 6비트가 사용되고 부호 확장 연산으로 워드 길이가 16비트로 늘어나면 새 표현은 단순히 "0000 0000 0000 1010
"이 된다. 따라서 값과 값이 양수였다는 사실이 모두 유지된다.
2의 보수를 사용하여 "11 1111 0001
"(10진수 음수 15) 값을 나타내는 데 10비트가 사용되고 이를 16비트로 부호 확장하면 새 표현은 "1111 1111 1111 0001
"이 된다. 따라서 왼쪽을 1로 채워서 음수 부호와 원래 숫자의 값이 유지된다.
예를 들어, 인텔 x86 명령어 세트에는 부호 확장을 수행하는 두 가지 방법이 있다.
cbw
,cwd
,cwde
,cdq
명령어를 사용: 각각 바이트를 워드로, 워드를 더블워드로, 워드를 확장 더블워드로, 더블워드를 쿼드워드로 변환(x86 컨텍스트에서 바이트는 8비트, 워드는 16비트, 더블워드 및 확장 더블워드는 32비트, 쿼드워드는 64비트);movsx
("부호 확장 이동") 명령어 계열에 의해 수행되는 부호 확장 이동 중 하나를 사용.
Remove ads
제로 확장
유사한 개념은 제로 확장(때로는 zext로 약칭됨)이다. 이동 또는 변환 연산에서 제로 확장은 대상의 상위 비트를 0으로 설정하는 것을 의미하며, 소스의 최상위 비트의 복사본으로 설정하는 것이 아니다. 연산의 소스가 부호 없는 숫자이면 제로 확장은 일반적으로 숫자 값을 보존하면서 더 큰 필드로 이동하는 올바른 방법이며, 부호 있는 숫자에는 부호 확장이 올바르다.
x86 및 x64 명령어 세트에서 movzx
명령어("제로 확장 이동")는 이 기능을 수행한다. 예를 들어, movzx ebx, al
은 al
레지스터에서 ebx
의 하위 바이트로 바이트를 복사한 다음 ebx
의 나머지 바이트를 0으로 채운다.
x64에서 범용 레지스터의 하위 32비트 전체에 쓰는 대부분의 명령어는 대상 레지스터의 상위 절반을 0으로 만든다. 예를 들어, mov eax, 1234
명령어는 rax
[a] 레지스터의 상위 32비트를 지운다.
Remove ads
같이 보기
각주
- Mano, Morris M.; Kime, Charles R. (2004). Logic and Computer Design Fundamentals (3rd ed.), pp 453. Pearson Prentice Hall. ISBN 0-13-140539-X.
참고
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads