2016-11-08 5 views
4

다음은 neg 명령에 대한 Intel x86-64의 설명서에 나와 있습니다.인텔 어셈블리의 "설정에 따라"의미가있는 것은 무엇입니까?

는 " OF , SF, ZF, AFPF 플래그가 결과에 따라 설정된다."

나는 sf = dest < 0, zf = dest == 0이라고 가정하고 있지만 다른 플래그가 설정되는 방법을 알 수 없습니다.

이 부분은 "결과에 따라 설정" 문구가 어디서나 표시되며 정확히 무엇을 의미하는지 이해하는 데 도움을 주셔서 감사합니다. 나는 정보가 확실하게 중요하도록 컴파일러에서 일하고있다.

+2

은'NEG의 x'는 '0 x', 완전히 정상 감산 ('sub')를 구현한다. –

+0

문서에서 dest = -dest neg 명령에 대해 알고 있지만 플래그가 어떻게 수정되는지 궁금합니다. 대부분의 경우 문서는 의사 코드의 명령어로 플래그를 설정하는 방법을 정의합니다. 경우에 따라 "영향을받는 플래그"섹션에서 정의되지 않은 플래그를 나열합니다. 그러나 "그에 맞게 설정"은 나를 혼란스럽게하고 그것이 무엇을 의미하는지 정말로 알고 싶습니다. – Mike

+1

당신의 대답과 David G의 대답이 나의 혼란을 해결합니다. 당신의 도움을 주셔서 감사합니다! – Mike

답변

5

그래서 모든 플래그는 수행 된 작업을 기반으로 설정되며 "결과에 따라 설정"이라는 의미입니다. 등록

3.4.3.1 상태 플래그

상태 플래그

(비트 0, 2, 4, 6, 7, 11)를 EFLAGS의이 같은 ADD, SUB 등의 산술 연산의 결과를 나타낼 , MUL 및 DIV 명령. 상태 플래그 기능은 :

  • CF (비트 0) 캐리 플래그 - 연산이 휴대하거나 결과의 최상위 비트 most- 밖으로 대출이 발생하는 경우 설정; 그렇지 않으면 삭제됩니다. 이 플래그는 부호없는 정수 연산의 오버플로 조건을 나타냅니다. 또한 다중 정밀도 산술에도 사용됩니다.
  • AF (비트 2) AF (비트 4) 보조 캐리 플래그 - 산술 연산이 결과의 비트 3에서 캐리 또는 빌림을 생성하면 설정합니다. 그렇지 않으면 삭제됩니다. 이 플래그는 BCD (Binary-Coded Decimal) 산술에 사용됩니다.
  • ZF (비트 6) 제로 플래그 - 결과가 0이면 설정하십시오. 그렇지 않으면 삭제됩니다.
  • SF (비트 7) 부호 플래그 - 부호있는 정수의 부호 비트 인 결과의 최상위 비트와 동일하게 설정합니다. (0은 양수 값, 1은 음수 값)
  • OF (비트 11) 오버플로 플래그 - 정수 결과가 양수가 너무 크거나 음수가 너무 작 으면 설정합니다 (부호 비트 제외)를 대상 피연산자에 맞 춥니 다. 그렇지 않으면 삭제됩니다. 이 플래그는 부호있는 정수 (2의 보수) 산술에 대한 오버플로 조건을 나타냅니다.

이러한 상태 플래그 중 STC, CLC 및 CMC 명령어를 사용하여 CF 플래그 만 직접 수정할 수 있습니다. 또한 비트 명령 (BT, BTS, BTR 및 BTC)은 지정된 비트를 CF 플래그에 복사합니다.

CF 플래그 만 직접 수정할 수 있습니다. 나머지는 작업을 기반으로 설정됩니다.

Source - Intel

+0

문서를 참조 해 주셔서 감사합니다! CF, PF, AF 및 OF 플래그는 모두 플래그를 수정하는 더하기/빼기 회로에 의존합니다. 플래그를 수정하기 위해이 덧셈/뺄셈 회로를 0으로, 피연산자를 dest로 사용하여 neg가 사용됩니까? 나는 디지털 논리 회로를 이해하므로 답을 자세히 잡아라. – Mike

+4

발견. 나는 설명서의 neg에 대한 "설명"에서 간과했다. 누군가가 미래에이 문제를 우연히 발견 할 경우를 대비하여 다음과 같이 말합니다. "피연산자 (대상 피연산자)의 값을 2의 보수로 바꿉니다 (이 연산은 피연산자를 0에서 빼는 것과 동일합니다)." – Mike

+2

확실하게 알고있는 것은 연산 후 CPU가 플래그를 설정한다는 것입니다 공연. 7.3.2.4 절에서 NEG의 경우 - NEG (negate) 명령어는 0에서 부호있는 정수 피연산자를 뺍니다. _ 동일한 섹션에서 CMP 및 업데이트 된 플래그에 대해 설명합니다. 내가 말할 수없는 것은 그것이 특정 깊이의 하드웨어 수준으로가는 특정 가산기 또는 ALU의 일부인지 여부입니다. –