文字列をmipsで並べ替える

user2837034

選択ソートアルゴリズムメソッドを使用して文字列をソートするプログラムがあります。プログラムは、ユーザーが入力した文字列を受け取り、選択ソートアルゴリズムを使用してソートします。私の問題は、それを実行すると、「フェッチアドレスがワード境界に整列されていません」というエラーが表示されることです。これを修正するにはどうすればよいですか?私はmipsでのプログラミングに比較的慣れていません。

.data
prompt: .asciiz "\n\nEnter an string of characters: "
result: .asciiz "\n\nHere is the string you entered: "
buffer: .space 80
length: .word  80
before: .asciiz "Before sort:\n"
space:  .asciiz " "
after:  .asciiz "\n\nAfter Sort\n"
newLine: .asciiz "\n"

.text
.globl main

main:   
#Prints the prompt string
li $v0, 4
la $a0, prompt 
syscall 

#reads string from user and saves in $a0
li $v0, 8
la $a0, buffer
li $a1, 80
syscall 

#Prints the result string
li $v0, 4 
la $a0, result 
syscall

#Prints the string entered by the user
la $a0, buffer 
li $v0, 4
syscall     

li      $t5, 0      # t5 is k = 0

la      $t7, length     
    lw      $t7, 0($t7)     # t7 = length

addi    $t8, $t7, -1    # t8 = length - 1
la  $t6, 0($a0) # t6 = address of the array

outerLoop: slt  $t0, $t5, $t8   # if k < length - 1  t0 = 1
beq $t0, $zero, breakOuterLoop # k >= (length - 1)
add $t9, $zero, $t5 # t9 is min = k

addi    $t1, $t5, 1     # t1 is j = k + 1

innerLoop: slt  $t0, $t1, $t7   # if j < length t0 = 1
beq $t0, $zero, breakInnerLoop

add $s3, $t9, $t9   # s3 = 2 * min
add $s3, $s3, $s3   # s3 = 4 * min
add $s3, $a0, $s3   # s3 is address of list[min]
lw  $t2, 0($s3)     # t2 is list[min]

add $s0, $t1, $t1   # s0 = 2 * j
add $s0, $s0, $s0   # s0 = 4 * j
add $s0, $a0, $s0   # s0 is address of list[j]
lw  $t3, 0($s0)     # t3 is list[j]

slt $t0, $t3, $t2   # if list[j] < list[min] t0 = 1
beq $t0, $zero, secondIF # skip min = j & ++j and jump to secondIF
add     $t9, $zero, $t1 # min = j
j secondIF

secondIF: beq   $t9, $t5, incrementJ # if min != k swap, else goto incrementJ

# BEGIN SWAP :
add $s0, $t9, $t9   # s0 = 2 * min
add $s0, $s0, $s0   # s0 = 4 * min
add $s0, $s0, $a0   # s0 = address of list[min]
lw  $t4, 0($s0)     # t4 is temp = list[min]


add $s1, $t5, $t5   # s1 = 2 * k
add $s1, $s1, $s1   # s1 = 4 * k
add $s1, $a0, $s1   # s1 = address of list[k]
lw  $s3, 0($s1)     # s3 = list[k]


sw  $s3, 0($s0)     # list[min] = list[k]

sw  $t4, 0($s1)     # list[k] = temp 
addi    $t1, $t1, 1 # ++j
add $t9, $zero, $t5 # t9 is min = k  
# END SWAP

j innerLoop 

incrementJ: addi $t1, $t1, 1    # ++j
j innerLoop

breakInnerLoop: addi $t5, $t5, 1 # ++k
j outerLoop


breakOuterLoop:             


#Prints the result string
li $v0, 4 
la $a0, result 
syscall

#Prints the string entered by the user
la $a0, buffer 
li $v0, 4
syscall

 exitProgram:   li $v0, 10  # system call to
syscall         # terminate program
コンラッドリンデンバッハ

コードを見ると、文字を並べ替えようとしていますが、文字列の文字が1バイトであるのに対し、完全な単語を対象lwした命令使用しているようswです。

lwそしてsw供給されたアドレスは、ワード境界(文字列の各文字を見た場合などに起こるでしょう)でない場合に失敗します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

文字列を文字で並べ替える

分類Dev

Javaで文字列を並べ替える

分類Dev

文字列配列をCの文字列長で並べ替える

分類Dev

文字列配列を特定の文字列値で並べ替える

分類Dev

文字で始まる配列文字列を並べ替える

分類Dev

MIPSでの配列の並べ替え

分類Dev

Perlで特定の文字順序で文字列を並べ替える

分類Dev

文字列のBsonArrayを並べ替える

分類Dev

文字の配列を並べ替える

分類Dev

文字列を並べ替える方法は?

分類Dev

Swiftで文字列文字を並べ替える

分類Dev

Pythonで文字列内の文字を並べ替える

分類Dev

数字で終わる文字列を数字で並べ替える

分類Dev

列の部分文字列でPandas Dataframeを並べ替える

分類Dev

Lodashで数値文字列の配列を並べ替える

分類Dev

文字列配列を長さで並べ替える方法は?

分類Dev

kotlinで文字列配列を並べ替える方法

分類Dev

Forthで文字列の配列を並べ替える

分類Dev

辞書式順序で文字列配列を並べ替える

分類Dev

日付文字列で辞書の配列を並べ替える

分類Dev

文字列配列を従業員ID番号で並べ替える

分類Dev

jQueryで整数文字列型の配列を並べ替える

分類Dev

VB.net(文字列)でDataGridViewの列を並べ替える方法

分類Dev

Javaで文字列の配列を並べ替える

分類Dev

文字列を特定の列で並べ替える

分類Dev

文字列変数で列を並べ替える

分類Dev

文字列配列を特別な形式で並べ替える

分類Dev

数値、文字列、nilsで列を並べ替える

分類Dev

文字列配列phpで日時を並べ替える方法

Related 関連記事

ホットタグ

アーカイブ