嵌套循环汇编代码
nested loop Assembly code
for (int i = 0; i < vec1.length; i++) {
for (int j = 0; j < vec2.length; j++) {
if(vec1[i]==vec2[j]){
add=true;
cont++;
for (int k = 0; k < cont; k++) {
if(vec2[j]==vec3[k]){
add=false;
}
}
if(add==true){
vec3[cont+1]=vec2[j];
}
}
}
}
我想将此伪代码 java 翻译成正确的汇编 32 位系统。谁能帮帮我?
我是这样做的,忽略评论是外语
但我不知道如何在 addvec3 中执行第三个循环,以及
之后的条件
global ptrvec1, ptrvec2, ptrvec3
.section .text
.global comuns #int comuns(void)
comuns:
movl [=11=], %eax # iniciar eax a 0
movl [=11=], %ebx # primeiro ciclo
movl [=11=], %ecx # segundo ciclo
movl [=11=], %edx # ciclo do vetor3
movl $ptrvec1, %ebp #endereco vetor1
movl $ptrvec2, %edi #endereco vetor2
movl $ptrvec3, %esi # resultado
ciclo:
cmpl , %ebx # compara para fim ciclo
je fim
movl (%ebp), %esp # move inteiro ptrvec1 para esp
ciclo2:
cmpl ,%ecx # compara para fim ciclo2
je incrementarCiclo # se igual incrementa ciclo
movl (%edi), %eax
cmpl %eax, %esp #compara inteiro de esp com inteiro de edi
je adicionarAvetor3 # se igual adiciona a vetor3 em esi
jmp incrementarCiclo2 # se nao incrementao ciclo2
incrementarCiclo:
movl [=11=], %ecx # segundo ciclo a 0
incl %ebx # incrementa ciclo
addl , %ebp # passa para proximo inteiro vetor 1
jmp ciclo # passar para o ciclo
incrementarCiclo2:
addl , %edi # passa para o proximo inteiro de vetor 2
incl %ecx # incrementa ciclo 2
jmp ciclo2
addvec3:
fim:
movl %edx,%eax
ret
objective 就是有2个vec比较,如果有重复的数字检查是否不在vec3中,然后相加。
如果你没有足够的寄存器来存储变量,那么使用内存:
.section .data
i: .int 0
j: .int 0
k: .int 0
add: .int 0
cont: .int 0
.section .text
comuns:
movl [=10=], (i)
ciclo1:
cmpl , (i) # compara para fim ciclo
jae endciclo1
movl [=10=], (j)
ciclo2:
cmpl , (j) # compara para fim ciclo2
jae endciclo2 # se igual incrementa ciclo
...
movl , (add)
incl (cont)
...
movl [=10=], (k)
ciclo3:
mov (cont), %eax
cmp %eax, (k)
jae endciclo3
...
incl (k)
jmp ciclo3
endciclo3:
...
incl (j)
jmp ciclo2
endciclo2:
...
incl (i)
jmp ciclo1
endciclo1:
fim:
movl (cont),%eax
ret
for (int i = 0; i < vec1.length; i++) {
for (int j = 0; j < vec2.length; j++) {
if(vec1[i]==vec2[j]){
add=true;
cont++;
for (int k = 0; k < cont; k++) {
if(vec2[j]==vec3[k]){
add=false;
}
}
if(add==true){
vec3[cont+1]=vec2[j];
}
}
}
}
我想将此伪代码 java 翻译成正确的汇编 32 位系统。谁能帮帮我?
我是这样做的,忽略评论是外语 但我不知道如何在 addvec3 中执行第三个循环,以及
之后的条件global ptrvec1, ptrvec2, ptrvec3
.section .text
.global comuns #int comuns(void)
comuns:
movl [=11=], %eax # iniciar eax a 0
movl [=11=], %ebx # primeiro ciclo
movl [=11=], %ecx # segundo ciclo
movl [=11=], %edx # ciclo do vetor3
movl $ptrvec1, %ebp #endereco vetor1
movl $ptrvec2, %edi #endereco vetor2
movl $ptrvec3, %esi # resultado
ciclo:
cmpl , %ebx # compara para fim ciclo
je fim
movl (%ebp), %esp # move inteiro ptrvec1 para esp
ciclo2:
cmpl ,%ecx # compara para fim ciclo2
je incrementarCiclo # se igual incrementa ciclo
movl (%edi), %eax
cmpl %eax, %esp #compara inteiro de esp com inteiro de edi
je adicionarAvetor3 # se igual adiciona a vetor3 em esi
jmp incrementarCiclo2 # se nao incrementao ciclo2
incrementarCiclo:
movl [=11=], %ecx # segundo ciclo a 0
incl %ebx # incrementa ciclo
addl , %ebp # passa para proximo inteiro vetor 1
jmp ciclo # passar para o ciclo
incrementarCiclo2:
addl , %edi # passa para o proximo inteiro de vetor 2
incl %ecx # incrementa ciclo 2
jmp ciclo2
addvec3:
fim:
movl %edx,%eax
ret
objective 就是有2个vec比较,如果有重复的数字检查是否不在vec3中,然后相加。
如果你没有足够的寄存器来存储变量,那么使用内存:
.section .data
i: .int 0
j: .int 0
k: .int 0
add: .int 0
cont: .int 0
.section .text
comuns:
movl [=10=], (i)
ciclo1:
cmpl , (i) # compara para fim ciclo
jae endciclo1
movl [=10=], (j)
ciclo2:
cmpl , (j) # compara para fim ciclo2
jae endciclo2 # se igual incrementa ciclo
...
movl , (add)
incl (cont)
...
movl [=10=], (k)
ciclo3:
mov (cont), %eax
cmp %eax, (k)
jae endciclo3
...
incl (k)
jmp ciclo3
endciclo3:
...
incl (j)
jmp ciclo2
endciclo2:
...
incl (i)
jmp ciclo1
endciclo1:
fim:
movl (cont),%eax
ret