往期
[汇编语言笔记篇]0:(我的第一个汇编程序)
[汇编语言笔记篇]二:数据的表示
[汇编语言笔记篇]三:数据寻址
[汇编语言笔记篇]四:通用数据处理指令
[汇编语言笔记篇]五:顺序程序结构
目录
循环程序结构
循环指令
LOOP指令
JECXZ指令
数组求和程序
计数控制循环
概述:
求最大值程序
条件控制循环
概述:
统计以0结尾的字符串个数程序
LOOP 指令先减1后判断
ECX=0,循环2的32次方
寄存器变址寻址访问数组元素
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 ;保存结果
;数据段
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
先判断,再循环
;数据段
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平台汇编语言程序设计课程