1、1,第5章 汇编语言程序设计,2,主要内容:,5.1 汇编语句格式 5.2 伪指令 5.3 数据项和表达式 5.4 宏指令语句 5.5 条件汇编伪指令(自学) 5.6 汇编语言源程序 5.7 汇编语言程序的上机过程 5.8 汇编语言程序设计的基本方法 5.9 程序设计举例 5.10 小结,3,什么是汇编语言源程序?,汇编语言指令助记符、符号地址、标号、伪指令等语言元素的集合以及这些元素使用的规则 用汇编语言编写的程序叫汇编语言源程序 汇编语言源程序有严格的格式要求,4,DATA SEGMENT ; 数据段hello db “Welcome to the world of assembler!$
2、“ DATA ENDS ; 数据段结束 CODE SEGMENT ; 代码段assume cs:CODE, ds:DATA start: mov ax, datamov ds, axmov dx, offset hellomov ah, 9 ; 显示$结尾的字符串int 21hmov ah, 1 ; 等待按键int 21hmov ah, 4ch ; 返回DOSint 21h CODE ENDS ; 代码段结束END start ; 整个程序结束,指定程序入口点,5,什么是汇编程序?,常用的汇编程序: MASMMicrosoft Macro Assembler TASMTubor Assembl
3、er,汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫汇编。高级语言中称该过程为“解释”或“编译”。执行翻译的程序称为“汇编程序”。,6,5.1 汇编语句格式,汇编语句:指令、伪指令、宏指令每条指令语句都生成机器代码,各对应一种CPU操作,在程序运行时执行,汇编后产生目标代码。 伪指令语句为汇编和链接过程提供辅助信息、数据定义语句分配存储空间,伪指令不生成目标码。 宏指令是用户按照宏定义格式编写的一段程序,可以包含指令、伪指令、甚至其他宏指令。,7,标识符/语句标号 助记符 操作数序列 ;注释,标识符用来为变量、段及过程等命名,语句标号标识符后加 : ,提供转移地址,助
4、记符指令可分为三类:机器指令、伪指令和宏指令。,机器指令:指令系统中的指令,程序运行时由CPU执行;,伪指令:汇编程序执行的操作,规定汇编程序如何按要求进行汇编及分配内存 。,宏指令:由一系列指令或伪指令构成,汇编时展开成若干条机器指令,用于提高编程效率。,操作数序列可以是常量、变量、表达式、寄存器名或标号等,用逗号隔开。,(伪指令和宏指令由汇编程序在汇编期间处理 ),注释符 “;”后可给出语句注释,提高可读性和可理解性。,汇编语言语句一般格式为:,8,DATA SEGMENT ; 数据段hello db “Welcome to the world of assembler!$“ DATA E
5、NDS ; 数据段结束 CODE SEGMENT ; 代码段assume cs:CODE, ds:DATA start: mov ax, datamov ds, axmov dx, offset hellomov ah, 9 ; 显示$结尾的字符串int 21hmov ah, 1 ; 等待按键int 21hmov ah, 4ch ; 返回DOSint 21h CODE ENDS ; 代码段结束END start ; 整个程序结束,指定程序入口点,9,主要内容:,5.1 汇编语句格式 5.2 伪指令 5.3 数据项和表达式 5.4 宏指令语句 5.5 条件汇编伪指令(自学) 5.6 汇编语言源程
6、序 5.7 汇编语言程序的上机过程 5.8 汇编语言程序设计的基本方法 5.9 程序设计举例 5.10 小结,10,5.7 汇编语言程序的上机过程,在计算机上运行汇编语言程序的步骤: 用编辑程序(EDIT)建立源程序文件(ASM文件); 用汇编程序(MASM或TASM)把ASM文件汇编成目标程序文件(OBJ文件); 用链接程序(LINK)把OBJ文件转换成EXE文件; 在DOS命令状态下直接键入文件名就可执行该文件。,11,汇编语言上机过程,Y,Y,Y,N,N,N,有错 ?,有错 ?,有错 ?,结束,汇 编,输入(修改)源程序,连 接,运 行,查 错,开始,用EDIT,NOTEPAD等任何文本
7、编辑器。源程序存为.ASM文件,用MASM宏汇编程序进行汇编。 汇编后生成.OBJ目标文件。 命令格式:MASM ;,用LINK连接程序进行连接。 连接后生成.EXE可执行文件。 命令格式:LINK ;,用TD、DEBUG等调试程序进行调试。 命令格式:TD ,12,系统功能调用由OS提供的一组实现特殊功能的子程序供程序员在程序中调用,以减轻编程工作量。 DOS操作系统中的系统功能调用有两种,一种称为DOS功能调用,另一种称为BIOS功能调用。 DOS中这些功能调用是以软中断的方式提供的。 DOS功能调用由INT 21H提供。 BOIS中的功能调用常用的有INT 10H,INT 16H,INT
8、 13H等。,5.7.5 汇编语言和DOS的接口,程序的执行是在相应的操作系统支持下进行的,16位实地址方式要在DOS操作系统中运行,他需要DOS的功能调用(INT 21H)支持。,13,INT 2lH功能大致可以分为四个方面: 设备管理、目录管理、文件管理和其它。,D0S系统功能调用的使用方法如下: AH功能号; 设置该功能所要求的其他入口参数; 执行INT 21H指令; 分析出口参数。以下介绍INT 21H的几个最常用的功能。,5.7.6 DOS功能调用和BIOS功能调用,1. DOS系统功能调用,14,【功能号01H】,功能:等待键入一个字符,有回显。 入口参数:无 出口参数:AL按键的
9、ASCII码 说明:若AL=0,表明按键是功能键、光标键,需再次调用本功能,才能返回按键的扩展码。,MOV AH, 1 INT 21H,15,例:程序中有时需要用户对提示做出应答。GET_KEY: MOV AH,1 ;等待键入字符INT 21H ;结果在AL中AND AL,0DFH ;转大写CMP AL,Y ;是Y?JZ YES ;是,转YESCMP AL,N ;是N?JZ NO ;是,转NOJMP GET_KEY ;否则继续等待输入YES: NO: ,16,【功能号02 H】,功能:在屏幕的当前位置上显示一个字符 入口参数:DL=待显字符的ASCII码 出口参数:无 说明:显示字符,光标右移
10、一个字符位置。如果光标到达行末,则返回下一行开头。该功能破坏AL寄存器的内容例:在屏幕当前位置显示字符H,MOV AH,2 MOV DL,H INT 21H,17,【功能号05 H】,功能:向打印机发送一个字符 入口参数:DL=待打印字符的ASCII码 出口参数:无 说明:调用时,DOS将自动检测打印机的状态,若打印机异常,则在屏幕上显示异常信息,18,【功能号09 H】,功能:将当前数据区中DS:DX指向的字符串送屏幕显示 入口参数:DS:DX=字符串首地址,字符串必须以$为结束标志。 出口参数:无 调用格式: LEA DX, 字符串首地址 MOV AH, 9 INT 21H,19,例:在屏
11、幕上显示:HELLO,WORLD! ;在数据段定义字符串:DATA SEGMENTSTR1 DB HELLO,WORLD!$DATA ENDS ;在代码段中进行显示输出MOV AH, 9LEA DX, STR1INT 21H,20,【功能号0A H】,功能: 从键盘接收字符串送入内存的输入缓冲区,同时送屏幕显示 调用前要求: 必须先定义一个输入缓冲区 Buffer DB 100 ;最大可键入字符数(包括回车符) DB ? ;实际键入的字符数(不包括回车符) DB 100 DUP(?) 调用格式:LEA DX, BufferMOV AH, 10INT 21H,21,数据输入缓冲区的格式,22,若
12、用户键入的字符数(包括回车)定义的N1,本功能调用将不再接收新的键入,且光标不再向右移动。 例:设在数据段定义键盘缓冲区如下:STR1 DB 10,?,10 DUP(?) 调用DOS功能的0AH号功能的程序段为:LEA DX,STR1MOV AH,0AHINT 21H此程序段最多从键盘接收10个按键(包括回车)。,23,DATA SEGMENT String DB 100, ?, 100 DUP(?) DATA ENDS CODE SEGMENT MOV AX, DATAMOV DS, AX LEA DX, StringMOV AH, 10 ; 0AH号功能调用INT 21H CODE END
13、S,例:接受键盘输入的字符串(最大长度限定为100个字符),24,【功能号4C H】,功能:终止当前程序的运行,返回DOS。由被终止程序打开的全部文件都被关闭,程序占用的内存空间交还给DOS 入口参数: AL=返回码 出口参数:无,MOV AX,4C00H ;返回码为0 INT 21H,25,2. BIOS功能调用,BIOS的功能:加电自检、引导装入、设备驱动、系统接口初始化 BIOS中也提供了一组功能调用。与DOS功能调用相比,它们更接近底层硬件,运行效率更高。 BIOS功能调用模式如下: MOV AH, 功能号 设置入口参数 INT n 分析出口参数,26,BIOS键盘输入功能调用 INT
14、 16H,【功能号00H】 功能:读取键入的一个字符,无回显,响应Ctrl_C,无键入则等待。 入口参数:无 出口参数:AL=键入字符的ASCII码。若AL=0,则AH=键入字符的扩展码。【功能号01H】 功能:查询键盘的缓冲区。 入口参数:无 出口参数: Z标志0,表示有键入,此时AL=键入字符的ASCII码,AH=键入字符的扩展码。 Z标志1,表示无键入。,27,27,【功能号02 H】 功能:读取当前按键状态 入口参数:无 出口参数:AL=键盘状态字。状态字各位定义如下: AL7 置1 Insert键有效(被奇数次按下) AL6 置1 CapsLock 键有效(相应的指示灯亮) AL5
15、置1 Numlock键有效(相应的指示灯亮) AL4 置1 ScrollLock键有效(相应的指示灯亮) AL3 置1 按下了Alt键 AL2 置1 按下了Ctrl键 AL1 置1 按下左Shift键 AL0 置1 按下了右Shift键,28,例 检测按下的是否是F1或F2键,MOV AH,0INT 16HCMP AL,0 ;AL=0,按下的是功能键JNE ERR ;AL0,按下的是字符键CMP AH,3BH ;F1键的扫描码JE KEY_F1CMP AH,3CH ;F2键的扫描码JE KEY_F2 ERR: . ;错误处理 KEY_F1: ;F1按下后的处理 KEY_F2: ;F2按下后的处
16、理 GOON: ,29,BIOS的屏幕显示功能调用 INT 10H,【功能号00H】 功能:设置屏幕显示方式 入口参数:AL=0 40X25黑白文本方式AL=1 40X25彩色文本方式AL=2 80X25黑白文本方式AL=3 80X25彩色文本方式 出口参数:无【功能号01H】 功能:设置光标形状 入口参数:CH=光标顶部扫描线行号,CL=光标底部扫描线行号 出口参数:无,30,BIOS的屏幕显示功能调用 INT 10H,【功能号02H】 功能:预置光标位置入口参数:BH=显示页号,DH=行号,DL =列号出口参数:无,MOV BH,0 MOV DH, 10 MOV DL, 0 MOV AH,
17、 2 INT 10H,31,【功能号03H】 功能:读取光标的当前位置 入口参数:BH=显示页号 出口参数:DH、DL=光标在屏幕上的行、列号,MOV BH,0 MOV AH, 3 INT 10H,32,【功能号05H】 功能:设置当前显示页 入口参数:AL=显示页号(03) 出口参数:无,MOV AL,1 MOV AH, 5 INT 10H,33,【功能号08H】 功能:读取光标所在位置的字符及其属性 入口参数:BH=显示页号 出口参数: AH = 字符属性AL = 字符的ASCII码 说明:AH=光标所在位置的字符属性,AL=光标所在位置的字符的ASCII码,如果没有对应于字符的ASCII
18、码,则AL置0。,34,【功能号09H】 功能:从光标所在位置开始,显示若干个相同的字符 入口参数:AL=待显示字符的ASCII码BH=显示页号BL=待显字符的属性CX=重复显示的字符数。 出口参数:无,35,35,【功能号0EH】 功能:以TTY方式显示一个字符 入口参数:AL=待显字符的ASCII码 出口参数:无 说明:该功能在当前光标位置显示一个字符,然后光标后移一个位置。类似于DOS系统的2号功能调用。,36,例子:显示扩展ASCII码的256个字符 0127标准ASCII码 001FH非显示字符 128255扩展ASCII码,无国际统一标准,37,MOV CX, 256MOV DL, 0 NEXT: MOV AH, 2INT 21HINC DLLOOP NEXT,38,作业(补充),1. 用适当的INT 21H、INT 10H的功能调用在屏幕指定位置(0页、第10行、第5列)显示一个字符串信息(“I Like Macro Assembler!”)。,