」第十章模块化程序设计 将程序分段、采用子程序或宏结构都是进行模块 化程序设计 本节介绍开发大型程序时采用的方法: 源程序文件的包含 目标模块连接 子程序库
将程序分段、采用子程序或宏结构都是进行模块 化程序设计 本节介绍开发大型程序时采用的方法: 源程序文件的包含 目标模块连接 子程序库 第十章 模块化程序设计
平101源程序文件的包含二 把源程序分放在几个文本文件中,在汇编时通过包 含伪指令 NCLUDE结合成一体 INCLUDE文件名 可将常用的子程序形成ASM汇编语言源文件 可将常用的宏定义存放在.MAC宏库文件中 可将常量定义、声明语句组织在.INC包含文件中 例4.21a ①宏库文件t421amac ②主程序文件t421aasm ③子程序文件sub421aasm
把源程序分放在几个文本文件中,在汇编时通过包 含伪指令INCLUDE结合成一体 INCLUDE 文件名 • 可将常用的子程序形成.ASM汇编语言源文件 • 可将常用的宏定义存放在.MAC宏库文件中 • 可将常量定义、声明语句组织在.INC包含文件中 例4.21a ① 宏库文件 lt421a.mac ② 主程序文件 lt421a.asm ③ 子程序文件 sub421a.asm 10.1 源程序文件的包含 1
Lt421a. mac dispchar macro char 显示char字符 moy dl. char mov ah. 2 int 21h endm dispms g macro message ;显示 message字符串 mov dx, offset message mov ah. 9 int 21h endm
dispchar macro char ;显示char字符 mov dl,char mov ah,2 int 21h endm dispmsg macro message ;显示message字符串 mov dx,offset message mov ah,9 int 21h endm Lt421a.mac
include lt421a. mac Lt421a. asm dispmsg msg1 提示输入数据 mov bx offset buf call input 数据输入 cmp cx, 0 je start 没有输入数据则退出 mov count, cX 显示输入的数据 ;数据排序 显示经排序后的数据 start:. exit o include sub421a asm end
include lt421a.mac ... dispmsg msg1 ;提示输入数据 mov bx,offset buf call input ;数据输入 cmp cx,0 je start4 ;没有输入数据则退出 mov count,cx ... ;显示输入的数据 ... ;数据排序 ... ;显示经排序后的数据 start4: .exit 0 include sub421a.asm end Lt421a.asm
sub421a. asm 子程序源文件有3个子程序 ALdiss;显示2位16进制数子程序(例4.10) sorting;排序子程序(例4.8) input;键盘输入子程序 还包含一个宏 convert;将DX两位ASCIⅠ码转换为两位16进制数 让我们重点分析键盘输入子程序 input
子程序源文件有3个子程序 ALdisp ;显示2位16进制数子程序(例4.10) sorting ;排序子程序(例4.8) input ;键盘输入子程序 还包含一个宏 convert ;;将DX两位ASCII码转换为两位16进制数 sub421a.asm 让我们重点分析键盘输入子程序 input
input之 键盘输入子程序 入口参数:ds:bx=存放数据的缓冲区 出口参数:cx=数据个数 Input proc push ax push dx Xor CX. CX ;数据个数清0 inputol: or dx, dx 输入字符清0 inputo2: mov ah, 1 键盘输入一个字符 int 21h 继续: Input之二
;键盘输入子程序 ;入口参数:ds:bx=存放数据的缓冲区 ;出口参数:cx=数据个数 input proc push ax push dx xor cx,cx ;数据个数清0 input01: xor dx,dx ;输入字符清0 input02: mov ah,1 ;键盘输入一个字符 int 21h input之 一 继续:input之二
input.之 input10: cmp al, Odh je input30 是回车,结束整个数据的输入 cmp al/ je input20 是空格和逗号,确认输入了一个数据 cmp al.// je input20 cmp al, 08h je input ;是退格,丢弃本次输入的数据,出错 继续: Input之三
input10: cmp al,0dh je input30 ;是回车,结束整个数据的输入 cmp al,’ ’ je input20 ;是空格和逗号,确认输入了一个数据 cmp al,’ , ’ je input20 cmp al,08h je input17 ;是退格,丢弃本次输入的数据,出错 input之 二 继续:input之三
npu cmp al,/0/ ;有效数字判断(图4.5b) jb input 小于’0′,不是有效数字,出错 cmp al,"f′ ja inputt 大于’f′,不是有效数字 cmp al,"a′ jb inputll sub al. 20h ′a~’f′转换成大写’A′~’F′ jmp input12 inputll: cmp al,/F ja input 字符小于’a′、大于’F′,出错 cmp al,"A′ Jae input12;是’A′~’F’,有效字符 cmp al,"9′ Ja input17;是’0′~’9′,有效字符 继续: input之四
cmp al,’0’ ;有效数字判断(图4.5b) jb input17 ;小于’0’,不是有效数字,出错 cmp al,’f’ ja input17 ;大于’f’,不是有效数字 cmp al,’a’ jb input11 sub al,20h ;’a’~’f’转换成大写’A’~’F’ jmp input12 input11: cmp al,’F’ ja input17 ;字符小于’a’、大于’F’,出错 cmp al,’A’ jae input12 ;是’A’~’F’,有效字符 cmp al,’9’ ja input17 ;是’0’~’9’,有效字符 input之 三 继续:input之四
input之 input12: cmp dl, o 有效字符的处理 jne input13 mov dl. al ;d1=0,输入了一个数据的低位,则dl←a1 Jmp input02;转到字符输入 input13: cmp dh, 0 jne input ;d1≠0,dh≠0输入3位数据,出错 moy dh, dl d1≠0,dh=输入了一个数据的续?m之五 moy dl. al Jmp input02;转到字符输入
input12: cmp dl,0 ;有效字符的处理 jne input13 mov dl,al ;dl=0,输入了一个数据的低位,则dl←al jmp input02 ;转到字符输入 input13: cmp dh,0 jne input17 ;dl≠0,dh≠0输入3位数据,出错 mov dh,dl ;dl≠0,dh=0输入了一个数据的高位 mov dl,al ;dh←dl,dl←al jmp input02 ;转到字符输入 input之 四 继续:input之五
npu input17: mov dl, 7 输入错误处理 mov ah. 2 int 2lh mov mov ah. 2 int 2lh jmp input01;转到输入一个数据 继续: input之六
input17: mov dl,7 ;输入错误处理 mov ah,2 int 21h mov dl,'?' mov ah,2 int 21h jmp input01 ;转到输入一个数据 input之 五 继续:input之六