《显示程序设计》ppt课件

上传人:tian****1990 文档编号:75155699 上传时间:2019-01-30 格式:PPT 页数:89 大小:585.31KB
返回 下载 相关 举报
《显示程序设计》ppt课件_第1页
第1页 / 共89页
《显示程序设计》ppt课件_第2页
第2页 / 共89页
《显示程序设计》ppt课件_第3页
第3页 / 共89页
《显示程序设计》ppt课件_第4页
第4页 / 共89页
《显示程序设计》ppt课件_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《《显示程序设计》ppt课件》由会员分享,可在线阅读,更多相关《《显示程序设计》ppt课件(89页珍藏版)》请在金锄头文库上搜索。

1、1,新 编 汇编语言程序设计,2,第7章 显示程序设计,7.1 宏指令 7.2 字符方式显示程序设计 7.3 图形显示程序设计 习题七,3,键盘与显示器是重要的人机对话界面。显示器通过显示适配器(Video Adapter,也称显卡)与PC机相连,显卡是计算机和显示器的接口。 显卡的两种工作方式 字符方式也称文本方式,在这种方式下,屏幕只能显示字符及其属性(颜色,亮度等),屏幕被分成若干行和列,最常见的是80列25行。 图形方式下的屏幕由一个个像素(Pixel)组成,例如,标准VGA格式的屏幕由480行,每行640个像素组成。通过读写屏幕上各个像素(点),可以显示出各种单色和彩色的图形。,4,

2、7.1 宏指令,7.1.1 宏指令的定义 7.1.2 宏指令的使用,5,一组指令/伪指令,用来完成某项功能。 宏指令使用之前,需要为这一组指令起一个名字,称为“定义”,此后就可以在程序中多次使用。 可以将宏指令的定义存放在一个文件中,建立宏指令库,好像高级语言的库函数,使用时用INCLUDE伪指令将这个库插入源程序。,宏指令,6,宏指令实际上就代表了它对应的一组指令。对程序中出现的宏指令进行汇编时,这条宏指令被它对应的一组指令所代替。如果程序中多次使用宏指令,就等于多次重复拷贝了这个指令组,占用的内存随之增加。 调用子程序通过执行CALL指令实现,存在从“主程序”与“子程序”之间的两次控制转移

3、。使用宏指令不存在控制转移的过程。 使用子程序和宏指令都可以提高编程效率。子程序占用固定大小的存储空间,被主程序调用时,空间不会随调用次数而增加。但是,宏指令占用存储空间会随着使用次数的增加而增加。,宏指令和子程序的区别:,7,7.1.1 宏指令的定义,形式参数表中的参数可以为“空”(没有),也可以有多个,用逗号分隔。 宏体由指令、伪指令和前面已经定义的宏指令组成。,宏指令名 MACRO 形式参数表 ;宏体(指令组) ENDM,8,CRLF MACRO MOV DL, 0AH INT 21H MOV DL, 0DH INT 21H ENDM,例7.1 定义一个宏,输出换行回车符。,9,SUM2

4、 MACRO X, Y MOV AX, X ADD AX, Y ENDM SUM3 MACRO A, B, C SUM2 A, B ADD AX, C ENDM,例7-2 可以用已经定义的宏指令来定义另一个宏指令,也 就是说,宏指令可以嵌套定义。,10,MAX MACRO X, Y, Z LOCAL L1 MOV AX, X CMP AX, Y JGE L1 MOV AX, Y L1: MOV Z, AX ENDM,例7.3 定义一个宏,求两个带符号数中的较大者。,11,7.1.2 宏指令的使用,.MODEL SMALL .CODE START:MOV CX, 10 MOV BL, 0 AGA

