2017-09-24 10 views
0

그래서 최근에 어셈블리 클래스를 가져 왔고 그 중 하나가 과제를주었습니다. 마지막 부분을 제외한 모든 것을 코딩했습니다 ... 나는 주어진 배열에 숫자를 추가하고 합계를 인쇄해야합니다 ... 쉽지요?내 코드에 어떤 문제가 있습니까? (배열에 숫자 추가하기)

.data 

array: .word 1,2 
size: .word 2 
la $s0, array 
lw $s1, size 
li $t9, 0 

.text 

loop: 
lw $a0, ($s0) 
add $a0, $a0, $a0 
addi $s0, $s0, 4 
add $t9, $t9, 1 
blt $t9, $s1, loop 

li $v0, 1 
syscall 
+0

어떤 행이 12 행입니까? 'lw $ a0, ($ s0)'? 정확히 오류 메시지가 무엇입니까? 그리고 이것을 디버거에서 실행하고 레지스터 값을 볼 때 무엇을 볼 수 있습니까? –

+0

@peter Cordes C : \ Users \ Mohamad \ Desktop \ addingarray.asm 오류 13 행 : 0x00400004의 런타임 예외 : 0x00000000 범위를 벗어난 주소 –

답변

2

la $s0, array.data 섹션에서, 그래서 : 그것은 라인 (12)은 어떤 이유로 범위를 벗어난 것을 말할 때 내가 실행 아니, 난 오류가 = 여기 내 코드/

그래서

입니다 실행되지 않습니다.

디버거를 사용하여 단일 단계로 실행 한 경우 프로그램에서 데이터 섹션의 명령어를 실행하지 않으며 아마도 loop:에서 실행을 시작한 것으로 보았을 것입니다.

이 시점에서 $s0은 여전히 ​​(오류 메시지에 따라) 0이됩니다. 어쨌든, 그것은 array을 가리키고 있지 않습니다.

+0

위대한 일을 수행하고 일부 논리 오류를 발견하고 이제는 큰 감사를드립니다. 1 가지 더 ... 만약 내가 문자열과 비교하고 싶다면 beq bne을 사용합니까? 또는 그것에 더 있습니까? 메신저 내 코드는 단어가 여기 배열에있는 경우 난 그냥보고 싶어 내 다른 프로그램 –

+0

몇 가지 문제를 나도 몰라 갖는 무슨 TBH '.DATA 배열 잘못된 : .asciiz "하나", "둘", "세" 단어 : .asciiz는 "구" msgone : 배열을, 라 $ S0는 .text 4 을 .word LW을 : .asciiz "\ n이 단어를 찾을 수 없습니다" 크기 : .asciiz msgtwo는 "\ n이 단어가 발견" $ S1 크기 라 $의 A1, 워드 리 $의 T9 0 루프 : BEQ $으로의 T9, $ S1은,174 라 $의 A0 ($의 S0)를 실패 를 msgtwo, 라 $의 A0 : 51,515,ADDI $ S0, $ S0 4 추가 $의 T9, $ t9의 1 BEQ $으로의 A1, $의 A0는 $의 A1, $의 A0, 실패 루프 BNE 발견 리 $의 V0 발견 4 콜 : 라 $의 A0, msgone 리 $의 V0, j는 수행 할 콜' –

+0

음, 어디 실 거예요 형식을 올바르게 =/ –