현재 아키텍처 과정을 수강 중이며 그 수업의 일환으로 MIPS 어셈블리를 배우고 있습니다.MIPS 어셈블리에서 lw/sw 연산의 형식?
[opcode] 6-bits, [rs] 5-bits, [rt] 5-bits, [immediate] 16-bits written as: lw $rt, offset($rs) # where offset is an immediate value
OK, 그래서 내가 A [i]는 액세스하려는 가정 해 봅시다 :
IT는 LW와 자상 한 작업이 I-형식이 레지스터 피연산자를 허용하는 지침 및 한 즉시 피연산자 것을 나의 이해이다.
sll $t0, $s1, 2 # i*4 (offset) add $t0, $s7, $t0 # $t0 = &A[i] lw $t1, 0($t0) # $t1 = A[i]
은 내가 대한 혼란 스러워요하는 교수님한다 : (A)의 기본 주소를 가정하면 레지스터 $의 S7에 인덱스 (i)는 레지스터 $의 S1에서, 나는의 라인을 따라 뭔가를해야 할 것 우리는 또한 3 개 레지스터와 함께이 같은 LW 명령을 할 수있는 말을 계속 :
sll $t0, $s1, 2 # i*4 (offset) lw $t1, $t0($s7) # $t1 = A[i]는 이러한 솔루션의 모두 정확합니까? 아니면 내 강사가 틀렸어? 오프셋 할 수있는 레지스터를 사용할 수 없습니까? 오프셋은 즉각적인 숫자 여야한다고 생각했습니다. 당신이 여분의해야 할 이유는 첫 번째 해결책에 명령을 추가해야하기 때문에 실제로는 수 없기 때문에은 오프셋으로 레지스터를 사용합니다.
어셈블리 언어는 어셈블러에서 어셈블리 언어를 정의하고 어셈블러에서이를 읽은 프로그램에서 컴퓨터 코드를 만듭니다. 일반적으로 C++이나 JAVA와 같은 표준화 된 언어는 어딘가에 있지 않습니다. MIPS는 이미 의사 명령어를 일반적으로 사용하고 있으며 일부 특정 어셈블러에 대한 또 다른 의사 명령어가 될 수 있습니다. –