我有一个代码在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