[工学]第3章 汇编语言程序设计初步.ppt
《[工学]第3章 汇编语言程序设计初步.ppt》由会员分享,可在线阅读,更多相关《[工学]第3章 汇编语言程序设计初步.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步工学第3章 汇编语言程序设计初步 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步3.1 系统功能调用系统功能调用3.1.1 系统功能调用概述系统功能调用概述3.1.2 基本基本I/O调用调用返回本章首页返回本章首页第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步3.1.1 3.1.1 系统功能调用概述系统功能调用概述 我我们们在在编编制制汇汇编编
2、源源程程序序时时,常常常常要要与与外外部部设设备备发发生生关关系系,如如希希望望能能从从键键盘盘输输入入字字符符或或在在显显示示器器上上显显示示出出程程序序运运行行的的结结果果,但但由由于于计计算算机机机机种种的的不不同同、外外部部设设备备型型号号的的差差异异,控控制制它它们们工工作作的的程程序序也也会会有有差差异异。如如果果每每次次都都需需要要根根据据自自己己的的工工作作环环境境来来设设计计“控控制制这这些些外外设设工工作作 的的程程序序”,则则必必须须要要先先弄弄清清楚楚与与之之有有关关的的设设备备、电电路路、接接口口等等各各方方面面的的情情况况,是是一一件件既既复复杂杂,效效率率又又低低
3、的的事事情情,并且没有通用性。并且没有通用性。如果把这些控制过程预先编写成一个一个子如果把这些控制过程预先编写成一个一个子第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步程序,作为操作系统的一部分事先放在系统盘上,程序,作为操作系统的一部分事先放在系统盘上,用户在需要时只要按规定的格式设置好参数,直接用户在需要时只要按规定的格式设置好参数,直接调用这些子程序即可。美国调用这些子程序即可。美国MICROSOFT公司为公司为我们提供的磁盘操作系统(我们提供的磁盘操作系统(DOS)就具有这种功能)就具有这种功能,称为,称为“利用操作系统的标准功能调用(简称系统利用操作系统的标准功能调用(简称
4、系统功能调用)功能调用)”,编号从,编号从062H(3.0版),版),主要分主要分为设备管理(如键盘、显示器、打印机、磁盘等的为设备管理(如键盘、显示器、打印机、磁盘等的管理)、文件管理、目录管理及其他功能调用管理)、文件管理、目录管理及其他功能调用4大大类。类。第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步系统功能调用的基本方法系统功能调用的基本方法 采用一条软中断指令采用一条软中断指令INT n。所谓中断,是。所谓中断,是指当计算机正在执行正常的程序时,计算机系统指当计算机正在执行正常的程序时,计算机系统中的某个部分突然出现某些异常情况或特殊请求,中的某个部分突然出现某些异常情况
5、或特殊请求,CPU这时就中止(暂停)它正在执行的程序,而这时就中止(暂停)它正在执行的程序,而转去执行申请中断的那个设备或事件的中断服务转去执行申请中断的那个设备或事件的中断服务程序,执行完这个服务程序后,再自动返回到程程序,执行完这个服务程序后,再自动返回到程序断点执行原来中断了的正常程序。这个过程或序断点执行原来中断了的正常程序。这个过程或这种功能就叫做中断。这种功能就叫做中断。软中断是以指令方式产生的中断,软中断是以指令方式产生的中断,n是中断是中断类型号,不同的类型号,不同的n将转入不同的中断处理程序。将转入不同的中断处理程序。系统功能调用是系统功能调用是21号软中断。号软中断。第第3
6、 3章章 汇编语言程序设计初步汇编语言程序设计初步常用的系统功能调用表常用的系统功能调用表:表表3-1 最常用的系统功能调用表最常用的系统功能调用表第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步系统功能调用的步骤系统功能调用的步骤:1)将调用参数装入指定的寄存器。)将调用参数装入指定的寄存器。2)如需要功能调用号(即欲调用的子程序编号)如需要功能调用号(即欲调用的子程序编号),把它装入寄存器,把它装入寄存器AH。3)如需要子功能调用号,把它装入)如需要子功能调用号,把它装入AL。4)按中断号调用)按中断号调用DOS(发出中断指令:(发出中断指令:INT 21H)。)。5)检查返回参数
7、是否正确。)检查返回参数是否正确。第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步3.1.2 3.1.2 基本基本I/OI/O调用调用101H号调用号调用 功能:从标准输入设备上(通常为键盘)读取功能:从标准输入设备上(通常为键盘)读取字符,并在标准输出设备上(通常为显示器)回显。字符,并在标准输出设备上(通常为显示器)回显。格式:格式:MOV AH 01H INT 21H 说明:输入字符的说明:输入字符的ASCII码送入码送入AL中,如果读中,如果读到的字符是到的字符是Ctrl+C或或Ctrl+Break,则结束程序。,则结束程序。202H号调用号调用 功能:通过标准输出设备(多为显
8、示器)输出功能:通过标准输出设备(多为显示器)输出字符。字符。第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步 格式:格式:MOV DL,X;(X为要输出显示的为要输出显示的ASCII字符代码字符代码)MOV AH,02H INT 21H 说明:说明:DL寄存器中的内容等于要输出字符的寄存器中的内容等于要输出字符的ASCII码,在码,在显示输出时检查到的字符是显示输出时检查到的字符是Ctrl+C或或Ctrl+Break键的,则结束键的,则结束程序。程序。309H号调用号调用 功能:在标准输出上(通常为显示器)显示一个字符串。功能:在标准输出上(通常为显示器)显示一个字符串。字符串要以字
9、符字符串要以字符“$”为结束标志。为结束标志。格式:格式:MOV AH 09H INT 21H 说明:要输出显示的字符串的首地址送到说明:要输出显示的字符串的首地址送到DS、DX两个寄存器中,其中段地址送两个寄存器中,其中段地址送DS寄存器,寄存器,第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步偏移地址送偏移地址送DX寄存器。寄存器。40AH号调用号调用 功能:从标准输入设备上(通常为键盘)读功能:从标准输入设备上(通常为键盘)读一个字符串,存入内存,直到按回车键为止。一个字符串,存入内存,直到按回车键为止。格式:格式:MOV AH,0AH INT 21H 说明:此项操作,要求事先定
10、义一个输入缓说明:此项操作,要求事先定义一个输入缓冲区,它的缓冲区首地址送到冲区,它的缓冲区首地址送到DS、DX两个寄存两个寄存器中,其中段地址送器中,其中段地址送DS寄存器,偏移地址送寄存器,偏移地址送DX寄存器。寄存器。第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步【例例3-1】在显示器上显示字符串在显示器上显示字符串Welcome to TianHe college!DATAS SEGMENT;/数据段定义开始数据段定义开始 STRING DB Welcome to TianHe college!,0AH,0DH,$;/定义字符串,定义字符串,0AH,0DH表示显示字符串后,光
11、标可自动表示显示字符串后,光标可自动 回车换行,字符串必须以回车换行,字符串必须以$结束。结束。DATAS ENDS;/数据段定义结束数据段定义结束CODES SEGMENT;/代码段定义开始代码段定义开始ASSUME CS:CODES,DS:DATAS,SS:STACKS;/说明段和段寄存器之间的关系说明段和段寄存器之间的关系START:MOV AX,DATAS;/将数据段的段地址送寄存器将数据段的段地址送寄存器AX MOV DS,AX;/将将AX内容送内容送DS寄存器,即初始化寄存器,即初始化DS LEA DX,STRING;/将将STRING的偏移地址送的偏移地址送DX寄存器寄存器 第第
12、3 3章章 汇编语言程序设计初步汇编语言程序设计初步 MOV AH,9;/字符串显示子功能,字符串显示子功能,9号系统功能调用号系统功能调用 INT 21H;/系统调用系统调用 MOV AH,4CH;/返回返回DOS INT 21H;/系统调用系统调用CODES ENDS;/代码段定义结束代码段定义结束END START【例例3-2】从键盘输入字符串,把它放到缓冲区中存储起来。从键盘输入字符串,把它放到缓冲区中存储起来。DATA SEGMENT MAXLEN DB 100;/定义缓冲区的最大容量定义缓冲区的最大容量 ACLEN DB?;/定义实际读入的字符数定义实际读入的字符数 STRING
13、DB 100 DUP(?););/定义接收字符串空间定义接收字符串空间DATA ENDS第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步CODE SEGMENT MOV AX,DATA MOV DS,AX ;/数据段初始化数据段初始化 LEA DX,MAXLEN ;/送送 MAXLEN的偏移地址到寄存器的偏移地址到寄存器DX MOV AH,10;/10号系统功能调用号系统功能调用 INT 21H;/系统调用系统调用CODE ENDS运行程序时,若从键盘输入运行程序时,若从键盘输入“Thank you!”(共计(共计10个字符),则输入缓个字符),则输入缓冲区冲区MAXLEN各单元的内容
14、如图各单元的内容如图3-1所示。所示。图图3-1 存储空间分配示意存储空间分配示意第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步3.2 汇编语言源程序的设计的基本步骤汇编语言源程序的设计的基本步骤3.2.1 源程序的基本框架源程序的基本框架3.2.2 汇编语言源程序设计的基本步骤汇编语言源程序设计的基本步骤3.2.3 顺序结构的汇编语言源程序的编写顺序结构的汇编语言源程序的编写返回本章首页返回本章首页第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步3.2.1 3.2.1 源程序的基本框架源程序的基本框架 一个汇编语言源程序由两大部分组成的。其中主一个汇编语言源程序由两大部分组
15、成的。其中主要部分就是指令,位于代码段内,代码段可以有好几要部分就是指令,位于代码段内,代码段可以有好几个。其他部分是为指令服务的,包括数据的准备,存个。其他部分是为指令服务的,包括数据的准备,存储区域的划分和地址的标注。其他部分由数据段、堆储区域的划分和地址的标注。其他部分由数据段、堆栈段和扩展段组成。也各可以有好几个。段之间的顺栈段和扩展段组成。也各可以有好几个。段之间的顺序可以随意安排。但通常是其他部分(数据段、堆栈序可以随意安排。但通常是其他部分(数据段、堆栈段和扩展段等)在前,代码段在后。虽然可以定义多段和扩展段等)在前,代码段在后。虽然可以定义多个段,但由于段首址存放在个段,但由于
16、段首址存放在CPU的寄存器中,所以可的寄存器中,所以可以同时使用以同时使用6个段:代码段(个段:代码段(CS)、数据段()、数据段(DS)、)、堆栈段(堆栈段(SS)和)和3个扩展段(个扩展段(ES、FS和和GS)。扩展)。扩展段其实也是数据段,只是段地址在寄存器段其实也是数据段,只是段地址在寄存器ES、FS和和GS中。程序通过修改段寄存器的值实现段的切换。中。程序通过修改段寄存器的值实现段的切换。第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步一个程序至少包含一个代码段和一个程序至少包含一个代码段和END指令。其他段的指令。其他段的设置由程序的具体功能需要而定。程序较小时,可以设置由
17、程序的具体功能需要而定。程序较小时,可以不设置堆栈段。操作系统在装载不含堆栈段的程序时,不设置堆栈段。操作系统在装载不含堆栈段的程序时,会指定一个段作为堆栈段使用。这样,程序连接时,会指定一个段作为堆栈段使用。这样,程序连接时,LINK会产生一条警告信息:会产生一条警告信息:WARNING:NO STACK SEGMENT 但不会影响程序的运行,可以忽略它。但不会影响程序的运行,可以忽略它。程序中的段名可以是唯一的,也可以与其它段同程序中的段名可以是唯一的,也可以与其它段同名。在同一模块中,如果有两个段同名,则后者被认名。在同一模块中,如果有两个段同名,则后者被认为是前段的后续,这样,它们就属
18、同一段。当同一模为是前段的后续,这样,它们就属同一段。当同一模块出现两个同名段时,则后者的可选项属性要么与前块出现两个同名段时,则后者的可选项属性要么与前者相同,要么不写其属性而选用前者的段属性。者相同,要么不写其属性而选用前者的段属性。第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步【例例3-4】段寄存器与段的对应段寄存器与段的对应方法方法1:用一个段寄存器对应两个数据段用一个段寄存器对应两个数据段DATA1 SEGMENT ;/定义第一个数据段定义第一个数据段 b1 DB10h ;/定义变量定义变量DATA1,字节变量,字节变量DATA1 ENDS ;/第一个数据段结束第一个数据段
19、结束DATA2 SEGMENT ;/定义第二个数据段定义第二个数据段 b1 DB23h ;/定义变量定义变量DATA2,字节变量,字节变量DATA2 ENDS ;/第二个数据段结束第二个数据段结束CODE1 SEGMENT ;/定义第一个代码段定义第一个代码段ASSUMECS:CODE1,DS:DATA1 ;/指定段寄存器指定段寄存器START:MOV AX,DATA1 ;/指令开始,指令开始,MOV DS,AX ;/把数据段把数据段DATA1的段首址赋给段寄存器的段首址赋给段寄存器DS第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步 MOV BL,b1 ;/引用引用DS来访问来访问D
20、ATA1中的变量中的变量b1ASSUMEDS:DATA2 ;/说明说明DS与与DATA2建立联系建立联系MOV AX,DATA2;MOV DS,AX ;/把数据段把数据段DATA2的段值赋给段寄存器的段值赋给段寄存器DS /实现段的切换实现段的切换MOV AL,b2 ;/引用引用DS来访问来访问DATA2中的变量中的变量b2 CODE1 ENDS ;/代码段代码段CODE1结束结束END START ;/程序结束程序结束 在方法在方法1中,因为只使用一个段寄存器中,因为只使用一个段寄存器DS来对应两个数来对应两个数据段,所以,需要切换据段,所以,需要切换DS的对应关系。但我们也可以用段的对应关
21、系。但我们也可以用段寄存器寄存器DS和和ES来分别对应段来分别对应段DATA1和和DATA2,这样,方法,这样,方法1就可变成方法就可变成方法2。第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步方法方法2:用两个段寄存器对应两个数据段用两个段寄存器对应两个数据段DATA1 SEGMENT ;/定义第一个数据段定义第一个数据段 b1 DB10h ;/定义变量定义变量DATA1,字节变量,字节变量DATA1 ENDS ;/第一个数据段结束第一个数据段结束DATA2 SEGMENT ;/定义第二个数据段定义第二个数据段 b2 DB23h ;/定义变量定义变量DATA2,字节变量,字节变量DA
22、TA2 ENDS ;/第二个数据段结束第二个数据段结束CODE1 SEGMENT ;/定义第一个代码段定义第一个代码段ASSUMECS:CODE1,DS:DATA1,ES:DATA2 ;/指定段寄存器指定段寄存器START:MOV AX,DATA1 ;/指令开始,指令开始,MOV DS,AX ;/把数据段把数据段DATA1的段首址赋给段寄存器的段首址赋给段寄存器DS MOV AX,DATA2 MOV ES,AX ;/把数据段把数据段DATA2的段首址赋给段寄存器的段首址赋给段寄存器ES 第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步 MOV BL,b1 ;/引用引用DS来访问来访问D
23、ATA1中的变量中的变量b1 MOV AL,b2 ;/引用引用ES来访问来访问DATA2中的变量中的变量b2 CODE1 ENDS ;/代码段代码段CODE1结束结束END START ;/程序结束程序结束 我们还可以用我们还可以用“段组段组”来简化段寄存器的使用,把段来简化段寄存器的使用,把段DATA1和和DATA2组成一个数据段。所以,把方法组成一个数据段。所以,把方法2再改写成再改写成方法方法3的形式。的形式。方法方法3:用一个段组组成两个数据段用一个段组组成两个数据段GSEG GROUP DATA1,DATA2 ;/定义段组定义段组DATA1 SEGMENT ;/定义第一个数据段定义第
24、一个数据段第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步 b1 DB10h ;/定义变量定义变量DATA1,字节变量,字节变量DATA1 ENDS ;/第一个数据段结束第一个数据段结束DATA2 SEGMENT ;/定义第二个数据段定义第二个数据段 b2 DB23h ;/定义变量定义变量DATA2,字节变量,字节变量DATA2 ENDS ;/第二个数据段结束第二个数据段结束CODE1 SEGMENT ;/定义第一个代码段定义第一个代码段 ASSUMECS:CODE1,DS:GSEG START:MOV AX,GSEG ;/指令开始,指令开始,MOV DS,AX ;/把段组把段组GSE
25、G的段值赋给段寄存器的段值赋给段寄存器DS MOV BL,b1 ;/引用引用DS来访问来访问DATA1中的变量中的变量b1 MOV AL,b2 ;/引用引用DS来访问来访问DATA2中的变量中的变量b2第第3 3章章 汇编语言程序设计初步汇编语言程序设计初步 CODE1 ENDS ;/代码段代码段CODE1结束结束END START ;/程序结束程序结束 定义段组后,段组内各段所定义的标号和变量,除了定义段组后,段组内各段所定义的标号和变量,除了与定义它们的段起始点相关外,还与段组的起始点相关。与定义它们的段起始点相关外,还与段组的起始点相关。规定如下:规定如下:如果在如果在ASSUME伪指令
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 工学第3章 汇编语言程序设计初步 汇编语言 程序设计 初步
限制150内