재미 있고 기술을 향상시키기 위해 컴파일러를 작성하고 있습니다. C 언어의 하위 집합을 구현하고 싶습니다. 문제는 Sextium II라는 이론적 인 16 비트 RISC 프로세서 어셈블러로 컴파일하는 것입니다. 우리는 우리 대학에서 어셈블러를 가르치기 위해 사용했습니다.ADD, SUB, MUL 및 DIV 명령어로만 비트 연산을 구현하십시오.
프로세서는 16 개의 명령 만 사용하며 비트 연산은 없습니다. C 비트 연산자 - 나중에 반 정밀도 부동 소수점을 구현하고 싶습니다만, ADD
, SUB
, MUL
및 DIV
명령어 만 사용하여 비트 연산을 구현하는 방법을 알지 못합니다. 비트 시프트는 매우 간단합니다. 2^n
으로 곱셈 또는 나눗셈을 수행합니다. 여기에서 n
은 시프트 길이입니다. 그러나 AND
, OR
, NOT
또는 XOR
은 어떨까요?
EDIT 분명히 : 프로세서는 16 비트 부호있는 U2 산술에서만 계산합니다.
느려지 겠지만 x AND 1은 x MOD 2입니다. 루프를 사용하고 16 비트 AND를 구성 할 때마다 이동합니다. 1 비트 x OR y는 (x AND 1) || (y와 1) (나는 이미 이것을 구현했다고 가정하고있다.) 다시 한 번 루프가 당신에게 16 비트 버전을 줄 것이다. XOR과 유사합니다. 나는 이것이 더 똑똑한 방법으로 행해질 수 있다고 확신하지만 이것은 대체로 작용할 수있다. – user786653