创建单个链表
Creating a single linked list
我应该使用 MIPS 创建一个单链表然后对其进行排序等。这是我的一段代码:
.data
STR_NEWLINE: .asciiz "\n"
STR_ENTER: .asciiz "enter an integer(0 to finish): "
.text
main:
sw $zero,0($sp) # list_head = 0
move $s0,$sp # list_end adress
main_loop:
la $a0,STR_ENTER
li $v0,4
syscall
li $v0,5
syscall
blez $v0,bubble_loop
addi $sp, $sp, -8
sw $v0,0($sp)
sw $t0,4($sp)
move $s0,$sp
addi $t0, $t0, -8
j main_loop
它运行良好,它从用户那里获取输入,将它们存储在内存中,还可以进行排序和打印。但问题(可能不是)是我不确定它是否是一个真正的链表,因为据我所知链表结构是这样的:
|数据 |指针到任何地方 | ... |数据 | pointerToAnywhere |
但在我的代码中,它总是一个接一个,所以如果下一个输入不能存储在内存中的任何空白位置,那么指针就没有意义了。
总而言之,我应该如何改进我的代码以使用 $sp =(内存中的任何空白位置)而不是 "addi $sp, $sp, -8"?
经过我的研究,我找到了解决方案,实际上它非常非常简单,我只是不知何故错过了。
li $v0, 9
li $a0,(number of bytes of storage desired)
syscall
作为系统调用 9 的结果,$v0 获得了块的地址。
我应该使用 MIPS 创建一个单链表然后对其进行排序等。这是我的一段代码:
.data
STR_NEWLINE: .asciiz "\n"
STR_ENTER: .asciiz "enter an integer(0 to finish): "
.text
main:
sw $zero,0($sp) # list_head = 0
move $s0,$sp # list_end adress
main_loop:
la $a0,STR_ENTER
li $v0,4
syscall
li $v0,5
syscall
blez $v0,bubble_loop
addi $sp, $sp, -8
sw $v0,0($sp)
sw $t0,4($sp)
move $s0,$sp
addi $t0, $t0, -8
j main_loop
它运行良好,它从用户那里获取输入,将它们存储在内存中,还可以进行排序和打印。但问题(可能不是)是我不确定它是否是一个真正的链表,因为据我所知链表结构是这样的:
|数据 |指针到任何地方 | ... |数据 | pointerToAnywhere |
但在我的代码中,它总是一个接一个,所以如果下一个输入不能存储在内存中的任何空白位置,那么指针就没有意义了。
总而言之,我应该如何改进我的代码以使用 $sp =(内存中的任何空白位置)而不是 "addi $sp, $sp, -8"?
经过我的研究,我找到了解决方案,实际上它非常非常简单,我只是不知何故错过了。
li $v0, 9
li $a0,(number of bytes of storage desired)
syscall
作为系统调用 9 的结果,$v0 获得了块的地址。