mv의사

mv

의사
RISC-V 어셈블리 참조

lyszt.net은 mv 및 기타 RISC-V 명령어를 더 자세히 다룹니다.

설명

mv는 한 레지스터의 값을 다른 레지스터로 복사합니다. 이름은 move의 줄임말입니다. 아래 줄 이후, 두 레지스터는 같은 값을 가지며 소스인 t0는 변경되지 않습니다.

mv a0, t0

mv는 의사 명령어입니다. 어셈블러는 이 읽기 쉬운 이름을 아래에 표시된 실제 명령어로 다시 씁니다.

addi rd, rs, 0

값에 0을 더해 다른 곳에 저장하면 복사본이 만들어집니다. RISC-V에는 전용 move 명령어가 없고 대신 덧셈을 재사용합니다.

레지스터마다 하는 일이 다르며, 이것이 mv를 사용하는 일반적인 이유입니다. 관례상 계산은 임시 레지스터(t0, t1 등)에서 이루어집니다. 함수가 호출되면 그 인수는 특정 레지스터(a0, a1 등)에 들어가고 결과는 a0로 반환됩니다. 따라서 프로그램은 호출 전에 mv를 두어 계산된 값을 호출되는 코드가 읽는 레지스터에 넣고, 호출 후에 mv를 두어 반환된 결과를 안전한 곳에 저장합니다.

mv a0, t0
call square
mv s0, a0

적절한 순간에 값을 올바른 레지스터에 넣는 것은 어셈블리의 큰 부분을 차지하며, mv가 그것을 해냅니다.

RISC-V 매뉴얼은 상수 0을 사용하는 addi가 mv 어셈블러 의사 명령어를 구현한다고 명시합니다.

mv는 값을 복사하므로 나중에 목적지를 변경해도 소스는 변경되지 않습니다. 이로 인해 mv는 루프가 원본을 변경하기 전에 값의 복사본을 유지하는 데 유용합니다. 시뮬레이터의 추적은 mv 대신 실행되는 addi를 보여줍니다.

확장 대상

addi rd, rs, 0

어셈블러는 이 의사 명령을 위에 나열된 실제 명령 또는 명령들로 대체합니다.

예시

li t0, 42
mv t1, t0         # t1 = 42