[汇编语言笔记篇]六:循环程序结构

往期

 

[汇编语言笔记篇]0:(我的第一个汇编程序)

[汇编语言笔记篇]二:数据的表示

[汇编语言笔记篇]三:数据寻址

[汇编语言笔记篇]四:通用数据处理指令

[汇编语言笔记篇]五:顺序程序结构

 

目录

循环程序结构

循环指令

LOOP指令

 JECXZ指令

数组求和程序

计数控制循环

概述:

求最大值程序

条件控制循环

概述:

统计以0结尾的字符串个数程序


循环程序结构

循环指令

LOOP指令

[汇编语言笔记篇]六:循环程序结构_第1张图片

[汇编语言笔记篇]六:循环程序结构_第2张图片

LOOP 指令先减1后判断

ECX=0,循环2的32次方

 JECXZ指令

[汇编语言笔记篇]六:循环程序结构_第3张图片

 

数组求和程序

 

 

寄存器变址寻址访问数组元素
          mov ebx, 0    ;指向首个元素
aginn:    add eax, arry[ebx*(type arry)]      ;求和
          add ebx, 1        ;指向下一个数组元素

寄存器相对寻址访问数组元素
          mov ebx, 0    ;指向首个元素
aginn:    add eax, arry[ebx]      ;求和
          add ebx, 4        ;指向下一个数组元素

 寄存器的间接寻址访问数组元素
          mov ebx, offset arry    ;指向首个元素
aginn:    add eax, [ebx]      ;求和
          add ebx, 4        ;指向下一个数组元素

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     ;保存结果       

计数控制循环

概述:

[汇编语言笔记篇]六:循环程序结构_第4张图片

求最大值程序

        ;数据段
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

条件控制循环

概述:

[汇编语言笔记篇]六:循环程序结构_第5张图片

统计以0结尾的字符串个数程序

先判断,再循环

        ;数据段
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

先循环,再判断

        ;数据段
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

参考文献:中国大学mooc平台汇编语言程序设计课程

你可能感兴趣的:(汇编语言篇)