📄 循环.txt
字号:
汇编循环程序设计学习笔记
金州2005.11.15
说明,因为这是自己的学习笔记,有众多的不完善的地方,只建议喜欢汇编的朋友参考,并帮助我,
不能作为学习资料,凡是标明金州注释的地方,是自己解释的,有可能错误,特意标出来,
DO_WHILE 结构:初始化 ——控制条件——循环体
明显的,如果控制条件不满足,将不执行循环体,可能循环体一次都不执行,可能为0
DO_UNTIL结构,初始化——循环体——控制条件
可以看出循环体至少执行一次,
例如,把BX中的二进制数以十六进制的形式显示在屏幕上
.....
mov ch, 4
rotate: mov cl, 4
rol bx, cl
mov al, cl
mov al, bl
and al, 0fh
add al, 30h
cmp al, 3ah
jl printit
add al, 7h
printit: mov dl, al
mov ah, 2
int 21h
dec ch
jnz rotate
计数控制,已经知道循环四次。
例如二,将正数n插入一个已整序的正数字数组
x dw ?
array_head dw 3,5,15,23,37,49,52,65,78,99
array_end dw 105
n dw 32
.......
mov ax, n
mov array_head-2,offffh (-1的补码,金州注释,是个负数就行)
mov si, 0
compare:
cmp array_end[si],ax
jle insert (<=就插入,金州注释)
mov bx,array_end[si] (si 是数组的末指针,金州注释)
mov array_end[si+2],bx
sub si,2
jmp short compare
insert:
mov array_end[si+2],ax
关键要有边界控制,这样才能跳到insert,或者就很不幸了:)),会陷入死循环了。
这个片段的关键在于插入在那个位置,一一比较,并不知道循环多少次,
例如三,多重循环,外循环,套入内循环
将首地址为a 的字数组从大到小排序。(起泡排序算法,多重循环)
(明显的是一个需要多重循环比较的程序,金州注释)
a dw 100,30,78.99,15,-1,66,45,189,256 (定义变量,金州注释)
.......
mov cx, 10 (因为用到loop,需要用cx,注意因为是多重,cx会改变,需要保存)
dec cx (减1变为9,金州注释)
loop1: mov di, cx (保存 cx, 用di作为周转,金州注释)
mov bx,0
loop2: mov ax, a[bx]
cmp ax, a[bx+2] (比较大小,金州注释)
jpg continue (>=不交换,金州注释)
xchg ax, a[bx+2] ( 否则,交换)
mov a[bx], ax
continue:
add bx ,2
loop loop2
mov cx ,di (做外循环,loop1,金州注释)
loop loop1
........
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -