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