5、IN:MOV DL, BL MOV AH, 02H INT 21H CRLF INC BL LOOP AGAIN MOV AH, 4CH INT 21H END START,CRLF MACRO MOV DL, 0AH MOV AH, 02H INT 21H MOV AH, 02H MOV DL, 0DH INT 21H ENDM,例7.4 在屏幕上输出09十个字符,每个字符占一行。,12,. MODEL SMALL . DATA BUF DW 90, 90, 234 ; 3个数 BIG DW ? ; 存放最大数的单元 MESS DB 0DH, 0AH, The Max Is: $,宏指令的展

6、开,例7.5 利用例7.3定义的宏指令,求3个带符号数中最大的数 并显示。,13,. CODE START: MOV AX, DATA MOV DS, AX MAX BUF, BUF+2, BIG ; 求前两个数中的较 ;大者,存入BIG MAX BUF+4, BIG, BIG ; 求第三个数与BIG中的较 ;大者,存入BIG LEA DX, MESS MOV AX, BIG CALL WRITEINT ; 输出结果 MOV AX, 4C00H INT 21H ; 返回操作系统 END START,14,在MAX宏指令定义中,出现了标号L1。该指令被二次调用。这样,在目标代码中会出现二个L1标

7、号,也就是说,在同一个源程序中出现两个同名标号。 为了避免这个错误,宏定义中使用LOCAL局部标号定义伪指令把L1定义为“局部标号”。 宏展开时,汇编程序对局部标号进行换名处理,用?0000、?0001依次代替各个宏展开中的标号。 注意,LOCAL伪指令应紧接MACRO语句之后,两句之间不得有其他语句。,15,7.2 字符方式显示程序设计,7.2.1 文本显示模式和字符属性 7.2.2 直接写屏输出 7.2.3 BIOS显示功能调用,16,7.2.1 文本显示模式和字符属性,BIOS的显示功能调用INT 10H的0号功能用于设定显示模式。 MOV AH, 0 MOV AL, 显示模式号 INT

8、 10H ;无返回参数。,显示模式,17,18,2. 字符属性,19,7.2.2 直接写屏输出,显存(VRAM) 用来存放需要在显示器上显示的文本、图形信息 的内存区域。屏幕上每个坐标位置上的字符或图形信息与显存中某些单元的内容一一对应。,20,使用MOV指令将数据送到显存的某个单元时,在屏幕的对应位置上就会立即显示出相应的字符或图形。 在字符显示模式下,显存从B800H: 0000H开始,每个字符用两个字节来表示:第一个字节为显示字符的ASCII码,第二个字节是字符的显示属性。 以25行80列的字符显示方式为例,一个屏幕可显示2000个字符,需要约4KB的显示存储器,称为一页。 屏幕上某个坐

9、标位置对应显存中的偏移地址: =页起始偏移地址2(字符行坐标每行列数列坐标),直接写屏方式,21,DATA SEGMENT BUF DW 2000 DUP(?) ;保存显存信息的缓冲区 MESS DB Press Any Key to Review the Screen ! ;显示的信息 LEN EQU $ -MESS DATA ENDS,例7.6 清屏并输出字符串,按任意键后,恢复清屏前屏幕内容。,22,CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV AX, 0B800H MOV ES, AX

10、 ;ES为显示缓冲区段地址 MOV CX, 2000 ;2000个字符 MOV SI, 0 LEA DI, BUF ;存放显存信息的缓 ;冲区首地址送DI,23,NEXT: MOV AX, ES:SI ;将显存中的内容全部读入到BUF MOV DI, AX ADD SI, 2 ADD DI, 2 LOOP NEXT MOV DI, 0 ;显存首地址送DI MOV CX, 2000 ;屏幕上2000个字符都写成空格,即清屏 MOV AX, 0720H ; 20H是空格的ASCII代码,07H是显示属性 CLD ; 设置串操作指针递增 REP STOSW ;将AX内容送显存,共2000次,实现清屏

