【问题标题】:nested loop Assembly code嵌套循环汇编代码
【发布时间】: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


【解决方案1】:

如果您没有足够的寄存器来存储变量,请使用内存:

.section .data

    i: .int 0
    j: .int 0
    k: .int 0
    add: .int 0
    cont: .int 0

.section .text

comuns:
    movl $0, (i)
    ciclo1:
        cmpl $14, (i) # compara para fim ciclo
        jae endciclo1

        movl $0, (j)
        ciclo2:
            cmpl $14, (j) # compara para fim ciclo2
            jae endciclo2 # se igual incrementa ciclo

            ...
            movl $1, (add)
            incl (cont)
            ...

            movl $0, (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

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2017-02-02
    • 2014-10-22
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    相关资源
    最近更新 更多