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