답변
를 사용하여 아래의 조립 작업을 다시 쓸 수있는 방법. 그냥 eax
을 제로, 그 후 ax
을 설정
XOR EAX, EAX
MOV AX, [short_temp]
당신이 [EAX]
에서 단어를 가져올 경우 here을 말했듯이, 단지 사전에 다른 레지스터에 주소를 저장 : 경우,
MOV EBX, EAX
XOR EAX, EAX
MOV AX, [short_temp]
또는 그게 가능하지, AND
를 사용 @fuz proposed으로 수행하고 EAX
의 상위 16 개 비트를 지우 :
MOV AX, [EAX]
AND EAX, FFFFh
movzx
을 피할 필요가 없습니다. EAX와 같은 32 비트 레지스터를 사용할 수있는 경우 코드가 386 이상에서 실행되므로 movzx
도 지원됩니다.
인텔 CPU에서 가장 효율적인 방법입니다. movzx r32, [memory]
은 ALU 연산없이로드 uop 만 디코딩합니다. 대기 시간은 일반로드 (IIRC)와 같으므로로드 장치에 의해 0 확장이 무료로 수행됩니다.
AMD Bulldozer 계열 CPU에서 movzx
은 항상 ALU 포트 (메모리 피연산자 일 때로드 포트는 물론)를 사용하므로 단어로드를 사용하기 전에 이론적으로 EAX를 xor-zero로 빨라질 수 있습니다 (@ Downvoter 's answer). 이렇게하면 코드 크기가 커지고 프론트 엔드가 디코딩 할 때 더 많은 m-ops의 비용으로로드 사용 대기 시간을 1 사이클 낮출 수 있습니다.
부분적으로 레지스터 쓰기 (AX)를 한 후 EAX를 읽거나 다른 대기 시간을 추가하는 별도의 ALU 연산이기 때문에 AX에 워드로드를 수행 한 다음 and eax, 0xFFFF
과 같은 다른 제안이 명백히 나 빠졌다. (xor-zeroing avoids the partial-register penalty, 인텔 P6 계열 CPU에서도 마찬가지입니다.)
- 1. 어떻게이 쿼리를 Hibernate에 쓸 수 있습니까?
- 2. 어떻게이 URL에 대한 정규식을 쓸 수 있습니까?
- 3. 어떻게이 bash 스크립트에서 'a'를 쓸 수 있습니까?
- 4. 어떻게이 간단한 라인을 가지고
- 5. 어떻게이 PHP 라인을 Java로 포팅 할 수 있습니까?
- 6. 어떻게이 쿼리의 Linq를 쓸 수 있습니까? LINQ (C#을)
- 7. 어떻게이 4 개의 열을 다른 열에 연결하여 쓸 수 있습니까?
- 8. 내 코드를 리팩토링하십시오. 한 줄에 어떻게이 줄을 쓸 수 있습니까?
- 9. 어떻게이 행을 다시 쓸 수 있습니까? 내 코드에서
- 10. 람다, 맵, 필터를 사용하지 않고 어떻게이 함수를 쓸 수 있습니까?
- 11. GCC를 사용하여 어셈블리 출력으로 인라인 라인을 인라인 할 수 있습니까?
- 12. 어떻게이 오류를 해결할 수 있습니까?
- 13. 이주기를지도로 다시 쓸 수 있습니까?
- 14. 의견을 쓸 수 있습니까
- 15. 어드레싱 모드는 다음과 같이 쓸 수 있습니까?
- 16. 어떻게이 라인을 가지고 모두 선택 확인란
- 17. Jest Uncovered Lines - 어떻게이 라인을 테스트합니까 ..?
- 18. R : 하나의 변수로 라인을 하나씩 다르게 그립니다.
- 19. 어떻게이 날짜를 선택 날짜로 변경할 수 있습니까
- 20. 어떻게이 오류를 해결할 수 있습니까?
- 21. 어떻게이 배열을 만들 수 있습니까?
- 22. 어떻게이 JSON을 읽을 수 있습니까?
- 23. 어떻게이 배경을 만들 수 있습니까?
- 24. 어떻게이 문제를 해결할 수 있습니까?
- 25. 어떻게이 방법을 사용할 수 있습니까?
- 26. 어떻게이 방정식을 풀 수 있습니까?
- 27. 어떻게이 레이아웃을 얻을 수 있습니까?
- 28. 어떻게이 정규식을 바꿀 수 있습니까?
- 29. 어떻게이 키보드를 만들 수 있습니까?
- 30. 어떻게이 값을 반향시킬 수 있습니까?
비효율적이지만 2 개의 _mov_ 명령어를 사용할 수 있습니다. 'mov eax, 0'' mov ax, [short_temp]'. 질문을 문자 그대로 해석 할 필요가없는 경우 더 좋은 방법이 있습니다. (예 : _only_ mov 사용) –