현재 DCPU-16 어셈블러를 사용 중입니다 (http://0x10c.com/doc/dcpu-16.txt 및 http://jazzychad.net/dcpu.html 참조).DCPU-16 명령어의 이진 표현에 선행 1이있는 이유
어셈블러 명령어가 16 진수/2 진수로 변환되는 방식에 대해 이해할 수없는 한 가지 점이 있습니다.
일례로서, DCPU-16 2 (또는 16 진수 0x0002 바이너리 0b000010)
명령 포맷 십진수, 레지스터 B의 값을 설정하도록되어
SET B, 0x0002
같은 지시를 받아
bbbbbbaaaaaaoooo
따라서, 하단의 연산 코드는 4 비트, 제 1 값은 6 비트, 제 2 값은 6 비트이다.
SET == 0x1 == 0b0001
B == 0x01 == 0b000001
0x0002 == 0b000010
을 DCPU-16
입니다 대한0b0000100000010001 == 0x811
되는 전체 명령하지만 올바른 값으로 끝나는 :
손으로 명령을 변환
, 이것은 내가 어떻게 할 것입니다0b1000100000010001 == 0x8811
즉 1을 더하는 이유는 무엇입니까?
저는 어셈블러와 다른 종류의 하드 코어 저수준 기계 명령어에 완전히 익숙합니다. 그래서 이것이 매우 어리석은 질문이라면 저에게 꼭 알려주십시오.
아, 물론 알겠습니다. CPU는 레지스터 또는 값의 의미를 구분할 방법이 없습니다. 고마워요! –
내가 완전히 grok 경우 보자 -이 오프셋을 사용하여, 나는 명령의 bbbbbb 비트 블록에 리터럴 10 진수 값을 쓸 수 있습니다 -하지만, 말하자면 10 진수 40을 레지스터 a에 넣고 싶습니다. 즉, SET B, 0x0028'이면'bbbbbbaaaaaaoooo' 명령은'SET'을위한 oooo ='00001','B'를위한 aaaaaa ='000001', '다음 단어 (리터럴)'을위한 bbbbbb ='011111', 다음 단어에 '0000000000101000' (= 40)? –
@ManuelKiessling : 오른쪽에 대해 들립니다. –