2016-11-21 9 views
1

메모리의 레지스터가 32 비트라는 것을 알고 있습니다. 또한 LB는 레지스터의 하위 8 비트에 메모리의 내용을로드 이해하고 난레지스터의 다음 바이트에 쓰기

lb $t1, $a3 
lb $t1, 4($a3) 

를 않았다면 번째 LB 명령은 먼저로드 내용을 덮어 것이다. 그러나 레지스터의 두 번째 바이트 (메모리의 다른 부분에서로드하므로 서로 바로 옆에 2 바이트가 아닌)로 쓰고 첫 번째 바이트의 정보를 보존하는 방법이 있습니까? 난 당신이 여기에 사용할 것을 가정하고

답변

0

는 예를 들어 000000AA가 발생합니다 레지스터의 바이트 AA 복사 (레지스터는 확장 기호되고 싶지 않기 때문에 lbu (부하 바이트 부호)가 아닌 lb이며, not FFFFFFAA).

가 먼저 또 다른 레지스터에 메모리로부터의 바이트를로드 lbu를 사용하여 레지스터의 두 번째 바이트에 기록하려는 경우

후 원래 레지스터에 8 개 비트를 좌측 및 addu 변경해주십시오. 예를 들어

:

lbu $t1, $a3  # 0x000000AA 
lbu $t2, 4($a3)  # 0x000000BB 
sll $t2, $t2, 8  # 0x000000BB -> 0x0000BB00 
addu $t1, $t1, $t2 # 0x000000AA + 0x0000BB00 = 0x0000BBAA