?? 循環.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 + -