例 3 . 求 1-100 的和 计数控制循环 , 循环次数固定 mov ah,1 ; 从键盘输入一个字符 int 21h mov bl,al ;BL ← AL =字符的 ASCII 码 ;DOS 功能会改变 AL 内容,故字符 ASCII 码存入 BL mov ah,2 mov dl,':' ; 显示一个分号,用于分隔 int 21h mov cx,8 ;CX ← 8 (循环次数) again: shl bl,1 ; 左移进 CF ,从高位开始显示 mov dl,0 ;MOV 指令不改变 CF adc dl,30h ;DL ← 0 + 30H + CF ;CF 若是 0 ,则 DL ← '0' ;若是 1 ,则 DL ← '1' mov ah,2 int 21h ; 显示 loop again ;CX 减 1 ,如果 CX 未减至 0 ,则循环
例 4: 用二进制显示从键盘输入的一个字符的 ASCII 码 mov bx,offset string again: mov al,[bx] ; 取一个字符 or al,al ; 是否为结尾符 0 jz done ; 是,退出循环 cmp al,'A' ; 是否为大写 A ~ Z jb next cmp al,'Z' ja next or al,20h ; 是,转换为小写字母(使 D5=1 ) mov [bx],al ; 仍保存在原位置 next: inc bx jmp again ; 继续循环 done: .exit 0 例 5. 大小写 条件控制循环 , 利用标志退出 冒泡法 “冒泡法”是一种排序算法,不是最优的算法,但它易于理解和实现 冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序 这需要一个双重循环程序结构 冒泡法的排序过程 比较遍数
|