2014-10-31 3 views

답변

6

입니다.

BSWAP (바이트 스왑) 명령어는 32 비트 레지스터 피연산자에서 바이트 순서를 뒤집습니다. 비트 위치 0에서 7은 24에서 31로 바뀌고 비트 위치 8에서 15는 16에서 23으로 바뀝니다.이 명령을 두 번 연속 실행하면 이전과 동일한 값으로 레지스터가 종료됩니다. BSWAP 명령어는 "빅 엔디 언"및 "리틀 엔디 언"데이터 형식간에 변환하는 데 유용합니다. 이 명령어는 또한 십진법 연산의 실행을 가속화합니다. 그 꼭대기에, 괄호로 마지막 문장은에 적용 할 것으로 보인다 성명과 아무 상관이,합니다 (XCHG 명령은. 한마디 바이트를 교환 할 수 있습니다)

합니다. 그리고, 그렇지 않다면 을 의미하므로 왜 괄호를 사용합니까?

결론은 DOCO가 여전히 오히려 같은 방법을에,


:-) 영어에 대한 그 고문 범죄를 잡은 그러나 것이다 기술 작가보다 인텔의 엔지니어에 의해 기록되고 있다는 점이다 10 진수 작업 속도를 높일 수있는 것은 오직 한 가지 가능성이 떠오른다는 것입니다 (솔직히 말해서 도약보다 더 힘들었습니다).

큰 숫자가 문자 당 하나씩, 메모리에 순차적으로 배치되어있는 경우 한 번에 4 자리 숫자를 처리 할 수있는 경우 성능이 향상 될 수 있습니다. 그러나 리틀 엔디안 시스템에서 메모리 (sequential-in-memory) 바이트 {0x01, 0x02, 0x03, 0x04}을 32 비트 값 (dword)으로로드하면 0x04030201이됩니다.

bswap을 사용하면이를 다시 쓰기 전에 bswap을하기 전에 dword로 조작하기가 더 쉬울 수 있습니다. 하지만 인텔은 우리가 훨씬 당신이 참조하는 문서에 갈 제공되지 않습니다 (내가 교육 추측 (A) 고려하고 싶습니다하지만) 부여

, 그건 추측입니다. bswap의 모든 어커런스에 대해 볼륨 1, 2a, 2b, 2c, 3a, 3b 및 3c를 검색해도 볼륨이 명확하게 표시되지 않습니다.


(A) 인텔은 내가했다 기억할 수있는 최초의 어느 시대,이 같은 물건을 몇 가지 "몰래"지침이 있었다 사용 후 BCD 값 (바이트 당 2 개씩) 조정하는 daa/das 지침 바이트 기반 비 BCD 추가 그것은 철저한 검색을 수행하지는 않았지만 그들이 dwords 내의 숫자 문자에 대해 비슷한 것을 가질 수 있다고 생각하는 가능성의 영역을 넘어서는 것은 아닙니다.

첫 번째 단계에서는 IEEE754 표준의 십진수 측을 구현하는 라이브러리 인 Intel의 IDFPL을 살펴볼 수 있습니다. 그렇지 않은 경우 다른 고성능 십진 라이브러리에서 사용될 수 있습니다.

+0

''dwords'에 대한 것과는 아무 것도 없습니다 (문서화되지 않은 지침이 아니라면 문서화되지 않은 지침이 아닌 한),'daa'-family (packed)와'aaa'-family (포장하지 않음) – harold

2

일반적으로 10 진수 연산은 가변 길이 정수 또는 압축 십진수의 고정 소수점 문자열에서 수행되며 이러한 문자열을 빅 엔디안 모드로 저장하는 것이 더 편리합니다. 데이터는 한 번에 4 바이트를 레지스터에로드 한 다음 BSWAP가 데이터를 교환하는 데 사용됩니다. 그러나 언급 한 바와 같이 십진수 조정 지침은 바이트 지향이므로 이러한 십진 조정 지침을 사용하면 레지스터를 한 번에 8 비트 씩 회전하여 바이트 지향 수학을 수행 할 수 있습니다. BSWAP는 첫 번째 회전 대신 사용할 수 있지만 여기서는 별다른 이점이 없습니다. 만약 32 비트 패킹 십진수를 구현하는 영리한 속임수가 있다면 나는 모른다. BSWAP가 도움이된다.

관련 문제