2017-03-13 1 views
1

이 프로그램이 내가 무엇을 시도했다입니다 후 2비트 조작 MIPS 조립

6. 비트 사이에서 그 비트를 대체, 사용자 입력 키를 취 해당 키에서 오른쪽 5 개 비트를 추출합니다.

lw $s1, 0($s0)    # extracts the first word in the array 
beq $s1, $zero, done   # at the end of the array is a zero => 0 


move $t1, $s2     #s2 has the input key 
move $t0, $s1     # put the word in a temporary register 
andi $t2, $t1, 0x0000001f  # use the input mask to return the rightmost 5 bits 

sll $t3, $t2, 2    # move the bits over to align with bits 2-6 

andi $t0, $t3, 0xffffff83 

그래서 내 사고 안디 $의 T2, $의 t1,0x0000001f 함께 5 개 비트를 추출하여, 입력 키를 취할 된 다음 제

비트로 2 추출한 5 개 비트를 정렬 논리 2 비트 왼쪽 시프트

이것이 내가 갇혀있는 곳입니다. 사용자 입력 키에서 가져온 비트를 어떻게 바꾸고 2에서 6까지의 비트 위치에 넣을 수 있습니까? 두 번째 andi에 대한 입력 마스크가 맞다고 생각하지만 적절한 레지스터를 사용하고 있다고 생각하지 않습니다.

편집 : 답장을 보내 주셔서 감사합니다. 제공된 제안으로 해결책을 찾아 냈습니다. 비슷한 문제가있는 사람 :

하단의 andi가 제거되었습니다. 완전한 답을 제공하지 않으려면 데이터 단어에서 대체해야하는 비트를 입력 마스크로 수정해야합니다. 이것은 다른 andi 명령을 사용하여 수행 할 수 있습니다. 몇 가지 단계가 더 있지만 이것은 적어도 미래를 향한 올바른 방향으로 누군가를 가리켜 야합니다.

+0

마지막 줄에서 분명히 입력을 마스크하고 싶으므로'$ t3'는 거기에 아무런 사업도하지 않습니다. 일단 당신이 그것을 고치면, 그것들을 단지 "또는"함께 고정시킵니다. 추가도 가능합니다. – Jester

+0

"인터넷에서 숙제를 빼앗 았기 때문에 잡히지 않으려 고합니다"이외의 질문을 삭제하려는 정당한 이유가있는 경우 "문의하기"링크를 통해 관리자에게 문의하십시오. 그들은 당신을 도울지도 모릅니다. 여기서 "질문을 삭제 편집"하는 것은 허용되지 않습니다. –

답변

1

"대체"비트는 두 값을 단일로 합성하여 수행됩니다. and/or/xor이 사용될 수 있기 때문에 공유 원칙은 소스/타겟 값을 이와 같은 방식으로 준비하는 것이며, 최종 컴포지션이 원하는 결과를 생성하는 것입니다. (

s = 0101 => and 0xE => 0100 => `or/xor/add` to `d` 
d = 1100 => and 0x1 => 0000  => 0100 

and 변형 최종 비트 :

or/xor/add 변이체 (보존 최종 비트, 삭제 등) 4 개 비트 값에

로서는, 대상 d에 소스 s에서 B1-B3 된 비트 복사 보존 됨, 다른 세트) :

s = 0101 => or 0x1 => 0101 => `and` to `d` 
d = 1100 => or 0xE => 1110  => 0100 

0xE = ~ 0x1 (레지스터에서 지워진 비트는 다른 쪽에서 보존되어야하며, 그 반대도 마찬가지입니다.)