부호 확장자

Sign extension

부호 확장자(약칭 sext)는 컴퓨터 산술에서 숫자부호(양수/음수)와 값을 유지하면서 2진수의 비트 수를 늘리는 연산입니다.이것은, 사용하는 특정의 부호 있는 번호의 표현에 의존하는 순서에 따라서, 번호의 최상위 측에 숫자를 부가하는 것으로 행해집니다.

예를 들어 6비트가 숫자 "를 나타내기 위해 사용되는 경우00 1010(10의 플러스 기호)와 부호 확장 연산은 워드 길이를 16비트로 증가시키고 새로운 표현은 단순하다.0000 0000 0000 1010따라서 값과 값이 양수라는 사실이 모두 유지됩니다.

값을 나타내기 위해 10비트가 사용되는 경우 "11 1111 00012의 보수를 사용하는 (15진수 마이너스) 부호를 16비트로 확장한 경우, 새로운 표현은 다음과 같습니다.1111 1111 1111 0001따라서 왼쪽을 1로 채움으로써 음의 기호와 원래 숫자의 값을 유지할 수 있습니다.

를 들어 인텔 x86 명령어 세트에서는 부호 확장을 하는 방법은 다음 두 가지가 있습니다.

  • 사용설명서cbw,cwd,cwde,그리고.cdq: 바이트를 워드로, 워드를 더블워드로, 워드를 더블워드로, 더블워드를 쿼드워드로 각각 변환합니다(x86 컨텍스트에서는 바이트는 8비트, 워드 16비트, 더블워드와 확장 더블워드 32비트, 쿼드워드 64비트가 있습니다).
  • 부호 확장 이동 중 하나를 사용하여, 에 의해 실현됩니다.movsx("부호 확장자를 사용하여 이동") 명령 패밀리.

내선번호 제로

비슷한 개념은 제로 확장(zext로 줄임말)입니다.이동 또는 변환 동작에서 제로 익스텐션은 송신원의 최상위 비트의 복사본으로 설정하는 것이 아니라 수신처의 상위 비트를 0으로 설정하는 것을 의미합니다.작업의 소스가 부호 없는 번호인 경우, 일반적으로 숫자 값을 유지하면서 더 큰 필드로 이동하려면 확장자가 0인 것이 올바른 방법이며, 부호 확장자는 서명된 번호에 대해 올바른 방법입니다.

x86 및 x64 명령어세트에서는movzx명령("확장 0으로 이동")은 이 기능을 수행합니다.예를들면,movzx ebx, al에서 바이트를 복사합니다.al하위 바이트에 등록하다ebx나머지 바이트를 채웁니다.ebx0으로 표시해 주세요.

x64 에서는, 범용 레지스터의 하위 32비트 전체에 기입하는 대부분의 명령은, 행선지 레지스터의 상부를 제로로 합니다.예를 들어, 명령어는mov eax, 1234위의 32비트를 클리어합니다.rax[a] 등록합니다.

「 」를 참조해 주세요.

레퍼런스

  • 마노, 모리스 M.; 키메, 찰스 R. (2004)로직과 컴퓨터 설계의 기초 (제3판), 페이지 453.피어슨 프렌티스 홀입니다 ISBN0-13-140539-X.

메모들