MIPS를 사용하여 Dijkstra의 알고리즘을 구현할 때 에지 (소스 인덱스 | 대상 인덱스의 인덱스)를 나타내는 정수 배열을 만들려고합니다.오류 # 5 : 정렬되지 않은 단어 메모리 참조
rsim을 실행할 때 "정렬되지 않은 단어 메모리 참조"오류가 발생합니다. 나는 메모리 정렬이 무엇을 의미하는지 오해하고있을 수도 있다고 생각한다. 내 .DATA 내가 데이터를 배열로 입력 모서리의 수를 반복하고는는 .text에서
.data
.align 4
enterNode: .asciiz "Enter the number of nodes: "
enterEdges: .asciiz "Enter the number of edges: "
enterSource: .asciiz "Enter source: "
enterDestination: .asciiz "Enter destination: "
enterWeight: .asciiz "Enter weight: "
newLine: .asciiz "\n"
min_nodes: .word 1
max_nodes: .word 20
error1: .asciiz "Invalid number of nodes. Must be between 1 and 20.\n"
error2: .asciiz "Invalid number of edges. Must be between 0 and 400.\n"
edgeArr: .space 4800
# source | destination | weight
input: .space 5
이하이지만, 내가 언급하고있는 방법으로 보인다 또는 주소를 계산하는 것은 올바르지 않습니다.
addi $t0, $zero, 0 # Edge counter
la $t1, edgeArr
addi $t2, $zero, 0
loop:
# Source
addi $v0, $zero, PRINT_STRING # Print user prompt
la $a0, enterSource
syscall
addi $v0, $zero, READ_INT # Take user input
syscall
add $t3, $t2, $t2 # Calculate address in array
add $t3, $t3, $t3
add $t3, $t1, $t3
sw $v0, ($t3)
addi $t2, $t2, 1
# ...destination and weight are effectively identical to source...
# Loop condition
addi $t0, $t0, 1
slt $t4, $t0, $s1
bne $t4, $zero, loop
나는 몇 가지 비슷한 질문을 검토 한하지만 그들은 확실히 내가 오해 해요 부분을 해결하지 않는 것, 내가 정말보고 눈의 신선한 쌍의 혜택을 누릴 수 있습니다.
고마워요, 제가 정확히 찾고 있던 설명입니다. 내가 배열을 선언하는 곳을 생각하지 않았다. 또한 최소 및 최대 노드를 변경해야합니다. 여러분은 단순한 상수이고 아마도 그것들을 선언하는 더 좋은 방법 일 것입니다. 어셈블러가 .rodata를 지원하는지 확신 할 수 없지만 문서를 살펴볼 것입니다. 고맙습니다! – Gladdstone