2010-03-03 301 views
6

Tôi đang cố gắng tạo một mảng trong MIPS Assembly, và sau đó thêm tất cả các phần tử lại với nhau. Tuy nhiên, khi tôi cố gắng để lắp ráp sau, nó nóiTạo (và truy cập) một mảng trong MIPS

Lỗi trong dòng read_array 1 vị trí 7: ".word" chỉ có thể không xuất hiện trong đoạn văn bản Lắp ráp: hoạt động hoàn thành với lỗi.

Dưới đây là lắp ráp của tôi:

list: .word 3, 2, 1, 0, 1, 2 
li $t0, 0x00000000 #initialize a loop counter to $t0 
li $t4, 0x00000005 #last index of array 
li $t3, 0x00000000 #this will hold our final sum 
la $t1, list #the address of list[0] is in $t1 

loop: addi $t0, $t0, 0x00000001 #index++ 
    add $t5, $t0, $t0 #array index X2 
    add $t5, $t0, $t0 #array index X2 again 
    add $t6, $t5, $t1 #4x array index in $t6 

    lw $t2, 0($t6) #load list[index] into $t2 
    add $t3, $t3, $t2 #$t3 = $t3 + $t2 
    beq $t0, $t4, end 
    j loop 

end: 

Cảm ơn!

+0

Tôi biết một số lỗi logic trong mã này nhưng tôi đã trả lời câu hỏi của mình. Cảm ơn! – hodgesmr

+0

Điều đó thực sự kỳ lạ, IDK nếu giới hạn này là cố ý để bảo vệ người mới bắt đầu từ trộn dữ liệu với mã và có chương trình của họ sụp đổ khi thực hiện rơi vào dữ liệu của họ, hoặc những gì. Trong hầu hết các trình lắp ráp, bạn có thể sử dụng '.byte' /' .word' hoặc 'db' /' dd' ở bất kỳ đâu để phát ra bất kỳ byte nào bạn muốn ở bất kỳ vị trí nào. (ví dụ: để phát ra mã hóa không mặc định của hướng dẫn vì một lý do nào đó.) –

Trả lời

7

Bạn phải đặt dòng này:

list: .word 3, 2, 1, 0, 1, 2 

Into the phần .data. Kiểm tra điều này quick tutorial.

3

Lỗi này cho bạn biết bạn không thể đặt dữ liệu (.word 3, 2) trong phân đoạn mã. "Phân đoạn văn bản" là cụm từ kiểu cũ có nghĩa là "phân đoạn mã" http://en.wikipedia.org/wiki/Code_segment

Bộ lắp ráp muốn bạn khai báo phân đoạn dữ liệu và đặt mảng đó vào đó. Tôi chưa bao giờ thực hiện việc lắp ráp Mips, nhưng tôi hy vọng nó sẽ giống như thế này

.data 
list: .word 3, 2, 1, 0, 1, 2 

.text 
start: 
li $t0, 0x00000000 #initialize a loop counter to $t0 
li $t4, 0x00000005 #last index of array 
li $t3, 0x00000000 #this will hold our final sum 
la $t1, list #the address o 
+0

Nó sẽ là '.text' thay vì' .code' trong hầu hết các trình kết hợp mà tôi đã sử dụng. –

+0

@Carl: có thể bạn đã đúng, đặc biệt là thông báo lỗi. Tôi sẽ thay đổi nó. –

Các vấn đề liên quan