현재 PC가 0x00400010 (증가 이후)이고 대상 레이블의 값이 0x00400040이라고 가정합니다. 명령에서 상수의 2 진 값은 무엇입니까?MIPS PC 및 레이블 추적
beq $s0, $s0, target
나는이 질문에 접근하는 방법을 잘 모르겠습니다. 나는 이것에 대한 해결책을 찾는 방법에 대한 힌트 또는 설명을 고맙게 생각한다.
현재 PC가 0x00400010 (증가 이후)이고 대상 레이블의 값이 0x00400040이라고 가정합니다. 명령에서 상수의 2 진 값은 무엇입니까?MIPS PC 및 레이블 추적
beq $s0, $s0, target
나는이 질문에 접근하는 방법을 잘 모르겠습니다. 나는 이것에 대한 해결책을 찾는 방법에 대한 힌트 또는 설명을 고맙게 생각한다.
질문을 이해했는지 확실하지 않습니다. 나는 당신이 명령에 코드화 될 오프셋을 요구하고 있다고 가정하고있다.
대상이 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 >> 2
은 0x0000000C0
과 같습니다. 당신은 이진 표현에 대한 질문 : 디코딩 할 때
0000 0000 0000 0000 0000 0000 0000 1100
/명령 실행, CPU가 자동으로 사에 의해 상쇄, 그 방법은 실제 원하는 오프셋 돌아 오기 것을 곱합니다.
* 명령어의 상수 값은 무엇입니까? * - 상수는 무엇입니까? – Marco
상수의 이진수 값을 물어볼 때 의미가 확실하지 않습니다. – Andre
직면 한 문제를 이해할 수 없기 때문에 더 구체적으로 설명해 주시겠습니까? 당신은'beq'이 무엇을하는지 이해하지 못합니까? PC에 어떤 일이 일어날 지 이해하지 못합니까? 뭐가 문제 야? – Marco