ori $s0, $0, 0x007d0900
$s0의 값을 0000 0000 0111 1101 0000 1001 0000 0000 (=0x007D0900) 로 만들고 싶을 때
이 경우, 0x007d0900이 16bit로는 표현이 안되고, 32bit로는 표현된다.
ori를 32bit로 표현하기 위해서는 I-format을 사용해야하는데, 이럴 때 사용하는게 lui instruction이다.
하지만, 여기서 내가 원하는 것은 0x007D가 아닌, 32bit 0x007D0900 이었다.
현재 $s0가 0000 0000 0111 1101 0000 0000 0000 0000 (=007D) 으로 채워졌다면, 이젠 아래쪽을 0900으로 채워야한다.
🤔 ori instruction을 통해 나머지를 채우는데, 물음표는 뭐로 채워야할까?
-> ori는 logical instruction이기 때문에 zero extension 해준다.
이렇게 연산하면, 원하는 0x007D0900를 만들 수 있다.
$t0의 값을 0000 0000 1111 1111 0000 0000 0000 1111 (=0x 3C08 00FF) 로 쓰려면?
1. lui $t0, 0x00FF 수행
-> $t0 = 0000000011111111 0000000000000000
-> 얘는 앞 2진수 or 뒤 16진수를 기준으로 상수를 찾는다.
2. ori $t0, $t0, 15 (=F) 수행
-> $t0 = 0000000011111111 0000000000001111
-> 얘는 뒤 2진수를 기준으로 해당 10진수를 찾는다.