8086匯編語言程序設計——循環


循環程序例子

示例 在5行16列上用寫顯存方法顯示多彩字符串。用循環指令實現。

設計思路:
(1) 用DH存放行號,DL存放列號;
(2) BL存放字符屬性,第1個字符的屬性為4,紅色;其他字符按屬性+1改變;
(3) 字符的位置計算公式:行號×160+列號×2;
(4) 用循環指令LOOP實現將多彩字符串循環寫入顯存 。

代碼:

 ;a.asm                         在5行16列上用寫顯存方法顯示多彩字符串。
data segment
a1 db 'Hello world!'
a2 db 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dh,5                            ;
mov dl,16                            ;
mov bl,4                            ;顏色屬性
mov si,0
show_str:
mov ax,0b800h                        ;顯存首址
mov es,ax
mov ax,160    
mul dh                                ;行號×160
mov di,ax                                   ;起始行位置
sal dl,1                            ;列號×2,2個字節單元為1列
mov dh,0
add di,dx                            ;行列相加
mov cx,a2-a1                        ;字符串長度
let1: mov al,[si]                            ;循環寫字符和屬性到顯存
mov es:[di],al
mov byte ptr es:[di+1],bl
inc si
inc bl                                ;屬性加1
add di,2                            ;寫完即顯示完
loop let1                            ;循環指令
mov ah,4ch
int 21h
code ends
end start

排序

冒泡排序,使用雙重循環。

設計思路:
(1) 用兩條LOOP指令實現雙重循環時,對CX寄存器有沖突。采用PUSH CX指令將外循環的CX值入棧保存,內循環的LOOP結束后,再將外循環的CX恢復
(2) 用寄存器相對尋址取出兩數進行比較。
程序框圖:

代碼:

; b.asm  將字數組part按升序排序  
data segment
part dw 15,32,6,-27,8
sign dw  ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,sign-part            ;數組長度
shr cx,1                     ;元素個數
dec cx
loop1:                            ;外循環
push cx                        ;保存外循環次數
mov bx,0
loop2:                            ;內循環
mov ax,part[bx]
cmp ax,part[bx+2]            ;比較大小
jle next                    ;升序
xchg ax,part[bx+2]            ;交換
mov part[bx],ax
next:add bx,2
loop loop2
pop cx                        ;恢復外循環次數
loop loop1
mov ah,4ch
int 21h
code ends
end start

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM