나는 mips를 배우는 학생이고 메모리 액세스 및 로딩이 어떻게 작동하는지에 대해 몇 가지 질문이 있습니다. 우리의 첫 번째 숙제에서밉과 메모리에 관한 간단한 질문이 있습니까?
은 우리가
sw $a0, numargs
lw $t0, 0($a1)
sw $t0, arg1
lw $t0, 4($a1)
sw $t0, arg2
lw $t0, 8($a1)
sw $t0, arg3
이 매크로의 작업이 우리가 MIPS에로드 인수를 얻을 수 있습니다 사용이 매크로를 제공하고 있습니다. 그것은 작동하지만 교수가 결코 설명하지 않았고 단지 그것을 사용하도록 우리에게 말한 것처럼 그것이 어떻게 작동하는지 더 궁금해했습니다.
그래서 "프로그램 인수"필드에 세 가지 인수를 입력합니다. MIPS는 a0을 인수의 개수로 즉시 사용합니까? 그렇기 때문에 MIPS는 인수를 왜 우리 자신의 변수에 저장할 수 있습니까?
각 인수에는 자체 메모리 주소가 있습니다. 레지스터 $ a1은 인수의 메모리 주소 중 마지막 4 비트를 모두 합친 것입니까? 그렇게하면 매번 4 비트 씩 새로운 인수를 얻고 그 인수를 자체 변수에 저장합니다.
또한 단어가 제대로 작동
lw $t0, arg2
lb $t1, 3($t0)
move $a0, $t1
addi $v0, $0, 11
syscall
이 코드 조각에 나에게 예를 들어 조금
혼란을로드합니다. 나는 t1의 마지막 바이트가되도록 (즉, 인수의 마지막 문자) t1로 설정하고 올바르게 인쇄합니다. 인수가 1234이면 내가 첫 번째 줄 이후
sll $t0, $t0, 8
을 추가 할 때, 그것은 그러나 4
를 인쇄 그래서, 그것은 작동하지 않습니다. 나는 왜 그런지 이해하지 못한다. $ t0을 8 비트 씩 이동합니다. 그래서 마지막 바이트가 지워지고 "3"이 마지막 바이트가되어야하고 무엇이 인쇄됩니까? 그러나 그것은 나에게 오류를 준다.