2013-05-02 3 views
0

main의 첫 번째 줄부터 시작하여 코드에서 R, I 및 J 명령어의 수를 계산합니다. 모든 제안에 대한 코드를 업데이트했지만 결과가 정확하지 않은 것 같습니다. :(Mips 프로그래밍 점프 문제

편집이 :.?, 변수가 더 잘 작동하는 것처럼 보이지만 루프가 제대로 전혀 자체를 통해 실행하지 않는 것 그 구문의 변경 내용을 추가 띄는 문제의 사람이

EDIT2을 보는 방법 : 루프를 변경하여 $ t1이 한 번에 하나의 명령어 세트를 순환하도록 만드시겠습니까? 이것은 새로운 mips 사용자의 어리석은 구문 이외의 다른 중요한 문제입니다.

EDIT3 : 코드를 모든 제안으로 업데이트했습니다. 결과가 여전히 올바르게 표시되지 않는 것 같습니다. (

.text  
Main:  
la $t1, 0x400000  
li $t5, 0  
li $t3, 2  
li $t4, 3  
li $t2, 0  
la $s0, 0x400000 

loop:  
lw $t1, 0($s0)  
addi $s0, 4  
addi $t5, 1  
beq $t5, 20 exit  
srl $s4, $t1, 26  
beq $s4, $t2 R  
beq $s4, $t3 J  
beq $s4, $t4 J  
addi $s3, 1  
j loop  

R: 
addi $s1, 1  
j loop  

J:  
addi $s2, 1  
j loop  

exit:  
sw $s1, RType  
sw $s2, JType  
sw $s3, IType  
jr $ra 
+0

코드가 실제로 올바르게 계산되는 데 도움이 필요합니다. – Learning2Code

답변

1

다음과 같은 일련의 문제가 있습니다.

1) 레지스터 초기화 (레지스터 초기 값이 0이라고 가정하지 않음). 예를 들어, addi $t5, 1은 이전 add $t5, $zero, $zero (또는 원하는 값으로 li)을 필요로합니다.

2) beq 점프 명령에는 두 개의 레지스터가 필요합니다. 난 당신이 이상한 방식으로 명령어 세트를 사용하고 있는지 추가 할 미구엘 점 외에도

li $t6, 3 
beq $s4, $t6, J 
+0

$ t1이 한 번에 한 명령 씩 순차적으로 회전하도록 루프를 어떻게 변경합니까? 이제는 새로운 밉스 사용자의 어리석은 구문 외의 중요한 문제입니다. – Learning2Code

0

예를 들어, 당신은에 의해 beq $s4, 3 J을 변경해야합니다. 어쩌면 어셈블러가 의도 한 바를 이해할 수는 있지만 코드를 읽는 것이 혼란 스럽습니다.

lw $t3, 2 
lw $t4, 3 

이들은 li이어야합니다. lw 명령은 메모리에서 단어를로드하는 데 사용됩니다. 당신은 단지 당신이 오프셋 드롭한다 0x400004 주소에서 시작하는 지침을 확인하려는 경우가 아니면


la $t0, 4($t1) 

lw, 그리고해야한다.

나는 또한 당신이 어디에서 증가 $t1 증가 찾을 수없는 것, 그래서 당신은 루프의 모든 반복에 대해 동일한 주소를 사용합니다.

+0

어떻게하면 $ t1이 한 번에 하나의 명령어 세트를 순환하도록 루프를 변경합니까? 이제는 새로운 밉스 사용자의 어리석은 구문 외의 중요한 문제입니다. – Learning2Code