[汇编语言笔记篇]六:循环程序结构
往期
[汇编语言笔记篇]0:(我的第一个汇编程序)
[汇编语言笔记篇]二:数据的表示
[汇编语言笔记篇]三:数据寻址
[汇编语言笔记篇]四:通用数据处理指令
[汇编语言笔记篇]五:顺序程序结构
目录
循环程序结构
循环指令
LOOP指令
JECXZ指令
数组求和程序
计数控制循环
概述:
求最大值程序
条件控制循环
概述:
统计以0结尾的字符串个数程序
循环程序结构
循环指令
LOOP指令


LOOP 指令先减1后判断
ECX=0,循环2的32次方
JECXZ指令

数组求和程序
寄存器变址寻址访问数组元素
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 ;求和初值为0mov ebx, eax ;数组指针为0
again: add eax, arry[ebx*(type arry)] ;求和inc ebx ;指向下一个数组元素loop againmov sum,eax ;保存结果
计数控制循环
概述:

求最大值程序
;数据段
arry dword -3,0,20,900,-56
count = lengthof arry
max dword ?
1)
;代码段mov ecx, count-1xor esi, esimov eax, arry[esi*(type arry)]
again: add esi, 1cmp eax, arry[esi*(type arry)] ;比较jge next ;已是较大值,继续mov eax, arry[esi*(type arry)]
next: loop againmov max, eax
2)
;代码段mov ecx, count-1xor esi, esimov eax, arry[esi*(type arry)]
again: add esi, 1cmp eax, arry[esi*(type arry)] ;比较jge next ;已是较大值,继续mov eax, arry[esi*(type arry)]
next: cmp esi, count-1jb againmov max, eax
条件控制循环
概述:

统计以0结尾的字符串个数程序
先判断,再循环
;数据段
string byte 'Do you have fun?',0;代码段xor ebx, ebx
again: mov al, string[ebx]cmp al, 0jz done ;是0就跳转inc ebxjmp again
done: mov eax, ebxcall dispuid
先循环,再判断
;数据段
string byte 'Do you have fun?',0;代码段xor ebx, -1
again: inc ebxcmp string[ebx], 0jnz again
done: mov eax, ebxcall dispuid
参考文献:中国大学mooc平台汇编语言程序设计课程
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
