2017-09-23 5 views
0

현재 PC가 0x00400010 (증가 이후)이고 대상 레이블의 값이 0x00400040이라고 가정합니다. 명령에서 상수의 2 진 값은 무엇입니까?MIPS PC 및 레이블 추적

beq $s0, $s0, target 

나는이 질문에 접근하는 방법을 잘 모르겠습니다. 나는 이것에 대한 해결책을 찾는 방법에 대한 힌트 또는 설명을 고맙게 생각한다.

+1

* 명령어의 상수 값은 무엇입니까? * - 상수는 무엇입니까? – Marco

+0

상수의 이진수 값을 물어볼 때 의미가 확실하지 않습니다. – Andre

+1

직면 한 문제를 이해할 수 없기 때문에 더 구체적으로 설명해 주시겠습니까? 당신은'beq'이 무엇을하는지 이해하지 못합니까? PC에 어떤 일이 일어날 지 이해하지 못합니까? 뭐가 문제 야? – Marco

답변

1

질문을 이해했는지 확실하지 않습니다. 나는 당신이 명령에 코드화 될 오프셋을 요구하고 있다고 가정하고있다.

대상이 0x00400040이고 현재 PC가 0x00400010이므로 오프셋은 0x00400040 - 0x00400010 = 0x00000030이므로 0x00000030 일 수 있습니다. 이것은 쉽게 요구 바이너리 형식으로 변환 할 수 있습니다

0000 0000 0000 0000 0000 0000 0011 0000 

하지만 MIPS를 모르는 점에 유의하시기 바랍니다. 일부 프로세서 아키텍처에서이 명령에 코딩 오프셋 내가 MIPS를 알 수 없기 때문에, 나는 beq 명령의 바이트 크기가 무엇인지 모르는

(target PC) - ((current PC) + (size of current instruction)) 

입니다. 따라서이 경우 오프셋을 계산할 수 없습니다. beq 명령어의 크기를 알려 주시면 해당 답변을 편집하여 추가하겠습니다.

또한 대부분의 프로세서 아키텍처에서 상대 오프셋은 대부분의 명령어에 대해 제한됩니다. 다시 한번, 나는 MIPS를 모른다. 그러나 오프셋은 16, 12 또는 심지어 8 비트로 제한 될 가능성이있다. 이 경우 실제 이진 오프셋 표현식을 얻으려면 오프셋을 저장하는 데 사용되는 비트 만 남을 때까지 왼쪽에서 이진수에서 0을 제거하십시오. (고려 바쁜 비버 주석 복용)

EDIT MIPS에서

, 그것을 설명은 32 비트/4 바이트 정렬되는 것으로 보인다. 이를 통해 필요한 실제 오프셋을 4로 나눈 값을 저장할 수 있습니다 (CPU는 오프셋을 읽고 실제 목표를 계산하기 위해 4를 곱합니다). 장점은 주어진 비트로 더 큰 오프셋을 저장할 수 있다는 것입니다. 즉, 2 개의 오프셋 비트를 절약 할 수 있습니다.

예제에서 PC는 0x00000030 바이트 씩 점프하여 대상을 가져와야합니다. 명령에 저장된 오프셋은 0x00000030/4이고 0x00000030 >> 20x0000000C0과 같습니다. 당신은 이진 표현에 대한 질문 : 디코딩 할 때

0000 0000 0000 0000 0000 0000 0000 1100 

/명령 실행, CPU가 자동으로 사에 의해 상쇄, 그 방법은 실제 원하는 오프셋 돌아 오기 것을 곱합니다.

+2

음, 이런 일이 발생하지 않는다고 생각합니다. 'beq $ s, $ t, offset'은 두개의 레지스터가 같거나'offset << 2'의 PC를 진행할 경우 분기됩니다. 그래서'target '이'0x00400040'이라면 nPC는'PC + (0x00400040) << 2'이 될 것입니다. – Marco

+1

@BusyBeaver 당신의 의견과 +1에 감사드립니다. 내가 말했듯이, 나는 MIPS를 모른다. 그러나 분명히 명령어는 4 바이트로 정렬되어야한다. 그에 따라 내 대답을 편집 할 것입니다. – Binarus