Intel x86 프로세서에서는 멀티 스레드/프로세서 문제를 염려하지 않고 비교가 성공한 경우 메모리를 재설정하여 특정 메모리 위치에서 다른 값과 비교할 수 있습니까? 나는 CMPXCHG 명령을 보았습니다. 또는 비교 및 설정 유스 케이스에 대한 무언가가 있습니까?Intel x86 어셈블리를 사용하여 메모리를 비교하고 재설정 할 수 있습니다.
답변
compare-and-set
은 compare-and-swap
의 변종이며, 여기서 메모리 위치의 데이터가 주어진 값과 일치하는지 여부와 따라서 메모리 위치가 업데이트되었는지 여부에 대한 참/거짓 표시를 얻습니다. compare-and-swap
대안은 메모리에서 읽은 내용을 다시 얻는 것이며 주어진 값과 직접 비교할 수 있습니다.
http://en.wikipedia.org/wiki/Compare-and-swap
CMPXCHG 명령 사실에 compare-and-set
명령이다. 제로 플래그 (EFLAGS.ZF)는 메모리의 값이 EAX (묵시적 레지스터)에 주어진 값과 일치 할 경우 설정됩니다.이 경우 소스 피연산자의 값 (명시 적 레지스터)이 메모리에 저장됩니다. compare-and-swap
명령은 명령 메모리에서, 는, EAX와 대상 메모리에 쓰기 소스 레지스터에 쓰기을 비교 읽을 것을 요구하기 위해, 그 CISC파 인 심지어 X86에 대한 자연스러운 것 우수성.
CMPXCHG가 원자 적으로 실행되도록하려면 접두어 LOCK
을 사용해야합니다. 즉, CMPXCHG를 실행하는 스레드가 다른 스레드가 액세스하기 전에 메모리 위치를 읽은 다음 쓸 수 있습니다.
메모리 위치를 0으로 설정 한 다음 0을 소스 레지스터에서 원하는 값으로 설정했다면 resetting the memory if the compare succeeded
이라고 말하십시오. compare-and-swap
을하는 방법을 휴대
CMPXCHG 명령 대상 피연산자 레지스터 수 있도록 주뿐만 아니라 메모리 위치에 리소스를 참조. 8 바이트를 테스트 할 때 CMPXCHG8B 명령어를 사용합니다. CMPXCHG8B 명령어에 LOCK
접두사를 지정하고 대상으로 레지스터를 지정하면 펜티엄 프로세서에 버그가 있습니다. 자세한 내용은 here
- 1. Intel x86 CPU에서 CAS를 비교하고 가장 빨리 교체하는 방법은 무엇입니까?
- 2. Beeping Bootloader (Intel x86)
- 3. Intel x86 XOR opcode 0x31
- 4. assembly intel x86 구조와 인수로 구조 받기
- 5. Intel x86 어셈블리의 루프 계속 진행 중
- 6. 어셈블리를 통해 마우스 액세스 x86
- 7. x86 어셈블리를 사용하는 세마포어 구현
- 8. x86 어셈블리를 사용한 제곱근 함수?
- 9. Intel x86 에뮬레이터에서 GCM을 사용하는 방법
- 10. GCC와 함께 Intel x86 구문의 인텔 구문을 사용할 수 있습니까?
- 11. 작은 어셈블리 코드 시퀀스 최적화 (Intel x86)
- 12. Intel x86 어셈블리 - lt, gt, eq
- 13. x86 어셈블리를 사용하는 .wav 파일 읽기
- 14. Google지도와 새로운 Intel Atom x86 에뮬레이터
- 15. .Net GAC에서 어셈블리를 등록 할 수 없습니다.
- 16. 값 - x86 NASM 어셈블리를 복사하는 방법
- 17. 타사 어셈블리를 다시 서명 할 수 있습니까?
- 18. 두 어셈블리를 비교하고 변경 사항을 찾으십니까?
- 19. argv에서 x86 어셈블리를 통해 파일 이름 읽기
- 20. x64 응용 프로그램에서 x86 어셈블리를 사용할 수 있습니까?
- 21. Segfault가 x86 어셈블리를 재사용하려고 시도했을 때
- 22. x86 어셈블리를 사용하여 데이터 세그먼트에서 데이터를 읽으려면 어떻게해야합니까?
- 23. int를 사용하여 키보드 버퍼 x86 어셈블리를 플러시 16h
- 24. x86 자료를 사용하여 64 비트 OS에서 어셈블리를 학습 하시겠습니까?
- 25. x86 어셈블리를 사용하여 vga 텍스트 화면을 반으로 바꿉니다
- 26. 여기서 java-x86-windows.dll을 다운로드 할 수 있습니다
- 27. Windows에서 x86 Linux 어셈블리를 에뮬레이트하는 방법
- 28. 이 꿀꺽 꿀꺽와 anycpu를 어셈블리를 만들 수 있습니다 꿀꺽 꿀꺽
- 29. WinSCP .NET 어셈블리를 사용하여 디렉토리에 파일을 다운로드 할 수 없습니다.
- 30. 어셈블리를 등록 할 수 없습니다.