[Notas da linguagem Assembly] Seis: estrutura do programa de loop

No passado

 

[Notas da linguagem Assembly] 0: (meu primeiro assembler)

[Notas da linguagem Assembly] Dois: representação de dados

[Notas da linguagem Assembly] Três: Endereçamento de dados

[Notas da linguagem Assembly] Quatro: Instruções gerais de processamento de dados

[Notas da linguagem Assembly] Cinco: Estrutura sequencial do programa

 

Diretório

Estrutura do programa de loop

Instrução de loop

Instrução LOOP

 Instrução JECXZ

Programa de soma de matrizes

Loop de controle de contagem

Visão geral:

Programa máximo de busca

Loop de controle condicional

Visão geral:

Programa para contar o número de cadeias que terminam em 0


Estrutura do programa de loop

Instrução de loop

Instrução LOOP

A instrução LOOP diminui em 1 e depois julga

ECX = 0, loop 2 até a 32ª potência

 Instrução JECXZ

 

Programa de soma de matrizes

 

 

Registre a indexação para acessar os elementos da matriz
          mov ebx, 0; aponte para o primeiro elemento
aginn: add eax, arry [ebx * (tipo arry)]; sum
          adicione ebx, 1; aponte para o próximo elemento da matriz

Registre o endereçamento relativo para acessar os elementos da matriz
          mov ebx, 0; aponte para o primeiro elemento
aginn: add eax, arry [ebx]; soma
          adicione ebx, 4; aponte para o próximo elemento da matriz

 Endereçamento indireto de registradores para acessar os elementos da matriz
          mov ebx, offset arry; aponte para o primeiro elemento
novamente: add eax, [ebx]; sum
          add ebx, 4; aponte para o próximo elemento da matriz

arry      dword 136,-138,133,130,-161    ;数组
sum       dword ?       ;结果变量
          mov ecx, legthof arry      ;ECX=数组元素的个数
          xor eax, eax       ;求和初值为0
          mov ebx, eax       ;数组指针为0
again:    add eax, arry[ebx*(type arry)]    ;求和
          inc ebx        ;指向下一个数组元素
          loop again
          mov sum,eax     ;保存结果       

Loop de controle de contagem

Visão geral:

Programa máximo de busca

        ;数据段
arry    dword -3,0,20,900,-56
count   = lengthof arry
max     dword ?

 1)

        ;代码段
        mov ecx, count-1
        xor esi, esi
        mov eax, arry[esi*(type arry)]
again:  add esi, 1
        cmp eax, arry[esi*(type arry)]  ;比较
        jge next           ;已是较大值,继续
        mov eax, arry[esi*(type arry)]
next:   loop again
        mov max, eax

2) 

        ;代码段
        mov ecx, count-1
        xor esi, esi
        mov eax, arry[esi*(type arry)]
again:  add esi, 1
        cmp eax, arry[esi*(type arry)]  ;比较
        jge next           ;已是较大值,继续
        mov eax, arry[esi*(type arry)]
next:   cmp esi, count-1
        jb again
        mov max, eax

Loop de controle condicional

Visão geral:

Programa para contar o número de cadeias que terminam em 0

Julgue primeiro, recicle

        ;数据段
string  byte 'Do you have fun?',0
        ;代码段
        xor ebx, ebx
again:  mov al, string[ebx]
        cmp al, 0
        jz done     ;是0就跳转
        inc ebx
        jmp again
done:   mov eax, ebx
        call dispuid

Faça um loop primeiro e depois julgue

        ;数据段
string  byte 'Do you have fun?',0
        ;代码段
        xor ebx, -1
again:  inc ebx
        cmp string[ebx], 0
        jnz again
done:   mov eax, ebx
        call dispuid

Referências: Curso de programação da linguagem de montagem da plataforma MoOC da Universidade Chinesa

Publicado 47 artigos originais · Gosto 23 · Visita 2677

Acho que você gosta

Origin blog.csdn.net/weixin_43252204/article/details/105508909
Recomendado
Clasificación