Arrays 汇编:将寄存器从C分配到数组中

Arrays 汇编:将寄存器从C分配到数组中,arrays,c,assembly,mips,Arrays,C,Assembly,Mips,我有一个C语言的代码,我需要把它翻译成汇编语言。 有没有一个简单的方法可以做到这一点 C代码: int size, i; printf("Type array size:"); scanf("%d", &size); int vector[size]; for (i = 0; i<size; i++){ printf("type value of array[%

我有一个C语言的代码,我需要把它翻译成汇编语言。 有没有一个简单的方法可以做到这一点

C代码:

int size, i;
    
    printf("Type array size:");
    scanf("%d", &size);
     
    int vector[size]; 
    for (i = 0; i<size; i++){
        printf("type value of array[%d]: ", i);
        scanf("%d", &vector[i]);
    }

需要使用计数器,并且需要在循环内更新其值

.data
vec:    .space 0 
size: .asciiz "\n\n Type array size:"
prompt: .asciiz "Type value of array:["
closebrack: .asciiz "]"


.text

.globl main

main:
    la $a1, vec
    li $t0, 0 #counter=0
    li $v0, 4
    la $a0, size
    syscall
    li $v0, 5
    syscall
    move $a2, $v0 #$a2 holds array size  
    j Loop


    Loop:
    beq $a2, $t1, END
    li $v0, 4
    la $a0, prompt 
    syscall
    add, $t0, 1 #counter++
    move $a0, $t0     
    li $v0, 1        #print counter
    syscall
    li $v0, 4
    la $a0, closebrack # print the closing bracket "]"
    syscall
    li $v0,5 #gets value as printf 
    syscall
    move $s1,$v0 
    sw $s1, 0($a1) 
    la $a1, 4($a1) #moves on to next value of the array
    addi $t1, $t1, 1
    j Loop

    END:
    li, $v0,10
    syscall

这肯定不是英特尔,看起来更像mips。无论如何,如果你的数组是静态的,只需在你的数据部分分配4个字,并将项目存储在那里。欢迎访问该站点。您可以使用代码块进行编码。
vec:.space 0
不保留任何字节。如果要匹配C语义,需要在堆栈上保留可变的空间量。
.data
vec:    .space 0 
size: .asciiz "\n\n Type array size:"
prompt: .asciiz "Type value of array:["
closebrack: .asciiz "]"


.text

.globl main

main:
    la $a1, vec
    li $t0, 0 #counter=0
    li $v0, 4
    la $a0, size
    syscall
    li $v0, 5
    syscall
    move $a2, $v0 #$a2 holds array size  
    j Loop


    Loop:
    beq $a2, $t1, END
    li $v0, 4
    la $a0, prompt 
    syscall
    add, $t0, 1 #counter++
    move $a0, $t0     
    li $v0, 1        #print counter
    syscall
    li $v0, 4
    la $a0, closebrack # print the closing bracket "]"
    syscall
    li $v0,5 #gets value as printf 
    syscall
    move $s1,$v0 
    sw $s1, 0($a1) 
    la $a1, 4($a1) #moves on to next value of the array
    addi $t1, $t1, 1
    j Loop

    END:
    li, $v0,10
    syscall