最新汇编入门与精通3课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《最新汇编入门与精通3课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 汇编 入门 精通 课件
- 资源描述:
-
1、汇编语言程序设计BIOSBIOS与与DOSDOS中断调用概述中断调用概述在实际应用中,PC机与外部设备的传送数据大部分采用中断方式来实现,在主机系统主板上较高地址的ROM中,驻留着基本输入/输出系统(basic input/output system BIOS)的程序,它提供了系统加电自检、引导并装入操作系统、主要的I/O设备的处理程序等功能。用户可在不必了解中断服务程序的内部结构的基础上来使用中断服务程序。DOS是磁盘操作系统,是由BIOS在开机后自动装入内存的,DOS中断是建立在BIOS之上的中断,它借用了BIOS软中断的功能来调用系统的中断服务程序。汇编语言程序设计汇编语言程序设计汇编语
2、言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计【例1】编写程序,当无键按下时,循环等待,当有键按下时,从键盘读10个按键,并将其扫描码和字符码保存到内存单元中。(1)分析 1)利用INT 16H的1号功能为探测读键盘,当无键按下时循环等待,当有键按下时读键。2)利用INT16H的0号功能读取10个键的扫描码和字符码并保存到内存单元中。汇编语言程序设计DATA SEGMENTSTRING DB 20 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA ;初始化DS MO
3、V DS,AXL1:MOV AH,1 ;利用INT 16H的功能1探测读键盘 INT 16H JZ L1 ;无键按下则循环 LEA SI,STRING MOV CX,10汇编语言程序设计L2:MOV AH,0 ;用INT 16H的功能0读键盘 INT 16H MOV SI,AL ;保存字符码 MOV SI+1,AH ;保存扫描码 ADD SI,2 LOOP L2 ;循环10次MOV AX,4C00H INT 21HMAIN ENDPCODE ENDSEND MAIN汇编语言程序设计3.DOS键盘功能调用 上面介绍了BIOS键盘功能调用(16H),而在实际应用中,对于一般的键盘操作,最好使用对硬
4、件依赖更少、更为方便的DOS键盘功能调用。下表中列出了DOS功能调用INT 21H中与键盘输入有关的功能调用。汇编语言程序设计【例2】编写一程序,从键盘输入一字符,若为“Y”,则从键盘接收一个字符串;若为“N”,则结束程序;若都不是则循环读键盘。(1)分析:1)调用INT 21H的1号功能从键盘读入一个字符。2)若键入的字符为Y,则调用INT 21H的0AH号功能从键盘输入一个字符串。(2)程序流程图如下:从键盘输入字符串从键盘输入字符串开始开始从键盘读一字符从键盘读一字符返回返回是字符是字符Y Y?N NY Y是字符是字符N N?Y YN N汇编语言程序设计DATA SEGMENT STRI
5、NG DB 20,?,20 DUP(?);定义存放字符串的缓冲区DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART:MOV AX,DATA MOV DS,AXLOP1:MOV AH,1 ;从键盘读入一个字符 INT 21H CMP AL,Y ;若为“Y”,转输入字符串程序段 JZ IN_STRING CMP AL,N ;若为“N”,结束程序 JZ EXIT JMP LOP1 ;若都不是,循环读键盘字符IN_STRING:LEA DX,STRING ;从键盘输入一字符串 MOV AH,0AH INT 21HEXIT:MOV
6、 AX,4C00H INT 21HMAIN ENDPCODE ENDS END START汇编语言程序设计显示器显示器I/O程序设计程序设计显示器通过显示适配器(显示卡)与PC机相连,显示卡是计算机和显示器的接口,现在常用的显示卡都支持字符显示和图形显示两种方式,每种显示方式还有多种显示模式。字符方式也称为文本方式,在这种显示方式下,屏幕上只能显示字符及其属性。字符通常是指字母、数字、符号和一些简单的图形(如菱形、笑脸符等)。在字符方式下,屏幕被划分为若干行和列,较典型的是80列25行。显示字符有两种方法,一种是用BIOS和DOS功能调用,另一种是直接组织显示缓冲区。汇编语言程序设计显示的基础
7、知识显示的基础知识(1)显示模式 在字符方式下包括几种显示模式,每种模式具有不同的分辨率和颜色,如下表所示。其中用得最普遍的是显示模式3,在这种模式下,显示器的屏幕被划分成80列(0-79)25行(0-24),可以用列号和行号组成的坐标来表示屏幕上的每个可显示位置,如左上角的坐标为(0,0),右下角的坐标为(79,24)。汇编语言程序设计汇编语言程序设计汇编语言程序设计BIOS显示功能调用BIOS中提供的显示调用INT 10H功能如下:AH=0AH=0:设置显示模式:设置显示模式 输入参数:AL=显示模式号(表8-10 常见的字符显示模式)返回结果:无返回参数,只是屏幕设置为指定的模式AH=1
8、AH=1:设置光标类型:设置光标类型输入参数:(CH)4=0,光标显示,(CH)0-3=光标起始线(CL)0-3=光标结束线,(CH)4=1,光标不显示(关闭)返回结果:无汇编语言程序设计AH=2AH=2:设置光标位置:设置光标位置 输入参数:BH=页号(一般为0)DH=新光标的行号 DL=新光标的列号 返回结果:无 AH=3AH=3:读光标位置:读光标位置 输入参数:BH=页号(要显示的当前页号)返回结果:CH=光标开始线,CL=光标结束线 DH=光标当前行号,DL=光标当前列号汇编语言程序设计AH=5:选择当前显示页输入参数:AL=选择的页号 返回结果:无AH=6:屏幕初始化或向上滚动 输
9、入参数:AL=要滚动的行数,AL=0,全屏滚动(清屏)CH=滚动窗口左上角行号,CL=滚动窗口左上角列号 DH=滚动窗口右下角行号,DL=滚动窗口右下角列号 BH=滚入行属性 返回结果:无汇编语言程序设计AH=7:屏幕初始化或向下滚动 输入参数:AL=要滚动的行数,AL=0,全屏滚动(清屏)CH=滚动窗口左上角行号,CL=滚动窗口左上角列号 DH=滚动窗口右下角行号,DL=滚动窗口右下角列号 BH=滚入行属性 返回结果:无AH=8:读光标位置的属性和字符 输入参数:BH=显示页 返回结果:AH=光标位置的属性 AL=光标位置的字符 汇编语言程序设计AH=9:在光标位置显示字符及属性 输入参数:
10、BH=显示页 BL=字符的属性 AL=待显示字符的ASCII码 CX=字符重复次数(只显示一个字符时,CX=1)返回结果:无 AH=0AH:在光标位置只显示字符,不改变属性 输入参数:BH=显示页 AL=待显示的字符 CX=字符重复次数(只显示一个字符时,CX=1)返回结果:无 汇编语言程序设计AH=0EH:显示字符且光标自动前移 输入参数:AL=要显示的字符 BL=前景色 返回结果:无 AH=0FH:获取当前的显示模式 输入参数:无 返回结果:AL=当前显示模式号 AH=当前显示模式每行的列数 BH=当前显示页号 汇编语言程序设计AH=13H:显示字符串输入参数:ES:BP=字符串首地址 C
11、X=串长度DH,DL=起始行、列号BH=显示页号AL=0,BL=属性,光标保持在原处,串由字符组成,仅显示字符 AL=1,BL=属性,光标到串尾,串由字符组成,仅显示字符AL=2,光标保持在原位不动,串由字符及属性组成AL=3,光标到串尾,串由字符及彩色字符属性和背景属性(两个属性由一个字节决定)组成 返回结果:无 汇编语言程序设计【例3】在屏幕中间建立一个34列11行反相显示的小窗口,在窗口最上面一行以青底淡红字显示一个菜单栏:File Edit Search View Options Help,在屏幕最下面一行再显示该菜单栏,但每一项属性不同。汇编语言程序设计(1)分析1)在屏幕中间建立一
12、个34列11行反相显示的小窗口,应调用INT 10H的6号功能,定义左上角坐标为(7,23),右小角坐标为(17,56),即屏幕中间大小为34列11行的小窗口,把小窗口清为白底黑字的属性即为反相显示,指令序列如下:MOV AH,6 ;调用INT 10H的6号功能MOV AL,0 ;AL=0,全屏滚动(清屏)MOV CH,7 ;CH=滚动窗口左上角行号7MOV CL,23 ;CL=滚动窗口左上角列号23MOV DH,17 ;DH=滚动窗口右下角行号17MOV DL,56 ;DL=滚动窗口右下角列号56MOV BH,70H ;白底黑字,反向显示INT 10H汇编语言程序设计2)在窗口最上面一行显示
13、一个菜单栏,应调用INT 10H的功能13HMOV AH,13H ;INT 10H的功能13H,在窗口最上面一行显示菜单栏LEA BP,STRING1 ;BP字符串SRING1的首地址MOV CX,ST1_LEN ;CX=串长度ST1_LENMOV DH,7 ;DH=起始行号7MOV DL,23 ;DL=起始列号23MOV BH,0 ;BH=显示页号,一般为0MOV AL,1;光标到串尾,串由字符组成,仅显示字符MOV BL,3CH ;字符属性为青底淡红色INT 10H汇编语言程序设计DATA SEGMENTSTRING1 DB File Edit Search View Options He
14、lp;窗口上面待显示的字符串ST1_LEN EQU$-STRING1 ;显示串1的长度STRING2 DB F,1ch,i,1ch,l,1ch,e,1ch,20h,1ch;窗口下面待显示的字符串 DB E,4ah,d,4ah,i,4ah,t,4ah,20h,4ah DB S,2dh,e,2dh,a,2dh,r,2dh,c,2dh,h,2dh,20h,2dh DB V,5ah,i,5ah,e,5ah,w,5ah,20h,5ah DB O,3eh,p,3eh,t,3eh,i,3eh,o,3eh,n,3eh,s,3eh,20h,3eh DB H,6bh,e,6bh,l,6bh,p,6bhST2_LE
15、N EQU ($-STRING2)/2 ;显示串2的长度DATA ENDS汇编语言程序设计CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR MOV AX,DATA ;设置DS=ES MOV DS,AX MOV ES,AX MOV AH,0 ;设置显示模式3 MOV AL,3 INT 10H汇编语言程序设计MOV AH,6 ;清屏MOV AL,0 MOV CH,0 ;屏幕左上角坐标MOV CL,0MOV DH,24 ;屏幕右下角坐标MOV DL,79MOV BH,07 ;属性INT 10HMOV AH,1 ;暂停,等待键盘输入单个字符 INT 2
16、1HMOV AH,6 ;建立小窗口MOV AL,0 ;全屏滚动MOV CH,7 ;左上角坐标MOV CL,23MOV DH,17 ;右下角坐标MOV DL,56汇编语言程序设计MOV BH,70H ;白底黑字,反向显示INT 10HMOV AH,13H ;在窗口最上面一行显示菜单栏LEA BP,STRING1;ES:BP字符串首地址MOV CX,ST1_LEN;CX=串长度MOV DH,7 ;DH,DL=起始行,列位置MOV DL,23MOV BH,0MOV AL,1MOV BL,3CH ;属性为青底淡红色INT 10H MOV AH,1 ;暂停INT 21H;在窗口最下面一行以多种属性显示菜
17、单栏汇编语言程序设计MOV AH,13H ;INT 10H的功能13HLEA BP,STRING2 ;串首地址MOV CX,ST2_LEN ;显示串的长度MOV DH,17 ;起始位置行号MOV DL,23 ;起始位置列号MOV BH,0 MOV AL,3 ;光标到串尾,串由字符及属性组成INT 10HMOV AH,4CH ;返回DOSINT 21HMAIN ENDPCODE ENDS END MAIN汇编语言程序设计(4)程序说明:INT 10H的13H号功能有四种显示字符串的方式,前两种方式(AL=0,1),整个字符串只能以一种属性显示,后两种方式(AL=2,3)每个字符都可以不同属性显示
18、。本程序中,显示窗口上面的菜单栏用AL=1的方式,显示字符的属性相同;显示窗口下面的菜单栏用AL=3的方式,每个字符以不同的属性显示。(5)执行结果如下图:汇编语言程序设计3.DOS显示功能调用 DOS的INT 21H提供的显示功能调用如下:AH=2,显示一个字符,光标跟随字符移动,检测Ctrl_Break 输入参数:DL=待显示字符的ASCII码 返回结果:无AH=6,显示一个字符,光标跟随字符移动,不检测Ctrl_Break 输入参数:DL=待显示字符的ASCII码 返回结果:无AH=9,显示字符串,光标跟随字符串移动 输入参数:DS:DX=待显示字符串的首地址,字符串必须以$结尾。返回结
19、果:无汇编语言程序设计用INT 21H的9号功能显示一个字符串,首先要在数据段中定义一个待显示的字符串,这个字符串必须以$结尾。例如,定义一个字符串如下:STRING DB HOW ARE YOU,0DH,0AH,$然后,在代码段中,显示该字符串的指令为:LEA DX,STRING MOV AH,9 INT 21H汇编语言程序设计汇编语言程序设计【例4】用DOS时间功能调用获取当前时间,并在屏幕上显示出来。(1)分析1 1)本程序首先调用本程序首先调用DOSDOS时间功能调用(时间功能调用(INT 21HINT 21H的的2CH2CH功功能),读取系统当前时间:能),读取系统当前时间:MOV
20、AHMOV AH,2CH2CHINT 21HINT 21H执行后的返回结果:执行后的返回结果:CH=CH=小时(小时(0-230-23)CL=CL=分钟(分钟(0-590-59)DH=DH=秒(秒(0-590-59)2 2)然后按照一定的格式显示出来,其中需要多次把返回的然后按照一定的格式显示出来,其中需要多次把返回的二进制数结果转换成十进制并显示出来,所以用子程序二进制数结果转换成十进制并显示出来,所以用子程序来实现这一功能。来实现这一功能。汇编语言程序设计(2)编写程序如下:DATA SEGMENT TIME DB CURRETN TIME IS$;定义一个提示串 DATA ENDS CO
21、DE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR汇编语言程序设计LEA DX,TIME ;显示提示串 MOV AH,9 INT 21H MOV AH,2CH ;获取当前时间 INT 21H MOV AL,CH ;显示小时数 CALL P1 MOV DL,3AH ;显示一分隔符“:”MOV AH,2 INT 21H MOV AL,CL ;显示分钟数 CALL P1 MOV DL,3AH ;显示分隔符“:”MOV AL,2 INT 21H MOV AL,DH ;显示秒数 CALL P1 MOV AX,4C00H ;返回DOS INT 21HMAIN E
22、NDP 汇编语言程序设计;把寄存器中的内容转换成十进制显示出来P1 PROC ;入口参数:AL为待显示的寄存器 PUSH BX ;PUSH DX XOR AH,AH ;(1)做除法 MOV BL,10 ;把二进制转换成十进制 DIV BL MOV BL,AH ;保存余数 MOV DL,AL OR DL,30H ;把十位数转换成ASCII码 MOV AH,2 ;显示十位数 INT 21H MOV DL,BL OR DL,30H ;把个位数转换成ASCII码 MOV AH,2 ;显示个位数 INT 21H POP DX POP BX RETP1 ENDPCODE ENDS END START汇编语
23、言程序设计(3)程序说明:1 1)因为当前时间的小时数、分钟数和秒数都不会超过两位)因为当前时间的小时数、分钟数和秒数都不会超过两位十进制数,所以这里把二进制数转换成十进制时,只需十进制数,所以这里把二进制数转换成十进制时,只需做一次除法(除以做一次除法(除以1010)即可,所得商和余数分别为十进)即可,所得商和余数分别为十进制的十位数和个位数。制的十位数和个位数。汇编语言程序设计【例5】用BIOS时间功能调用获取当前日期,并在屏幕上显示出来。(1)分析:本程序与上例类似,调用BIOS时间功能调用(INT 1AH的功能4)获取当前日期并显示。不同之处在于,INT 1AH的功能4的返回结果是用压
24、缩BCD码的形式表示的,因此转换成十进制并显示的程序段不同。1 1)首先调用)首先调用BIOSBIOS时间功能调用(时间功能调用(INT 1AHINT 1AH的功能的功能4 4)获取当前日期:)获取当前日期:MOV AH,04H INT 1AH 执行后的返回结果:CF=1表示失败 CF=0表示成功 CX=年(1980-2099)DH=月(1-12)DL=日(1-31)2 2)INT 1AHINT 1AH的功能的功能4 4的返回结果是用压缩的返回结果是用压缩BCDBCD码的形式表示的,因此转码的形式表示的,因此转换成十进制并显示的程序段不同。换成十进制并显示的程序段不同。汇编语言程序设计2)编写
25、程序如下:DATA SEGMENT DATE DB CURRETN DATE IS$;定义一个提示串 DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART:MOV AX,DATA ;初始化DS MOV DS,AX 汇编语言程序设计LEA DX,DATE ;显示提示串 MOV AH,9 INT 21H MOV AH,04H ;获取当前日期 INT 1AH JC EXIT ;若失败,则转EXIT PUSH DX ;保存月、日;显示年份 MOV BX,CX ;BX=年份 MOV CX,4 ;年份4位,需循环4次L1:PUSH C
展开阅读全文