11、,24,MOV DX, 050AH ; 屏幕坐标(5,10) CALL CALADDR ;计算屏幕坐标(5,10)在显存中的偏移地址 LEA SI, MESS ;要显示的字符串首地址送SI MOV CX, LEN ; 字符串长度送CX MOV AH, 1EH ;显示属性送入AH NEXT2:MOV AL, SI ; 字符ASCII码送AL STOSW ; 字符ASCII码及其属性送 ; 显存的相应位置 INC SI ; 修改字符串指针 LOOP NEXT2 ;循环LEN次 MOV AH, 10H ;等待键盘输入 INT 16H,25,;以下程序将BUF中的内容恢复到B800:0000H开始的

12、; 4000个字节中,恢复原先的屏幕 MOV CX, 2000 LEA SI, BUF MOV DI, 0 REP MOVSW MOV AX, 4C00H INT 21H,26,;计算偏移地址子程序:入口参数 DH=行数,DL列数 ;返回参数 DI=偏移地址 CALADDR PROC NEAR PUSH AX MOV AL, 80 ;总列数为80列 MUL DH XOR DH, DH ADD AX, DX SHL AX, 1 MOV DI, AX ;DI2(字符行坐标总列数列坐标) POP AX RET CALADDR ENDP CODE ENDS END START,27,7.2.3 BIO

13、S显示功能调用(INT 10H),28,29,30,31,SCROLL MACRO TOP,LEFT,BOTTOM,RIGHT,ATTRIB MOV AX, 0600H ; 屏幕上卷功能 MOV CH, TOP ; 左上角行号 MOV CL, LEFT ; 左上角列号 MOV DH, BOTTOM ; 右下角行号 MOV DL, RIGHT ; 右下角列号 MOV BH, ATTRIB ; 卷入行属性 INT 10H ; 对指定范围屏幕清屏 ENDM,CLS MACRO SCROLL 0, 0, 24, 79, 7 ; 宏嵌套定义 ENDM,宏定义CLS,清除整个屏幕显示内容,宏定义SCROL

14、L,清除屏幕内一个区域的显示内容,32,SETCUSOR MACRO PAGE1, ROW, COLUMN MOV AH, 2 ;设置光标位置 MOV DH, ROW ;光标行坐标 MOV DL, COLUMN;光标列坐标 MOV BH, PAGE1 ;BH=页号 INT 10H ;BIOS功能调用 ENDM,宏定义SETCURSOR,设置光标位置,宏指令SETMODE,设置显示模式,SETMODE MACRO MODE1 MOV AH, 0 MOV AL, MODE1 INT 10H ENDM,33,将上面文本添加到“YLIB.H”中。这样,以后需要进行 “清屏”,设置光标操作时,在程序首部

15、写上: “INCLUDE YLIB.H”,在需要地方写上已经定义的宏指令,就可以实现对应的操作。,34,例7.7在屏幕上建立一个5行38列窗口: (5, 10) (10, 48) , 蓝底黄字。显示信息后,按任意键退出。,; EX707.ASM . MODEL SMALL INCLUDE YLIB.H ;包含清屏、设置光标宏指令的定义 . DATA MESS DB Message In Window $ MESS1 DB Press Any Key To Exit! $ . CODE START: MOV AX, DATA MOV DS, AX,35,CLS ;宏指令,清屏 SCROLL 5,

16、 10, 10, 48, 00011110B ;滚屏,在屏幕上建立一个蓝底黄字的小窗口 ;窗口的左上角坐标(5,10),右下角坐标(10,48) SETCUSOR 0, 7, 20 ;设置光标位置,坐标(7,20) LEA DX, MESS ;在光标位置显示MESS字符串 MOV AH, 09H INT 21H,36,SETCUSOR 0, 9, 20 ;设置光标位置,坐标(9,20) LEA DX, MESS1 ;光标位置显示MESS1字符串 MOV AH, 09H INT 21H MOV AH, 10H ; 等待键盘输入 INT 16H ;BIOS调用 MOV AX, 4C00H INT 21H END START,37,; EX708.ASM . MODEL SMALL INCLUDE YLIB.H;包含清屏、设置光标位置宏指令的定义 . DATA MESS DB H

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号