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"이므로 문제가됩니다.
내 실제 질문은 : 왼쪽으로 시프트 할 때 부호 비트를 고려해야합니까?
왼쪽으로 이동하면 0110 0000 0000 0000이 생성됩니다. 0100 0000 0000 0000? 그리고 기호를 저장하고, 현재 기호 비트로 바꾸고, 원래 기호 비트로 대체하는 것만으로 충분하지 않습니까? – Paz
이것은 오버플로 조건이지만 예입니다. - 아니, 당신은 NEG 또는 이와 유사한 기호를 변환해야합니다. 2의 보수로, -1은 모두 1로 표시됩니다. –