第五章循环与分支程序设计 循环程序设计 分支程序设计
1 • 循环程序设计 • 分支程序设计 第五章 循环与分支程序设计
编制汇编语言程序的步骤 (1)分析题意,确定算法 (2)根据算法画出程序框图 (3)根据框图编写程序 (4)上机调试程序
2 编制汇编语言程序的步骤: (1) 分析题意,确定算法 (2) 根据算法画出程序框图 (3) 根据框图编写程序 (4) 上机调试程序
程序结构 顶序结构 循环结构 分支结构 子程序结构 复合结构:多种程序结构的组合
3 程序结构: 分支结构 子程序结构 复合结构:多种程序结构的组合 … 顺序结构 循环结构
1.循环程序设计 初始化 初始化 控制条件 循环体 循环体 控制条件 DO-WHILE结构 DO-UNT结构
4 1. 循环程序设计 DO-WHILE 结构 DO-UNTIL 结构 控制条件 初始化 循环体 Y N 控制条件 初始化 循环体 Y N
初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制 特征值控制 地址边界控制
5 初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制 特征值控制 地址边界控制
例:把BX中的二进制数以十六进制的形式显示在屏幕上 BX
6 BX 1 2 3 4 例:把 BX中的二进制数以十六进制的形式显示在屏幕上
mov ch 4 rotate: mov Cl, 4 ro bx. cl mov al, bl and al. ofh add al 30h ,0N9 ASCII 30H~39H cmp al, 3ah println add al. h A~’F’ASC工I41H~46H printit: mov dl, al mov ah 2 int 21h dec ch nz rotate 7
7 …… mov ch, 4 rotate: mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ; ’0’~’9’ ASCII 30H~39H cmp al, 3ah jl printit add al, 7h ; ’A’~’F’ ASCII 41H~46H printit: mov dl, al mov ah, 2 int 21h dec ch jnz rotate ……
例:从键盘接收十进制数并存入BX mov bx. 0 lewchar: moy ah 1 int 21h sub al, 30h J1 exit 0退出 cmp al, 9 exit ;>9退出 cbW xchg ax, bx mov Cx. 10 mul CX xchg ax, bx add bx. ax ]mp newchar exit
8 …… mov bx, 0 newchar: mov ah, 1 int 21h sub al, 30h jl exit ; 9 退出 cbw xchg ax, bx mov cx, 10 mul cx xchg ax, bx add bx, ax jmp newchar exit: …… 例:从键盘接收十进制数并存入BX
例:从键盘接收十六进制数并存入BX mov bx, 0 newchar mov ah 1 int 21h sub al, 30h j1 exit <0退出 cmp a, 10 j add_to sub al. 27h cmp al, Oah j exit ;<a’退出 cmp al, 10h Jge exIt f’退出 add to: moV Cl 4 shi bx. cl mov ah 0 add bx. ax ]mp newchar exit
9 …… mov bx, 0 newchar: mov ah, 1 int 21h sub al, 30h jl exit ; ’f’ 退出 add_to: mov cl, 4 shl bx, cl mov ah, 0 add bx, ax jmp newchar exit: …… 例:从键盘接收十六进制数并存入BX
例:将正数n插入一个已整序的正数字数组 dw array_head dw3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32 X mov ax. n array_head mov array_head -2, Offffh 5 15 mov SI, 23 compare cmp array_end[sil,ax 37 49 Insert mov bx, array_end[si] 52 mov array_end[si+2], bx 65 sub si, 2 78 jmp short compare 99 nser 105 n mov array_endsi+2], ax 32 10
10 x dw ? array_head dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32 例:将正数 n 插入一个已整序的正数字数组 …… mov ax, n mov array_head-2, 0ffffh mov si, 0 compare: cmp array_end[si], ax jle insert mov bx, array_end[si] mov array_end[si+2], bx sub si, 2 jmp short compare insert: mov array_end[si+2], ax …… 3 5 15 23 37 49 52 65 78 99 105 32 -1 array_head→ array_end→ n → x →