3.3微处理器编程 循环程序设计 ●分支程序设计 子程序结构设计 宏汇编程序设计 ●中断程序设计(第4章)
1 • 循环程序设计 • 分支程序设计 • 子程序结构设计 • 宏汇编程序设计 • 中断程序设计(第4章) 3.3 微处理器编程
基本程序结构 顺序结构丨循环结构 分支结构子程序结构 复合结构:多种程序结构的组合
2 分支结构 子程序结构 一、基本程序结构 复合结构:多种程序结构的组合 … 顺序结构 循环结构
编制汇编语言程序的步骤: (1)分析题意,确定算法 (2)根据算法画出程序框图 (3)根据框图编写程序 (4)上机调试程序
3 编制汇编语言程序的步骤: (1) 分析题意,确定算法 (2) 根据算法画出程序框图 (3) 根据框图编写程序 (4) 上机调试程序
1.循环程序设计 初始化 初始化 控制条件 循环体 循环体 控制条 DO-WHILE结构 DO-UNTIL结构
4 1. 循环程序设计 DO-WHILE 结构 DO-UNTIL 结构 控制条件 初始化 循环体 Y N 控制条件 初始化 循环体 Y N
初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制 特征值控制 地址边界控制
5 初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制 特征值控制 地址边界控制
例1:把BX中的二进制数以十六进制的形式显示在屏幕上 BX 2
6 BX 1 2 3 4 例1:把 BX 中的二进制数以十六进制的形式显示在屏幕上
mov ch. 4 rotate: r mov Cl, 4 rol bx. cl 罗 moy al. bl and al ofh add al 30h 0'N 9 ASCII 30HN39H cmp al, 3ah J1 printit add al 7h A~’F’ ASCII41H~46H printit: r mov dl, al mov a int 21h dec ch nz rotate
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 ……
例2:从键盘接收十进制数并存入 11251 BX mov bx. 0 313235 newchar: mov ah 1 ;键盘输入 int 21h sub al 30h exit 9退出 cbw xchg ax, bx ((0×10)+1)×10+2)×10+5 mov CX. 10 mul Cx xchg ax, bX add bx,ax Jmp 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: …… 例2:从键盘接收十进制数并存入 BX ( ( 0×10)+1 )×10+2 )×10+5 1 2 5 31 32 35
例3:从键盘接收十六进制数并存入BX 1 a f mov bx. 0 316166 newchar: mov ah 1 ;键盘输入 int 21h sub al 30h j1 exit ;<0退出 cmp al, 10 j1 add_to sub al 27h cmp al, Oah j1 exit ;<‘a'退出 cmp al, 10h Jge exl t f’退出 add_to: mov cl, 4 shI bx. cl mov ah. 0 (0×16)+1)×16+0a)×16+0f add bx. ax imp 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: …… 例3:从键盘接收十六进制数并存入BX 1 a f 31 61 66 ((0×16)+1) × 16+0a) × 16+0f
例4.在字数组的第4和第5个元素之间插入5个0 array dw 64 dup(?) buffer dw 5 dup(?) array+oa start: mov ax,@data mov ds. ax mov es, ax mov Si offset buffer -2 mov di offset buffer+8 mov CX, 60 std buffer ep movsw mov ax, 0 mov CX. 5 rep stow
10 例4. 在字数组的第4和第5个元素之间插入5个0 array dw 64 dup (?) buffer dw 5 dup (?) ; start: mov ax, @data mov ds, ax mov es, ax ; mov si, offset buffer-2 mov di, offset buffer+8 mov cx, 60 std rep movsw ; mov ax, 0 mov cx, 5 rep stosw … … array+0 buffer a b c d e +2 60 0 0 0 0 0 +8 - - - - - #