《第5章 汇编程序设计基本方法PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第5章 汇编程序设计基本方法PPT讲稿.ppt(56页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章 汇编程序设计基本方法第1页,共56页,编辑于2022年,星期一前面几章主要介绍了指令系统中的各种指令,这些指令是编写前面几章主要介绍了指令系统中的各种指令,这些指令是编写汇编程序的工具。本章将学习编写汇编程序。汇编程序的工具。本章将学习编写汇编程序。序言:序言:(1)分析问题,明确要求;分析问题,明确要求;(2)建立数学模型:即将解决问题的方法用数学语言表达出来建立数学模型:即将解决问题的方法用数学语言表达出来(3)确定算法:即转化为计算机解法;确定算法:即转化为计算机解法;(4)画出程序流程图;画出程序流程图;(5)编码,调试;编码,调试;(6)整理资料,投入使用。整理资料,投入使用
2、。汇编程序设计基本过程:汇编程序设计基本过程:汇编程序设计特点:汇编程序设计特点:模块化、结构化模块化、结构化第2页,共56页,编辑于2022年,星期一本章学习要求本章学习要求1 1、掌握三种、掌握三种结构程序的构程序的设计方法,方法,领会会结构化构化程序程序设计的思想。的思想。3 3、掌握几种、掌握几种DOSDOS功能调用,了解功能调用,了解BIOSBIOS功能调用,功能调用,能从功能调用表中查找到满足自己要求的能从功能调用表中查找到满足自己要求的DOSDOS功能并功能并给出正确的调用参数。给出正确的调用参数。2 2、掌握子程序设计和调用方法。、掌握子程序设计和调用方法。第3页,共56页,编
3、辑于2022年,星期一5.1 5.1 汇编语言程序结构汇编语言程序结构分支结构分支结构 子程序结构子程序结构复合结构:多种程序结构的组合复合结构:多种程序结构的组合 顺序结构顺序结构 循环结构循环结构第4页,共56页,编辑于2022年,星期一一、顺序结构程序设计一、顺序结构程序设计例:例:MOV AX,XMOV AX,XMOV AX,XMOV AX,XMOV DX,X+2MOV DX,X+2MOV DX,X+2MOV DX,X+2ADD AX,YADD AX,YADD AX,YADD AX,YADC DX,Y+2 ;ADC DX,Y+2 ;ADC DX,Y+2 ;ADC DX,Y+2 ;?AD
4、D AX,24ADD AX,24ADD AX,24ADD AX,24ADC DX,0 ;x+y+24ADC DX,0 ;x+y+24ADC DX,0 ;x+y+24ADC DX,0 ;x+y+24SUB AX,ZSUB AX,ZSUB AX,ZSUB AX,ZSBB DX,Z+2 ;x+y+24-zSBB DX,Z+2 ;x+y+24-zSBB DX,Z+2 ;x+y+24-zSBB DX,Z+2 ;x+y+24-zMOV W,AXMOV W,AXMOV W,AXMOV W,AXMOV W+2,DX ;MOV W+2,DX ;MOV W+2,DX ;MOV W+2,DX ;结果存入结果存入结果
5、存入结果存入W,W+2W,W+2W,W+2W,W+2单元单元单元单元第5页,共56页,编辑于2022年,星期一二、循环结构程序设计二、循环结构程序设计 循环结构:循环结构:包括包括当型当型和和直到型直到型两种。两种。WHILE 结构结构 DO-UNTIL 结构结构控制条件控制条件初始化初始化循环体循环体YN控制条件控制条件初始化初始化循环体循环体YN第6页,共56页,编辑于2022年,星期一 循环类型:循环类型:循环结构的组成部分:循环结构的组成部分:初始化部分:初始化部分:设置循环的初始状态。设置循环的初始状态。类似类似C语言语言for(int i=1;i10;i+)中的中的int i=1
6、循环体部分:循环体部分:循环工作的主体部分。循环工作的主体部分。调整部分:调整部分:调整循环的次数。调整循环的次数。类似类似C语言语言for(int i=1;i10;i+)中的中的i+控制部分:控制部分:控制循环的结束。控制循环的结束。类似类似C语言语言for(int i=1;i10;i+)中的中的i10 单重循环单重循环 嵌套循环嵌套循环(多重循环多重循环):即循环结构内又有循环即循环结构内又有循环第7页,共56页,编辑于2022年,星期一 四条循环控制指令:四条循环控制指令:循环指令:循环指令:LOOP OPR 循环判断条件:循环判断条件:(CX)0 为零或相等时循环指令:为零或相等时循环
7、指令:LOOPZ/LOOPE OPR 循环判断条件:循环判断条件:ZF=1 且且(CX)0 不为零或不相等时循环指令:不为零或不相等时循环指令:LOOPNZ(LOOPNE)OPR 循环判断条件:循环判断条件:ZF=0 且且(CX)0LOOP OPR DEC CX JNZ OPR因此,用跳转指令也能实现循环因此,用跳转指令也能实现循环第8页,共56页,编辑于2022年,星期一 单重循环程序举例单重循环程序举例例例例例:试试试试编编编编制制制制一一一一个个个个程程程程序序序序把把把把BXBXBXBX寄寄寄寄存存存存器器器器中中中中的的的的二二二二进进进进制制制制数数数数以以以以十十十十六六六六进进
8、进进制制制制数数数数的的的的形形形形式式式式显显显显示示示示在屏幕上。在屏幕上。在屏幕上。在屏幕上。分析:分析:BXBX1234第9页,共56页,编辑于2022年,星期一画流程图:画流程图:第10页,共56页,编辑于2022年,星期一ASCII码表码表第11页,共56页,编辑于2022年,星期一program segment ;define code segmentprogram segment ;define code segmentmain proc farmain proc far assume cs:program assume cs:programStart:push ds ;sav
9、e old data segmentStart:push ds ;save old data segment sub ax,ax sub ax,ax push ax ;0 push ax ;0偏移地址入栈偏移地址入栈 mov ch,4 ;number of digitsmov ch,4 ;number of digitsrotate:mov cl,4 ;set count to 4 bitsrotate:mov cl,4 ;set count to 4 bits rol bx,cl rol bx,cl mov al,bl mov al,bl and al,0fh ;and al,0fh ;提取
10、出低提取出低4 4位位 add al,30h add al,30h ;09 ASCII 30H39H;09 ASCII 30H39H cmp al,3ah cmp al,3ah ;判断是否是大于;判断是否是大于9 9 jl printit jl printit add al,7h add al,7h ;AF ASCII 41H46H;AF ASCII 41H46H第12页,共56页,编辑于2022年,星期一printit:mov dl,al ;printit:mov dl,al ;调用调用DOSDOS功能的入口参数功能的入口参数 mov ah,2 mov ah,2 int 21h int 21
11、h dec ch dec ch ;判断是否已显示了;判断是否已显示了4 4个数字个数字 jnz rotate jnz rotate ret retmain endpmain endpprogram endsprogram endsendend第13页,共56页,编辑于2022年,星期一例例例例:试试试试编编编编制制制制一一一一程程程程序序序序实实实实现现现现从从从从键键键键盘盘盘盘输输输输入入入入一一一一行行行行字字字字符符符符,要要要要求求求求第第第第一一一一个个个个键键键键入入入入的的的的字字字字符符符符必必必必须须须须是是是是空空空空格格格格符符符符,如如如如不不不不是是是是,则则则则退
12、退退退出出出出程程程程序序序序;如如如如是是是是,则则则则开开开开始始始始接接接接收收收收键键键键入入入入的的的的字字字字符符符符并并并并顺顺顺顺序序序序存存存存放放放放在在在在首首首首地地地地址址址址为为为为BUFFERBUFFER的的的的缓缓缓缓冲冲冲冲区区区区中中中中(空空空空格格格格符符符符不不不不存存存存入入入入),直直直直到到到到接接接接收收收收到到到到第第第第二二二二个个个个空空空空格格格格符符符符时时时时退退退退出出出出程序。程序。程序。程序。第14页,共56页,编辑于2022年,星期一Data segmentData segment buffer db 80 dup(?)bu
13、ffer db 80 dup(?)flag db?flag db?Data endsData endsPrognam SegmentPrognam Segment assume cs:Prognam,ds:Data assume cs:Prognam,ds:Datastart:start:push ds ;set up stack for reture push ds ;set up stack for reture sub ax,ax sub ax,ax push ax push ax mov ax,Data mov ax,Data mov ds,ax mov ds,ax;main part
14、 of program goes here;main part of program goes here lea bx,buffer lea bx,buffer mov flag,0 mov flag,0第15页,共56页,编辑于2022年,星期一next:mov ah,01 ;next:mov ah,01 ;调用调用DOS 1DOS 1号子功能号子功能 int 21h ;int 21h ;从键盘接收一个字符从键盘接收一个字符 test flag,01h test flag,01h jnz follow ;jnz follow ;判断是否是第一个字符判断是否是第一个字符 cmp al,20h
15、;cmp al,20h ;判断是否是空格符判断是否是空格符 jnz exit jnz exit mov flag,1 mov flag,1 jmp next jmp nextfollow:cmp al,20hfollow:cmp al,20h jz exit jz exit mov bx,al ;mov bx,al ;置入缓冲区置入缓冲区 inc bx inc bx jmp next jmp nextexit:ret ;return to DOSexit:ret ;return to DOSmain endpmain endpPrognam endsPrognam endsend starte
16、nd start第16页,共56页,编辑于2022年,星期一多重循环程序举例多重循环程序举例例例例例:有有有有一一一一个个个个首首首首地地地地址址址址为为为为A A的的的的字字字字类类类类型型型型数数数数组组组组,试试试试编编编编制制制制程程程程序序序序使使使使该该该该数数数数组组组组中中中中的的的的数数数数按按按按从从从从小小小小到大排序。设数组中的元素为到大排序。设数组中的元素为到大排序。设数组中的元素为到大排序。设数组中的元素为3232,8585,1616,1515,8 8序号 地址 数比 较 遍 数12341 A 322 A+2 853 A+4 164 A+6 155 A+8 8321
17、615885161583285158163285815163285冒泡法排序算法冒泡法排序算法第17页,共56页,编辑于2022年,星期一 mov cx,5 mov cx,5 ;元素个数元素个数 dec cx dec cx ;比较遍数比较遍数Loop1Loop1:mov di,cx mov di,cx ;比较次数比较次数 mov bx,0mov bx,0Loop2Loop2:mov ax,Abx mov ax,Abx ;相邻两数相邻两数 cmp ax,Abx+2 cmp ax,Abx+2 ;比较比较 jle continuejle continue xchg ax,Abx+2 xchg ax,
18、Abx+2 ;交换位置交换位置 mov Abx,axmov Abx,axcontinue:continue:add bx,2 add bx,2 loop loop2 loop loop2 mov cx,di mov cx,di loop loop1 loop loop1 第18页,共56页,编辑于2022年,星期一三、分支结构程序设计三、分支结构程序设计(选择结构程序设计选择结构程序设计)选择结构:选择结构:程序中存在判断,并根据判断结果转向不同程序中存在判断,并根据判断结果转向不同 的处理的处理 选择结构包括了选择结构包括了二路分支二路分支和和多路分支多路分支?case 1 case 2 二
19、路分支二路分支 IF-ELSE case 1 case 2 case n多路分支多路分支 SWITCH实现多路分支结构的方实现多路分支结构的方法:法:跳转表法跳转表法关键字法关键字法第19页,共56页,编辑于2022年,星期一1、无条件转移指令、无条件转移指令 JMP2、条件转移指令条件转移指令 JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ 控制转移指令:控制转移指令:第20页,共56页,编辑于2022年,星期一例:写一程序,例:写一程序,从键盘输入一位数字,判断其奇偶性,若为奇从键盘输入一位数字
20、,判断其奇偶性,若为奇从键盘输入一位数字,判断其奇偶性,若为奇从键盘输入一位数字,判断其奇偶性,若为奇数,在屏幕上输出字符串数,在屏幕上输出字符串数,在屏幕上输出字符串数,在屏幕上输出字符串“It is odd!”“It is odd!”;否则输出;否则输出;否则输出;否则输出“It is“It is even!”even!”DATA SEGMENT ;定义数据段 STRING1 DB IT IS ODD!,$STRING2 DB IT IS EVEN!,$DATA ENDSCODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA ;ASSUME伪指令,说明段与 ;
21、段寄存器之间的对应关系START:MOV AX,DATA ;实现段与段寄存器之间的对应 ;关系 MOV DS,AX第21页,共56页,编辑于2022年,星期一 MOV AH,01H ;调用1号DOS功能,从键盘上读入一个 ;字符,并将该字符回显在屏幕上 INT 21H CLC RCR AL,1 JNC EVN MOV DX,OFFSET STRING1 ;将字符串Sting1的偏移地址 ;赋给DX CALL DISPMESSEVN:MOV DX,OFFSET STRING2 CALL DISPMESS DISPMESS PROC ;定义一个过程,用于输出字符串 MOV AH,9 ;调用9号子功
22、能 INT 21H ;返回DOS MOV AH,4CH ;结束程序 INT 21HDISPMESS ENDPCODE ENDS END START第22页,共56页,编辑于2022年,星期一例:写一程序,由用户输入三个单字节无符号数且存放于例:写一程序,由用户输入三个单字节无符号数且存放于BUFFER开始的缓冲区中,用户每输入一位数前屏幕显示:开始的缓冲区中,用户每输入一位数前屏幕显示:Enter the first value(0-9):_ Enter the second value(0-9):_ Enter the third value(0-9):_程序将这三个数按从大到小排序。排完序
23、后,显示如下程序将这三个数按从大到小排序。排完序后,显示如下 After sorting.Num1=_ Num2=_ Num3=_第23页,共56页,编辑于2022年,星期一DATA SEGMENTMSG1 DB Enter the first value(0-9):,$MSG2 DB 0DH,0AH,Enter the second value(0-9):,$MSG3 DB 0DH,0AH,Enter the third value(0-9):,$MSG4 DB 0DH,0AH,After sorting.,$NUM1 DB 0DH,0AH,Num1=,$NUM2 DB 0DH,0AH,Nu
24、m1=,$NUM3 DB 0DH,0AH,Num1=,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MSG1 ;读取第一个数MOV AH,9INT 21HMOV AH,01H第24页,共56页,编辑于2022年,星期一 INT 21HMOV BL,AL MOV DX,OFFSET MSG2 ;读取第二个数MOV AH,9INT 21HMOV AH,01HINT 21HMOV CL,AL MOV DX,OFFSET MSG3 ;读取第三个数MOV AH,9INT 21HMO
25、V AH,01HINT 21HMOV BH,AL CMP BL,CL第25页,共56页,编辑于2022年,星期一 JAE NEXT1 ;等价于JNBXCHG BL,CLNEXT1:CMP BL,BHJAE NEXT2XCHG BL,BHNEXT2:CMP CL,BHJAE DISPLAYXCHG CL,BHDISPLAY:MOV DX,OFFSET MSG4 MOV AH,9 INT 21H MOV DX,OFFSET NUM1 MOV AH,9 INT 21H MOV AH,02H MOV DL,BL INT 21H第26页,共56页,编辑于2022年,星期一MOV DX,OFFSET NU
26、M2MOV AH,9INT 21H MOV AH,02HMOV DL,CLINT 21H MOV DX,OFFSET NUM3MOV AH,9INT 21HMOV AH,02HMOV DL,BHINT 21HMOV AH,4CHINT 21HCODE ENDSEND START第27页,共56页,编辑于2022年,星期一第28页,共56页,编辑于2022年,星期一5.2 5.2 子程序设计与调用子程序设计与调用 子程序的作用:子程序的作用:减少编程工作量;减少编程工作量;节省存储空间;节省存储空间;模块化,使程序结构清晰,便于调试;模块化,使程序结构清晰,便于调试;第29页,共56页,编辑于2
27、022年,星期一一、过程一、过程(子程序子程序)定义伪指令定义伪指令 过程名过程名 PROC NEAR(FAR)PROC NEAR(FAR)过程名过程名 ENDPENDP(1 1)NEARNEAR属性:调用程序和子程序在同一代码段中属性:调用程序和子程序在同一代码段中 (段内调用)(段内调用)(2 2)FARFAR属性:调用程序和子程序不在同一代码段中属性:调用程序和子程序不在同一代码段中 (段间调用)(段间调用).第30页,共56页,编辑于2022年,星期一code segmentcode segment main proc farmain proc far call subr1call s
28、ubr1 ret retmain endpmain endpsubr1 proc nearsubr1 proc near ret retsubr1 endpsubr1 endpcode endscode endssegx segmentsegx segmentsubt proc farsubt proc far ret retsubt endpsubt endp call subtcall subt segx endssegx endssegy segmentsegy segment call far ptr subtcall far ptr subt segy endssegy ends第3
29、1页,共56页,编辑于2022年,星期一二、子程序的调用和返回二、子程序的调用和返回子程序调用:子程序调用:隐含使用堆栈保存返回地址隐含使用堆栈保存返回地址 call near ptr subpcall near ptr subp (1)保存返回地址保存返回地址 (2)转子程序转子程序 call far ptr subpcall far ptr subp (1)保存返回地址保存返回地址 (2)转子程序转子程序子程序返回:子程序返回:ret ret (返回地址出栈)返回地址出栈)(SP)(IP)(IP)(CS)(SP)回顾伪指令部分!回顾伪指令部分!第32页,共56页,编辑于2022年,星期一三
30、、子程序说明信息三、子程序说明信息为了能正确使用子程序,在给出子程序代码的时候,最好是能为了能正确使用子程序,在给出子程序代码的时候,最好是能给出说明信息,包括:给出说明信息,包括:子程序名;子程序名;功能描述;功能描述;入口和出口参数;入口和出口参数;第33页,共56页,编辑于2022年,星期一四、寄存器的保存和恢复四、寄存器的保存和恢复(保护现场保护现场)方法:方法:把需要保护的寄存器的内容,在程序中压入和弹出堆栈。把需要保护的寄存器的内容,在程序中压入和弹出堆栈。subt proc farsubt proc far push ax push ax push bx push bx push
31、 cx push cx push dx push dx pop dx pop dx pop cx pop cx pop bx pop bx pop ax pop ax ret retsubt endpsubt endp第34页,共56页,编辑于2022年,星期一五、子程序的参数传送五、子程序的参数传送 参数类型:参数类型:主程序在调用子程序时,经常需要向子程序传递一些参数;子主程序在调用子程序时,经常需要向子程序传递一些参数;子程序执行完后,也需要向主程序返回一些数据。程序执行完后,也需要向主程序返回一些数据。入口参数:入口参数:相当于相当于C语言函数的实际参数语言函数的实际参数 出口参数:出
32、口参数:相当于函数返回值相当于函数返回值 参数传递的方法:参数传递的方法:通过寄存器传送参数;通过寄存器传送参数;通过存储器传送参数;通过存储器传送参数;通过地址表传送参数地址;通过地址表传送参数地址;通过堆栈传送参数或参数地址;通过堆栈传送参数或参数地址;第35页,共56页,编辑于2022年,星期一例:十六进制到十进制的转换例:十六进制到十进制的转换例:十六进制到十进制的转换例:十六进制到十进制的转换(通过寄存器传送参数通过寄存器传送参数)hexidec segment ;1610 assume cs:hexidec main proc farstart:push ds sub ax,ax
33、push axrepeat:call hexibin ;162 call crlf call binidec ;210 call crlf jmp repeat retmain endphexidec ends end start第36页,共56页,编辑于2022年,星期一hexibin proc nearhexibin proc near mov bx,0mov bx,0newchar:mov ah,1 int 21h sub al,30h jl exit cmp al,10 jl add_to sub al,27h cmp al,0ah jl exit cmp al,10h jge exi
34、tadd_to:mov cl,4 shl bx,cl mov ah,0 add bxbx,ax jmp newchar exit:rethexibin endphexibin endpbinidec proc nearbinidec proc near mov cx,10000d call dec_divcall dec_div mov cx,1000d call dec_divcall dec_div mov cx,100d call dec_divcall dec_div mov cx,10d call dec_divcall dec_div mov cx,1d call dec_divc
35、all dec_div retbinidec endpbinidec endpdec_div proc neardec_div proc near mov ax,mov ax,bxbx mov dx,0 mov dx,0 div cx div cx mov mov bxbx,dx,dx mov dl,al mov dl,al add dl,30h add dl,30h mov ah,2 mov ah,2 int 21h int 21h ret retdec_div endpdec_div endp第37页,共56页,编辑于2022年,星期一例:累加数组中的元素例:累加数组中的元素例:累加数组中
36、的元素例:累加数组中的元素(通过存储器传送参数通过存储器传送参数)data segment ary dw 1,2,3,4,5,6,7,8,9,10 count dw 10 sum dw?data endscode segmentmain proc far assume cs:code,ds:data mov ax,data mov ds,ax call proaddcall proadd mov ax,4c00h int 21hmain endpcode ends end mainproadd proc nearproadd proc near push ax push cx push si
37、lea si,aryary mov cx,countcount xor ax,axnext:add ax,si add si,2 loop next mov sumsum,ax pop si pop cx pop ax retproadd endpproadd endp第38页,共56页,编辑于2022年,星期一例:累加数组中的元素例:累加数组中的元素例:累加数组中的元素例:累加数组中的元素(通过地址表传送参数地址通过地址表传送参数地址)data segment ary dw 10,20,30,40,50,60,70,80,90,100 count dw 10 sum dw?table dw
38、3 dup(?);地址表data endscode segmentmain proc far assume cs:code,ds:data push ds sub ax,ax push ax mov ax,data mov ds,ax mov table,offset ary mov table+2,offset count mov table+4,offset sum mov bx,offset table call proadd retmain endp 第39页,共56页,编辑于2022年,星期一proadd proc nearproadd proc near push ax push
39、cx push si push di mov si,bx mov di,bx+2 mov cx,di mov di,bx+4 xor ax,axnext:add ax,si add si,2 loop next mov di,ax pop di pop si pop cx pop ax retproadd endpproadd endpcode ends end main 30d 40d 50d 60d 70d 80d 90d100d 10d ary 20d 10dcountsumtable0000000000140014001600160018001800000000001400140016
40、0016(bx)(bx)(si)(si)(di)(di)550d550d第40页,共56页,编辑于2022年,星期一六、嵌套子程序六、嵌套子程序 子程序的嵌套:子程序的嵌套:在一个子程序中调用到另一个子程序的结构,在一个子程序中调用到另一个子程序的结构,称为嵌套。称为嵌套。注意:注意:此时要注意寄存器的保护和恢复。此时要注意寄存器的保护和恢复。第41页,共56页,编辑于2022年,星期一子程序的嵌套:子程序的嵌套:主程序主程序 子程序子程序A A 子程序子程序B B call call proc_Aproc_Aproc_Aproc_A call call proc_Bproc_BCall Ca
41、ll proc_Aproc_Aretretproc_Bproc_B retret第42页,共56页,编辑于2022年,星期一六、递归子程序六、递归子程序 子程序的递归:子程序的递归:在子程序中调用到自身,称为递归。在子程序中调用到自身,称为递归。例如:阶乘!例如:阶乘!第43页,共56页,编辑于2022年,星期一例:递归子程序实现:例:递归子程序实现:例:递归子程序实现:例:递归子程序实现:n!n(n-1)(n-2)1fact proc nearfact proc near push ax push ax push bp push bp mov bp,sp mov bp,sp mov ax,b
42、p+6mov ax,bp+6 cmp ax,0 cmp ax,0 jne fact1 jne fact1 inc ax inc ax jmp exit jmp exitfact1:dec axfact1:dec ax push ax push ax call factcall fact pop axpop ax mul word ptrbp+6 mul word ptrbp+6exit:exit:mov bp+6,ax mov bp+6,ax pop bp pop bp pop ax pop ax ret ret fact endpfact endp第44页,共56页,编辑于2022年,星期一
43、5.3 DOS5.3 DOS功能调用功能调用MS-DOS将许多涉及设备驱动和文件管理等操作编写成子程序存储将许多涉及设备驱动和文件管理等操作编写成子程序存储起来,每个子程序对应一个编号,程序员通过调用这些子程序来起来,每个子程序对应一个编号,程序员通过调用这些子程序来实现所需要的功能。实现所需要的功能。DOS功能调用分类:功能调用分类:设备驱动设备驱动(基本基本I/O)文件管理文件管理 其他其他(内存管理、终止程序等内存管理、终止程序等)第45页,共56页,编辑于2022年,星期一 DOS功能调用的步骤:功能调用的步骤:准备入口参数准备入口参数(有些功能调用无需入口参数有些功能调用无需入口参数
44、);子程序的编号送子程序的编号送AH寄存器;寄存器;发软中断指令发软中断指令INT 21H;例:例:例:例:MOV DL,07H MOV DL,07H MOV DL,07H MOV DL,07H ;准备入口参数;准备入口参数;准备入口参数;准备入口参数MOV AH,2 MOV AH,2 MOV AH,2 MOV AH,2 ;置子程序编号;置子程序编号;置子程序编号;置子程序编号INT 21H INT 21H INT 21H INT 21H ;软中断指令,实施调用;软中断指令,实施调用;软中断指令,实施调用;软中断指令,实施调用2号子功能能实现在屏幕上输出字符,但当号子功能能实现在屏幕上输出字符
45、,但当DL=07H时,并不输出字符,而时,并不输出字符,而是发出嘟的一声。是发出嘟的一声。第46页,共56页,编辑于2022年,星期一 基本基本I/O功能调用功能调用1、带回显键盘输入、带回显键盘输入(1号功能号功能)功能:功能:从键盘上读一个字符,并将该字符回显在屏幕上。从键盘上读一个字符,并将该字符回显在屏幕上。入口参数:入口参数:无无 出口参数:出口参数:AL=读到字符的读到字符的ASCII码码 说明:说明:若读到的字符是若读到的字符是Ctrl+C或或Ctrl+Break,则结束程序。,则结束程序。2、不带回显键盘输入、不带回显键盘输入(8号功能号功能)除读到的字符不在屏幕上显示外,同除
46、读到的字符不在屏幕上显示外,同1号功能号功能第47页,共56页,编辑于2022年,星期一3、直接键盘输入、直接键盘输入(7号功能号功能)功能:功能:从键盘上读一个字符从键盘上读一个字符 入口参数:入口参数:无无 出口参数:出口参数:AL=读到字符的读到字符的ASCII码码 说明:说明:u 不检查读到的字符是否是不检查读到的字符是否是Ctrl+C或或Ctrl+Break。u 不回显读到的字符。不回显读到的字符。4、显示输出、显示输出(2号功能号功能)功能:功能:从屏幕输出一字符从屏幕输出一字符 入口参数:入口参数:DL=要输出字符的要输出字符的ASCII码码 出口参数:出口参数:无无第48页,共
47、56页,编辑于2022年,星期一5、显示字符串、显示字符串(9号功能号功能)功能:功能:在屏幕上显示一字符串在屏幕上显示一字符串 入口参数:入口参数:DS:DX=要显示的字符串的地址,字符串以要显示的字符串的地址,字符串以$作作 为结束标志。为结束标志。出口参数:出口参数:无无6、输入字符串、输入字符串(0AH号功能号功能)功能:功能:从键盘读入一字符串从键盘读入一字符串 入口参数:入口参数:DS:DX=缓冲区首地址。缓冲区首地址。出口参数:出口参数:接收到的字符串存在缓冲区。接收到的字符串存在缓冲区。其他其他DOS功能调用详见汇编语言教材课本功能调用详见汇编语言教材课本P471附录附录4!第
48、49页,共56页,编辑于2022年,星期一作业作业1、汇编语言教材、汇编语言教材P193课后习题课后习题5.1、5.232、5.4、5.21上机练习上机练习第50页,共56页,编辑于2022年,星期一第51页,共56页,编辑于2022年,星期一微机与单片机系统及应用微机与单片机系统及应用实践题目实践题目要求:要求:按学号后按学号后3位除以位除以3之后的余数选作以下题目,做错题无效。之后的余数选作以下题目,做错题无效。15周之前上交程序,要求尽可能采用子程序结构,程序要有相应的注释。周之前上交程序,要求尽可能采用子程序结构,程序要有相应的注释。题目题目题目题目0 0:写一个程序,它先接收一个字符
49、串,然后显示其中数字符的个数、写一个程序,它先接收一个字符串,然后显示其中数字符的个数、英文字母的个数和字符串的长度。英文字母的个数和字符串的长度。提示:先利用提示:先利用0AH号功能调用接收一个字符串,然后分别统计其中数字符的号功能调用接收一个字符串,然后分别统计其中数字符的个数和英文字母的个数,最后用十进制数的形式显示它们。整个字符串的长度个数和英文字母的个数,最后用十进制数的形式显示它们。整个字符串的长度可以从可以从0AH号功能调用的出口参数中取得。号功能调用的出口参数中取得。第52页,共56页,编辑于2022年,星期一题目题目题目题目2 2:写一个程序,它先接收一个字符串,然后抽去其中
50、的空格,最后按相写一个程序,它先接收一个字符串,然后抽去其中的空格,最后按相反的顺序显示这个改变后的字符串。反的顺序显示这个改变后的字符串。提示:无提示:无题目题目题目题目1 1:模拟密码输入:假设数据库中有密码模拟密码输入:假设数据库中有密码5201314,用户输入一个,用户输入一个字符串,显示的时候全都以字符串,显示的时候全都以*出现,然后判断用户输入的字符串是否与数据库出现,然后判断用户输入的字符串是否与数据库中密码相同,若相同,输出中密码相同,若相同,输出“Password Right!”,否则输出,否则输出 “Password Error!”提示:将提示:将“Password Rig