안녕하세요 저는 Game Boy의 에뮬레이터를 작성하고 있습니다.SUB 명령 gameboy 에뮬레이션을 위해 두 가지 보완을 사용할 수 있습니까?
그리고 a = 0x90
주어진
SUB a, 0x92
intruction SUB와 사투를 벌인거야.
내가 뭐하는 거지 것은 :
0x90 + (-0x92)
나는 빼기 위해 2 보수 방법을 사용합니다.
-0x92 <=>
2_complement(0x92) <=>
2_complement(10010010) <=>
01101101 + 1 <=>
01101110
그래서 빼기는 다음과 같은 추가하는 것과 같습니다
과정에서1001 0000 (0x90)
+0110 1110 (-0x92)
---------
1111 1110 (0xFE)
, 거기에는 캐리는하지 않고 반은 내가 플래그를 설정하지 수행하지 않습니다. 그리고 다른 에뮬레이터 (예 : BGB과 같은 것입니다.) 결과가 정확하고 플래그가 정확하지 않음을 유의하십시오.
그래서 실제 프로세서는 자유로운 방법이 없기 때문에 2 보수법을 사용하지 않는다고 가정합니다. 아직도.
을 캐리 반 캐리를 검색하는 I 플래그 처리와 SUB 명령을 모방하는 두 개의 보완을 사용하거나, 나는 "고전적인"빼기 논리에 의존해야합니까?
아마도이 답변의 핵심 부분은 다음과 같습니다. * 결과 캐리도 반전됩니다 *.따라서 원래의 저자는 덧셈 형식이 캐리 (carry)도 반감도 (half-carry)도 생성하지 않는다고 옳습니다. 하지만 그는 그 결과를 뒤집어서 ** 캐리와 반 캐리 플래그를 설정해야합니다. 그것은 공정한 말입니까? – Tommy