Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何在MIPS中使用系统调用9(sbrk)进行动态内存分配_Sorting_Mips - Fatal编程技术网

Sorting 如何在MIPS中使用系统调用9(sbrk)进行动态内存分配

Sorting 如何在MIPS中使用系统调用9(sbrk)进行动态内存分配,sorting,mips,Sorting,Mips,我有一个任务,就是用MIPS写梳状排序。用户将要输入数组,当然还有它的大小。在搜索堆分配时,我找到了系统调用9。然而,我找不到使用它的方法。我写道: li $v0, 4 la $a0, message1 # prints the first message syscall li $v0, 5 # reads the size for the array syscall mul $t0,

我有一个任务,就是用MIPS写梳状排序。用户将要输入数组,当然还有它的大小。在搜索堆分配时,我找到了系统调用9。然而,我找不到使用它的方法。我写道:

    li $v0, 4
    la $a0, message1    # prints the first message 
    syscall
    
    li $v0, 5           # reads the size for the array        
    syscall
    
    mul $t0, $v0, 4     # because array contains integer, I change them into bytes
    la $a0, $t0         # allocate the size of the array in the heap
    li $v0, 9           # now, $v0 has the address of allocated memory
    syscall
    
    move $v1, $v0       # Because systemcall uses $vo register, I move it to $v1 keep it safe.
    
create_array:    
    la $a0, message2    # prints the first message
    li $v0, 4 
    syscall

    li   $s0, 0         # $s1 is the index, and loop induction variable
    li   $s1, 5         # $s1 is the sentinel value for the loop
        
Loop1:  
    bge  $s0, $s1, End_Loop1

    li $v0, 5           # Read integer values
    syscall
    
    mul  $t3, $s0, 4    # $t3 is the offset
    add  $t4, $t3, $t0  # $t4 is the address of desired index
    sw   $v0, ($t4)     # store the value in the array
    addi $s0, $s0, 1    # increment the index        
    j    Loop1

End_Loop1:
我得到了这个错误:

la": Too few or incorrectly formatted operands. Expected: la $t1,($t2)
我如何使用它?这是创建阵列的正确方法吗?

替换

la $a0, $t0     # allocate the size of the array in the heap

la
指令的目的是将符号的地址加载到寄存器中。例如:

la $a0, message1    # prints the first message 
消息1
的地址加载到寄存器
$a0
la
实际上是一条伪指令,在本例中可转换为:

lui $a0, message1/0x10000       # load the upper halfword of the address
ori $a0, $a0, message1%0x10000  # OR in the lower halfword of the address
可以想象,尝试加载另一个寄存器的地址是没有意义的,因为寄存器没有地址


当我们讨论MIPS伪指令时:
move
也是其中之一,上面的
move$a0,
指令转换为类似于
add$a0,$0,$t0
的内容

另外,将$t0替换为$v1$t0只保存堆中分配的总字节,但需要$v1,它是堆中数组的起始地址。 应该是这样的:

add  $t4, $t3, $v1      # $t4 is the address of desired index

它在抱怨哪一行?@Michael“la$a0,$t0#分配堆中数组的大小”
add  $t4, $t3, $v1      # $t4 is the address of desired index