汇编:从c语言中分配寄存器到数组



我有一个代码在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]);
}

我的Mips代码:到目前为止,我还没有动态地翻译它,它只是一遍又一遍地打印相同的提示符。

我需要汇编中的提示符看起来像c中的提示符。

.data
vec:    .space 0 
size: .asciiz "nn Type array size:"
prompt: .asciiz "Type value of array:"
.text
.globl main
main:
la $a1, vec

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
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:

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

.data
vec:    .space 0 
size: .asciiz "nn 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

最新更新