1

MIPS 명령어 세트를 사용하여 바이트 조작을하고 싶습니다.MIPS 명령어 세트에 대한 바이트 조작

  • 나는 0x8C2E5F1E있다 $S0을 등록하고 0x10AC32BB을 가지고 $S1을 등록 할 수 있습니다.
  • $S0의 두 번째 바이트 인 5F$S1, AC의 세 번째 바이트에 저장하고 싶습니다.

로직은 레지스터 $S0의 바이트를 다른 레지스터에 저장하고 원하는 바이트로 이동하는 것입니다. 그런 다음 $S10xFF00FFFF을 등록하고 등록합니다. 마지막으로, 저는 두 레지스터 만 있습니다. 어떻게 들리는가요? 맞습니까? 더 좋은 방법이 있니?

모든 제안이나 해결책이 주어집니다.

답변

1

이상 MIPS 한 레지스터로부터의 최하위로부터 시작하고 제 2 레지스터에 지정된 범위 내로 그들을 삽입 비트를 취하는 삽입 비트 필드의 명령을 포함 . 따라서 바이트 삽입은 다음에 의해 수행 될 수 있습니다 :

// rotating right one byte rather than shift to preserve data 
// without using an additional register 
ROTR $S0, $S0, 8; 
// insert LSbits from $S0 into $S1 starting at bit 16 
// with size of 8 bits 
INS $S1, $S0, 16, 8; 
+0

위와 같은 명령이 있다는 것을 몰랐기 때문에 내가 찾고 있던 위대하고 정확한 대답. 그러나, 당신의 지시에는 4 개의 피연산자가 있습니다! 그래서 어떤 형식으로 간주됩니까? 릴리스 2는 새로운 형식을 추가합니까? 또한 폴 (Paul), 아시다시피, 모든 릴리스 간의 차이점은 간단합니다. 지금은 출시일까지 5 가지로 생각합니다. – Salchem

+0

@ user2994448 형식에는 표준 6 비트 메이저 opcode가 있고 소스 레지스터 [rs], 대상 레지스터 [rt] (소스이기도 함), 두 개의 5 비트 즉치 필드, 6 비트 사소한 opcode; 그래서 제 3 opcode [비트 25:21]가 rs로 대체되고 rd 필드가 5 비트 즉 치로 대체되거나 제 3 opcode [비트 10 : 6]가 SRAV의 형식으로 바뀐 SRA의 형식과 유사합니다 5 비트 즉치 및 rd 필드는 즉시로 대체됩니다. –

+0

@ user2994448 MIPS ISA의 다른 릴리스/버전과 관련해서는 괜찮은 질문 일 수도 있습니다 (StackOverflow가 이러한 질문에 적합한 지 확실하지 않음). R5는 하드웨어 페이지 테이블 워킹을 추가하고 Application Specific Extensions에서 모듈 (Base Arch로 라이센스 됨 - MultiThreading 및 DSP ASE가 모듈, SIMD 및 Virt가 추가됨)를 구별합니다. R4, R3에는 microMIPS 가변 길이 인코딩이 포함되지 않았습니다. 나는 * 마이크로 컨트롤러 ASE가 R3에 들어갔다고 생각하지만 설명서 1.01은 2011 년 3 월 21 일에 나온 것입니다. R2가 나오기 전에 MIPS I, II, III 및 IV (IV == R2 ??)가있었습니다. –

1

은 다음을 고려

릴리스 2 용
ori $t0 $s0 0xFF00 #extract byte 2 
sll $t0 $t0 8 #shift to third byte 

#create mask to clear third byte 
lui $t1 0xFF 
not $t1 $t1 

and $s1 $s1 $t1 #clear third byte 
or $s1 $s1 $t0 #set third byte 
+0

나는 그것을 알고 있습니다. 나는 그것이 바이트 조작을 위해 사용하는 올바른 논리인지 또는 훨씬 더 짧은 방법 인 그러한 바이트 또는 무언가가 있는지 묻는다. – Salchem