【发布时间】:2015-11-01 18:42:56
【问题描述】:
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 转换为正确的 Assembly 32 位系统。谁能帮帮我?
我这样做,忽略 cmets 是外语的 但我不知道如何在 addvec3 中执行第三个循环,以及之后的条件
global ptrvec1, ptrvec2, ptrvec3
.section .text
.global comuns #int comuns(void)
comuns:
movl $0, %eax # iniciar eax a 0
movl $0, %ebx # primeiro ciclo
movl $0, %ecx # segundo ciclo
movl $0, %edx # ciclo do vetor3
movl $ptrvec1, %ebp #endereco vetor1
movl $ptrvec2, %edi #endereco vetor2
movl $ptrvec3, %esi # resultado
ciclo:
cmpl $14, %ebx # compara para fim ciclo
je fim
movl (%ebp), %esp # move inteiro ptrvec1 para esp
ciclo2:
cmpl $14,%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 $0, %ecx # segundo ciclo a 0
incl %ebx # incrementa ciclo
addl $4, %ebp # passa para proximo inteiro vetor 1
jmp ciclo # passar para o ciclo
incrementarCiclo2:
addl $4, %edi # passa para o proximo inteiro de vetor 2
incl %ecx # incrementa ciclo 2
jmp ciclo2
addvec3:
fim:
movl %edx,%eax
ret
目标是有 2 个 vec 并比较它们,如果有重复的数字,请检查数字是否不在 vec3 中并添加它们。
【问题讨论】:
-
“帮助”不等于“为我写”所以也许你应该展示你得到了什么以及你有什么具体问题。
-
我编辑了问题
标签: assembly nested-loops 32-bit