2010-11-28 2 views
3

나는 계산 된 것보다 크거나 작은 결과가 어떻게 산출되어 고위 언어로 반환되는지 궁금합니다.보다 큰/미만의 내부 작업

여기 하드웨어 게이트 모델을 찾고 있습니다.

설명하는 균일 한 예를 사용할 수 있습니다, 5 말> 3. 일반적으로 캐리 탐지과 뺄셈을 통해 구현된다

+1

@Downvoter : 개인적으로이 질문도 마음에 들지 않습니다. 내 취향이 아니야. 하지만 그것은 분명히 공식화되었거나 프로그래밍 질문이거나, 중복이 아니기 때문에 나에게 그것을 다운 바운드 할 수있는 도덕적 권리를주지 않습니다 ... 우리가 개인적으로 싫어하는 downvoting 질문은 자제합시다. –

+0

모든 uP/CPU에서이를 수행하는 ALU가 있습니다. 리터럴/참조를 전달하기 만하면 피연산자가 같거나 같거나 크거나 작은 플래그를 여러 개 설정합니다. – jpinto3912

+0

당신은 누군가가 그 기계어 명령을 지원하는 전기 공학 및 하드웨어 회로를 설명하고, 하드웨어가 명령을 가져 오거나 실행하는 방법을 설명하고 적용하고, 고수준 언어 컴파일러가 기계 코드로 컴파일하는 방법을 설명하겠습니까? ? 근본적으로 저레벨의 전기 공학에서 상위 레벨의 코드와 모든 것을 연결하는 모든 것들에 이르기까지? – Loduwijk

답변

6

. 이진수를 감산 게이팅 관점에서

은 감산기를 통해 각각의 피연산자로부터의 비트가 쌍을 통과시킴으로써 수행된다 : 인자로부터

  +-----+ 
carry_in -->|  | 
      |  |--> a_minus_b 
     a -->| SUB | 
      |  |--> carry_out 
     b -->|  | 
      +-----+ 

a_minus_b = carry_in ⊕ a ⊕ b 
carry_out = (carry_in ∧ b) ∨ (¬a ∧ (carry_in ∨ b)) 

비트 0 ab은 함께, 제 감산기 통과 carry_in은 0입니다. 각 인수의 비트 1은 두 번째 감산기를 통과하고 carry_in은 비트 0 스테이지의 carry_out으로 설정됩니다. 마지막에 최종 carry_out는 1 만약 < B를 보유하는 CPU의 캐리 플래그를 설정 때까지 그 결과는로가는 모든 a_minus_b 함께 OR 연산 및 니 게이트, 또한, 그렇지 않으면 0

을 체인을 계속 a = b를 나타내는 CPU 제로 플래그.

이 플래그는 if (a < b) { ... }을 작성할 때 컴파일러가 생성 한 기계 명령어로 테스트 할 수 있습니다.

나는 독자를위한 운동으로 5> 3을 남겨 둘 것이다.

+0

+1 자세한 ASCII 및 물론 "연습 문제로 ..." – darioo

+0

이것은 부호없는 값에 적용됩니다. 부호가있는 값의 경우 오버플로 감지도 필요합니다. –

+0

빼기 컨텍스트에서 "carry"대신 "borrow"가 자주 사용됩니다. – caf