점프 명령문을 사용할시기를 결정하는 방법 JG JNLE JNC와 같은 명령문은 동일한 작업을 수행 할 수 있습니다. 어떻게 차별화 할 수 있습니까?어셈블리 프로그래밍의 점프 문 차이점
4
A
답변
4
J(E)CXZ 일반적으로 루프의 반복을 제한하는 데 사용하는 CX 레지스터에 카운트 값이있는 경우에 사용됩니다.
JMP는
이전 계산의 조건에 따라 실행 스레드를 변경하는 데 사용되는 점프 테이블을 구축, 루프를 종료 비 CALL 기반 인터페이스에서 API를 입력하는 데 사용 무조건 점프 등이다. 많은 동의어가 있습니다 (방금 제공 한 링크에 문서화되어 있습니다). 동의어는 대개 분명한 이유가 있습니다. 예를 들어, JAE는 "위 또는 동등한 경우 건너 뛰기"를 의미합니다. 이것은 JNC의 동의어로, "없는 경우 건너 뛰기"와 "JNB가 아닌 경우 건너 뛰기"를 의미하는 JNB를 의미합니다. 어떤 사용은 순수 독자 코드를 이해하기의 문제이다, 당신은 단지 산술 연산을 수행 한 경우- , 당신은 캐리 플래그의 상태에 관심이있을 가능성이있어 '왜 이렇게 그것을 JNC로 코드화하십시오.
- 방금 비교 (CMP 연산)를 수행했다면 JAE 또는 JNB에 더 관심이있을 것입니다. 당신이 사용하는 것은 논리를 기술 할 때 어느 것이 가장 합리적인지에 달려 있습니다.
실제로 이것은 언어 디자인의 고전적인 문제입니다. 많은 별칭을 만들거나, 구문을 더 명확하게 의미를 명확하게 만들거나, 비용으로 "키워드"(여기에서 opcode 니모닉)를 제한합니까? 의미를 읽는 것이 더 어려워?
4
일부 니모닉은 단지 같은 명령을 나타냅니다. 비교 결과에 jG JGE 등을 사용하는 경우 관심이 있다면 CPU 플래그에 관심이 있다면 JC, JZ 등을 사용하십시오. 코드의 가독성을 높일 것입니다
5
언급 한 점프는 모두 조건 코드 값 .
JG와 JNLE은 동일합니다. 동일한 연산 코드를 가지며 동일한 작업을 수행합니다. 하나는 "보다 큰 경우"이고 다른 하나는 "작거나 같지 않은 경우 점프"입니다. 그것에 대해 생각해보십시오. 이들은 서명 된 분기입니다. 즉 분기 할 것인지 결정할 때 서명 플래그를 고려해야합니다.
JNC는 "캐리가없는 경우 점프"를 의미합니다. 캐리 플래그가 설정되어 있지 않으면 점프합니다. Carry는 산술 오버플로를 감지하는 데 자주 사용됩니다 (예 : 2 개의 부호없는 정수를 추가 할 때).
관련 문제
- 1. 어셈블리 언어 je 점프 함수
- 2. 유전자 발현 프로그래밍과 데카르트 유전 프로그래밍의 차이점
- 3. iPhone 및 iPad에 대한 프로그래밍의 차이점
- 4. GCC 인라인 어셈블리 : 블록 외부의 레이블로 점프
- 5. 점프
- 6. 어셈블리 서명을위한 signtool과 sn 또는 al의 차이점
- 7. Facebox가로드시 점프
- 8. 점프 조부모의
- 9. 어셈블리 언어의 디자인 패턴
- 10. iPhone 프로그래밍의 선택자
- 11. C 프로그래밍의 버퍼 배열?
- 12. 게임 프로그래밍의 움직임
- 13. 키워드 프로그래밍의 AttributeError
- 14. 액터 프로그래밍의 메시지는 무엇입니까?
- 15. "프로그래밍의 요소"실제 사례?
- 16. 병렬 프로그래밍의 법칙
- 17. 게임 프로그래밍의 Java 클래스?
- 18. iPhone 프로그래밍의 제스처 인식
- 19. 모바일 프로그래밍의 기초
- 20. 프로그래밍의 예측 논리?
- 21. C의 게임 프로그래밍의 기초
- 22. C 프로그래밍의 분할 오류
- 23. 비디오 게임 프로그래밍의 수학
- 24. iphone 프로그래밍의 버전 관리
- 25. OO 프로그래밍의 LSP?
- 26. Comet 프로그래밍의 TCP 소켓
- 27. mysql 프로그래밍의 좋은 방법
- 28. 배열 요소를 비교합니다. switch 문/다른 경우 - 어셈블리 - MIPS
- 29. MSVC x86 인라인 어셈블러 스위치 문
- 30. Vim의 점프/위치 커서