Кажется, у меня возникла проблема с пониманием части проекта, который назначил мой учитель.
Итак, основная идея в том, что у меня есть «таблица» .word, полная IP-адресов.Мне нужно иметь возможность просматривать таблицу, сравнивать различные значения и сопоставлять числа с пользовательским вводом.Мне также нужно учитывать таблицу любого размера, а не только таблицу, которую он нам дал.
Сначала я проверил, пытаясь сначала пройти через таблицу, потому что раньше никогда не работал с .word.Я разобрался, как загрузить таблицу и как использовать смещения для одной строки, проблема в том, когда я пытаюсь перейти на следующую строку.Я думал, что должен был использовать:
addi $a0, 20
I have also tried the addu and add instructions.
Это было для перехода к следующей строке, однако я получаю исключение 4, которое является ошибкой выборки данных.Это происходит после того, как я пытаюсь загрузить новое слово вроде:
lw $s0, ($a0)
Я не совсем уверен, что делать отсюда, я знаю, что $ a0 увеличивается за пределы того места, где находится таблица, я простоне знаете, как это исправить или какой код должен быть.Вот то, что я использую для тестирования.
.data
MESSAGE1: .asciiz "Enter an IP address\n"
MESSAGE2: .asciiz "First: "
MESSAGE3: .asciiz "Second: "
MESSAGE4: .asciiz "Third: "
MESSAGE5: .asciiz "Fourth: "
MESSAGE6: .asciiz "The IP address you enterd: "
MESSAGE7: .asciiz "."
MESSAGE8: .asciiz "\nClass A address\n"
MESSAGE9: .asciiz "\nClass B address\n"
MESSAGE10: .asciiz "\nClass C address\n"
MESSAGE11: .asciiz "\nClass D address\n"
MESSAGE12: .asciiz "\nInvalid domain class\n"
MESSAGE13: .asciiz "\nProgram successfully completed . . .\n"
MESSAGE14: .asciiz "\n"
MESSAGE15: .asciiz "Matching domain found at: "
MESSAGE16: .asciiz "Matching domain was NOT found . . . \n"
ERROROVER: .asciiz "The entered number is larger than 255.\n"
ERRORUNDER: .asciiz "The entered number is smaller than 0.\n"
ERROR: .asciiz "Invalid Number detected make sure the number entered is
between 0 and 255."
IP_ROUTING_TABLE_SIZE:
.word 10
IP_ROUTING_TABLE:
# line #, x.x.x.x -------------------------------------
.word 0, 146, 92, 255, 255 # 146.92.255.255
.word 1, 147, 163, 255, 255 # 147.163.255.255
.word 2, 201, 88, 88, 90 # 201.88.88.90
.word 3, 182, 151, 44, 56 # 182.151.44.56
.word 4, 24, 125, 100, 100 # 24.125.100.100
.word 5, 146, 163, 140, 80 # 146.163.170.80
.word 6, 146, 163, 147, 80 # 146.163.147.80
.word 10, 201, 88, 102, 80 # 201.88.102.1
.word 11, 148, 163, 170, 80 # 146.163.170.80
.word 12, 193, 77, 77, 10 # 193.77.77.10
.text
.globl main
main:
la $a0, IP_ROUTING_TABLE
lw $s0, ($a0)
lw $s1 4($a0)
lw $s2, 8($a0)
lw $s3, 12($a0)
lw $s4, 16($a0)
li $v0, 1
move $a0, $s0
syscall
li $v0, 4
la $a0, MESSAGE14
syscall
li $v0, 1
move $a0, $s1
syscall
li $v0, 4
la $a0, MESSAGE14
syscall
li $v0, 1
move $a0, $s2
syscall
li $v0, 4
la $a0, MESSAGE14
syscall
li $v0, 1
move $a0, $s3
syscall
li $v0, 4
la $a0, MESSAGE14
syscall
li $v0, 1
move $a0, $s4
syscall
li $v0, 4
la $a0, MESSAGE14
syscall
addi $a0, 20
lw $s0, ($a0) #problem is here
li $v0, 1
move $a0, $s0
syscall
P_EXIT: jr $31
Извините, это стало более продолжительным, чем, вероятно, должно было быть, я просто хотел убедиться, что он понял, что происходит.Спасибо за помощь.
Кроме того, я попытался использовать отладчик, и он не помог мне разобраться в проблеме.