정답: 1번 첫 번째 명령어 `MOV R1, #50`은 R1에 50을 직접 대입하므로 R1=50이 됩니다. 두 번째 명령어 `MOV R1, R2`는 R2의 값을 R1에 대입하므로 R1=20이 됩니다. 세 번째 명령어 `MOV R1, 100 (직접주소모드)`는 메모리 주소 100의 값을 R1에 대입하므로 R1=200이 됩니다. 네 번째 명령어 `MOV R1, @100`은 주소 100에 저장된 값(200)을 주소로 사용하여, 그 주소에 저장된 값을 R1에 대입합니다. 메모리 주소 200의 값은 300이므로 R1=300이 됩니다. 다섯 번째 명령어 `MOV R1, --(R2)`는 R2를 1 감소시킨 후 (R2=19), 주소 19에 저장된 값을 R1에 대입하므로 R1=60이 됩니다. 여섯 번째 명령어 `MOV R1, (R2)++`는 현재 R2가 가리키는 주소 19의 값을 R1에 대입한 후, R2를 1 증가(R2=20)시킵니다. R1=60이 유지됩니다. 일곱 번째 명령어 `MOV R1, 50(R2)`는 R2+50의 주소 70의 값을 R1에 대입하므로 R1=100이 됩니다. 최종 R1 값은 100이며, 두 번째 오퍼랜드 `--(R2)`로 유효 주소는 19에서 시작하여 20으로 증가합니다. 따라서 최종 유효 주소는 70입니다.