[MIPS]초기 변수 받기 (argc, argv, envp)
MIPS를 처음 실행하면 입력하지 않은 명령어인데도 기본적으로 입력이 되는 명령어들이 있다.
1 2 3 4 5 6 7 8 9 | lw $a0, 0($sp) # argc addiu $a1, $sp, 4 #argv addiu $a2, $a1, 4 #envp sll $v0, $a0, 2 addu $a2, $a2, $v0 jal main nop li $v0, 10 syscall | cs |
리눅스 상에서 파일을 실행시킬때 받는 값들이 있다.
c언어 혹은 java도 마찬가지로
1 2 3 | int main(argc, argv){ return 0; } | cs |
1 2 3 | public static void main(String[] args){ } | cs |
1번 $a0 argument register에 argc 즉 위에서 1000이 써있는 자리를 뜻한다.
argv는 500인 자리, envp는 -s 자리이다.
컴퓨터에서 데이터를 서로 주고받을때 쓰이는 자료구조가 stack이다. (Caller와 Callee 사이 중개 매개체)
이때도 사용자 입력값을 stack으로 받는 것을 알 수 있다.
2번 자리에서는 $a1 argument register를 stack 주소값 +4를 저장한다. (이때 값은 사용자에게 입력받은 argv값이다.)
3번 자리는 마찬가지고 a1의 주소값 + 4 (즉, 이 전의 stack 주소값에서 +4)인 것을 알 수 있다.
그 이후 jal main 명령어로 main부분의 함수로 jump한다. 이때 jal 명령어는 현재의 PC값에 +4한 위치를 $ra 레지스터에 저장 후 점프를 한다.
'Developing Note > OS' 카테고리의 다른 글
[운영체제]파일시스템 할당 방법 (0) | 2018.06.16 |
---|---|
[운영체제]메모리 단편화 (Fragmentation) (0) | 2018.06.08 |
[Nachos]#5. Priority Scheduling (0) | 2018.05.24 |
댓글