2014-02-21 1 views
0

저는 간단한 (가상) ALU와 다른 칩 (가산기, 곱셈기 등)을 구현하고 있습니다.2의 보수 및 곱셈에서 왼쪽으로 쉬프트

내 숫자에 2의 보수 표현을 사용하고 있습니다.

  • 설정 : X와 Y의 곱셈을 위해

    는 두 개의 16 비트 값은, I는 I (이것은 실제 루프없이 수행 물론이다)이 라인을 따라 좌측 시프트를 사용이라고 생각 요약 [0..15] = 0

  • 집합 X '= X 용

  • I = 0 ... (15) // (Y [0] 인 LSB 및 Y [15] MSB 임)

    • y [i] = 1이면 x '을 더하고 왼쪽으로 시프트하십시오.

(이 표준 방법이 있나요?)

내 문제는 왼쪽 교대로이다 :

만약 거기에 s.t. x [i] = 1, 어떤 점에서 x '의 MSB는 1이 될 것이고, 그것은 negate된다.

위의 방법을 사용하는 예 2 * 2는 "-4"이므로 문제가됩니다.

내 실제 질문은 : 왼쪽으로 시프트 할 때 부호 비트를 고려해야합니까?

답변

0

예.

간단한 접근 방식은 서명을 어딘가에 저장하고 서명되지 않은 상태로 변환 한 다음 수학 연산을 수행 한 다음 음수 일 경우 다시 변환 할 수 있습니다.

+0

왼쪽으로 이동하면 0110 0000 0000 0000이 생성됩니다. 0100 0000 0000 0000? 그리고 기호를 저장하고, 현재 기호 비트로 바꾸고, 원래 기호 비트로 대체하는 것만으로 충분하지 않습니까? – Paz

+0

이것은 오버플로 조건이지만 예입니다. - 아니, 당신은 NEG 또는 이와 유사한 기호를 변환해야합니다. 2의 보수로, -1은 모두 1로 표시됩니다. –