第四章汇编语言程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第四章汇编语言程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 汇编语言 程序设计 课件
- 资源描述:
-
1、第四章第四章 汇编语言程序设计汇编语言程序设计 第一节第一节 汇编语言源程序汇编语言源程序汇编语言是用指令的助记符、符号地址、标汇编语言是用指令的助记符、符号地址、标号和伪指令等来书写程序号和伪指令等来书写程序 一、汇编语言源程序的结构一、汇编语言源程序的结构一个完整的汇编语言源程序通常由若干个逻一个完整的汇编语言源程序通常由若干个逻辑段辑段(SEGMENT)组成,包括代码段、数据组成,包括代码段、数据段、附加段和堆栈段,它们分别映射到存段、附加段和堆栈段,它们分别映射到存储器中的物理段上储器中的物理段上 例例4-1 两个字(两个字(A6B8H,206DH)相加相加的完整的汇编语言程序的完整的
2、汇编语言程序 DATA SEGMENT ;定义数据段定义数据段DATA1DW 0A6B8H ;定义被加数定义被加数DATA2 DW 206DH ;定义加数定义加数SUM DW 2 DUP(?);定义和定义和 DATAENDS ;数据段结束数据段结束CODESEGMENT ;定义代码段定义代码段ASSEME CS:CODE,DS:DATA;段寄存器说明段寄存器说明 START:MOVAX,DATAMOVDS,AX ;初始化初始化DSLEA SI,SUM ;存放结果的偏移地址送存放结果的偏移地址送SIMOVAX,DATA1 ;取被加数取被加数ADDAX,DATA2 ;两数相加两数相加MOVSI,A
3、X ;和送入和送入SUMMOV AH,4CH INT21H ;返回返回DOSCODEENDS ;代码段结束代码段结束ENDSTART ;源程序结束源程序结束 二、汇编语言语句类型及格式二、汇编语言语句类型及格式指令性语句的格式:指令性语句的格式:标号标号:前缀前缀 操作码操作码 操作数操作数,操作数操作数 ;注释注释 例如指令性语句:例如指令性语句:START:MOV AX,DATA ;将立即数将立即数DATA送累加器送累加器AX指示性语句的格式:指示性语句的格式:名字名字 伪操作伪操作 操作数操作数,操作数操作数,;注释注释 例如指示性语句:例如指示性语句:DATA1 DB 56H,78H,
4、9AH ;定义字节型数据,定义字节型数据,“DB”是伪操作是伪操作 指令性语句与指示性语句在格式上的区别指令性语句与指示性语句在格式上的区别:指令性语句中的指令性语句中的“标号标号”表示指令的符号地址,表示指令的符号地址,其后面通常要加上其后面通常要加上“:”。指示性语句中的指示性语句中的“名字名字”通常表示变量名、段名和通常表示变量名、段名和过程名等,其后不加过程名等,其后不加“:”。名字在多数情况下表。名字在多数情况下表示的是变量名,用来表示存储器中一个数据区的示的是变量名,用来表示存储器中一个数据区的地址。地址。指令性语句中的操作数最多为两个操作数,也可指令性语句中的操作数最多为两个操作
5、数,也可以没有操作数。以没有操作数。而指示性语句中的操作数可根据需要有多个,当操而指示性语句中的操作数可根据需要有多个,当操作数有不止一个时,相互之间用逗号隔开。作数有不止一个时,相互之间用逗号隔开。汇编语言语句中的操作数汇编语言语句中的操作数 三、数据项及表达式三、数据项及表达式操作数可以是寄存器、存储器单元或数据项。操作数可以是寄存器、存储器单元或数据项。而数据项又可以是常量、标号、变量和表达式而数据项又可以是常量、标号、变量和表达式 1常量常量 二进制常量二进制常量 十进制常量十进制常量 十六进制常量十六进制常量 字符串常量字符串常量 2标号标号 指令的标号是由编程者确定的,它不能与指令
6、的标号是由编程者确定的,它不能与指令助记符或伪指令重名,也不允许由数指令助记符或伪指令重名,也不允许由数字开头,标号的字符个数不超过字开头,标号的字符个数不超过31个。个。指令性语句中的标号指令性语句中的标号代表存放一条指令的代表存放一条指令的存储单元的符号地址存储单元的符号地址,其后通常加一个冒,其后通常加一个冒号。号。标号具有标号具有3种属性:种属性:段、偏移量和类型段、偏移量和类型。标号的段属性是就是标号所在段的段地址。标号的段属性是就是标号所在段的段地址。标号的偏移量就是标号所在段的起始地址到定义标号的偏移量就是标号所在段的起始地址到定义该标号的地址之间的字节数(即偏移地址)。偏该标号
7、的地址之间的字节数(即偏移地址)。偏移量是一个移量是一个16位无符号数。位无符号数。标号的类型有标号的类型有NEAR和和FAR两种。前一种标号称两种。前一种标号称为近标号,只能在段内被引用,地址指针为为近标号,只能在段内被引用,地址指针为2个字个字节。后一种标号称为远标号,可以在其他段被引节。后一种标号称为远标号,可以在其他段被引用,地址指针为用,地址指针为4个字节。个字节。3变量变量 变量名由字母开头,长度不超过变量名由字母开头,长度不超过31个字符。个字符。变量是存储变量是存储器中某个数据区的名字器中某个数据区的名字,因为数据区中的内容是可以改,因为数据区中的内容是可以改变的,因此变量的值
8、也可以改变。变的,因此变量的值也可以改变。变量在指令中可以作变量在指令中可以作为存储器操作数引用为存储器操作数引用。变量也具有变量也具有3种属性,即:段、偏移量和类型。种属性,即:段、偏移量和类型。变量的段属性就是它所在段的段地址。因为变量一般在存储器的数据变量的段属性就是它所在段的段地址。因为变量一般在存储器的数据段或附加段中,所以变量的段值在段或附加段中,所以变量的段值在DS或或ES寄存器中。寄存器中。变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字节变量的偏移量属性是该变量所在段的起始地址到变量地址之间的字节数。数。变量的类型有变量的类型有BYTE(字节字节)、WORD(字字)
9、、DWORD(双字双字)、QWORD(四字四字)、TBYTE(十个字节十个字节)等,表示数据区中存取操作对等,表示数据区中存取操作对象的大小。象的大小。使用变量时需注意以下两点:使用变量时需注意以下两点:变量的类型与指令的要求要相符。例如指令变量的类型与指令的要求要相符。例如指令MOV AX,VAR中,要求中,要求VAR必须定义为字类型变必须定义为字类型变量。量。在定义变量时,在定义变量时,变量名对应的是数据区的首地址变量名对应的是数据区的首地址。如果数据区中有多个数据,则对其他数据操作时,如果数据区中有多个数据,则对其他数据操作时,需修改地址。例如:需修改地址。例如:BUFFER DB 56
10、H,78H,9AH MOVAL,BUFFER+2 ;将将9AH送送(AL)4表达式表达式表达式是由常数、操作数、操作符和运算符组合而成表达式是由常数、操作数、操作符和运算符组合而成 表达式中常用的运算符有以下几种:表达式中常用的运算符有以下几种:算术运算符算术运算符算术运算符有算术运算符有(加加)、(减减)、*(乘乘)、/(除除)、MOD(取余取余)等等 逻辑运算符逻辑运算符逻辑运算符包括逻辑运算符包括AND(与与)、OR(或或)、NOT(非非)、XOR(异异或或)例如:指令例如:指令MOV AL,0A6H XOR 0CEH等价于等价于MOV AL,68H 关系运算符关系运算符关系运算符包括关
11、系运算符包括EQ(等于等于)、NE(不等于不等于)、LT(小小于于)、GT(大于大于)、LE(小于等于小于等于)、GE(大于等于大于等于)。关系运算符连接的必须是两个数值,或同一段中的关系运算符连接的必须是两个数值,或同一段中的两个存储单元地址。关系运算符的运算结果是一两个存储单元地址。关系运算符的运算结果是一个逻辑值,当关系不成立(为假)时,结果为个逻辑值,当关系不成立(为假)时,结果为0;当关系成立(为真)时,结果为当关系成立(为真)时,结果为0FFFFH 取值运算符取值运算符取值运算符用来分析一个存储器操作数的属性取值运算符用来分析一个存储器操作数的属性 OFFSET利用运算符利用运算符
12、OFFSET可以得到一个标号或变量的偏移地址可以得到一个标号或变量的偏移地址。例如:。例如:MOV SI,OFFSET DATA1 ;将变量将变量DATA1的偏移地址送的偏移地址送SI该指令等同于以下指令:该指令等同于以下指令:LEA SI,DATA1 SEG利用运算符利用运算符SEG可以得到一个标号或变量的段地址可以得到一个标号或变量的段地址。例如:。例如:MOV AX,SEG DATA ;将变量将变量DATA的段地址送的段地址送AX MOV DS,AX ;(DS)(AX)属性运算符属性运算符属性运算符属性运算符PTR用来指定其后的存储器操作数的类型。用来指定其后的存储器操作数的类型。例如:
13、例如:MOV AX,WORD PTRSI ;将将SI和和SI+1所指所指向的两个存储单元送向的两个存储单元送AX 段超越运算符段超越运算符运算符运算符“:”跟在某个段寄存器名(跟在某个段寄存器名(DS、ES、SS或或CS)之之后表示段超越,用来指定一个存储器操作数的段属性。后表示段超越,用来指定一个存储器操作数的段属性。例如:例如:MOV AX,ES:BX ;将将ES段中由段中由BX指向的字指向的字操作数送操作数送(AX)第二节第二节 伪指令伪指令 一、数据定义伪指令一、数据定义伪指令数据定义伪指令用来定义一个变量的类型,给存储数据定义伪指令用来定义一个变量的类型,给存储器赋初值,或给变量分配
14、存储空间器赋初值,或给变量分配存储空间 1定义字节定义字节(DB)DB(Define Byte)用来定义一个变量,并初始化其内存单元。用来定义一个变量,并初始化其内存单元。格式:格式:变量名变量名 DB 表达式表达式表达式可以是以下情况之一:表达式可以是以下情况之一:一个常数表达式;一个常数表达式;问号问号(?)作为非确定的初始值;作为非确定的初始值;一个或多个字符的字符串;一个或多个字符的字符串;重复子句:重复子句:重复次数重复次数 DUP(表达式表达式)例如:例如:DATA1 DB 11H,22H,33,44H,55H ;定义了定义了5个字节常个字节常数数 STRING1 DB A ;定义
15、了一个字符定义了一个字符 STRING2 DB How Are You?;定义了一个字符串定义了一个字符串SUMDB?;预置了一个不确定的值(变量)预置了一个不确定的值(变量)BUFFER DB 10 DUP(?);预置了预置了10个具有不确定值的单个具有不确定值的单元元 2定义字定义字(DW)DW(Define Word)定义一个字(两个单元)。定义一个字(两个单元)。DW伪操作后面的每个操作数都占用两个字节,伪操作后面的每个操作数都占用两个字节,在内存中存放时,低字节在前,高字节在后。在内存中存放时,低字节在前,高字节在后。DW的格式和表达式与的格式和表达式与DB类似。例如:类似。例如:D
16、ATA2 DW 1234H,5678H,9ABCH BUFFERDW 50 DUP(?)数据定义伪指令还有数据定义伪指令还有DD、DQ、DT 二、符号定义伪指令二、符号定义伪指令符号定义伪指令符号定义伪指令EQU用于给一个表达式赋予一个名用于给一个表达式赋予一个名字。字。以后在程序中凡是用到该表达式的时候,就以后在程序中凡是用到该表达式的时候,就用这个名字来代替;在需要修改该表达式的值时,用这个名字来代替;在需要修改该表达式的值时,只需在赋予名字的地方修改即可。其格式为:只需在赋予名字的地方修改即可。其格式为:名字名字 EQU 表达式表达式格式中的表达式可以是一个常数、符号、数值表达格式中的表
17、达式可以是一个常数、符号、数值表达式、地址表达式,甚至可以是指令助记符。式、地址表达式,甚至可以是指令助记符。例如:例如:COUNT EQU 100 ;常量常量 VAREQU 64*1024 ;数值表达式数值表达式 ADDR EQU DS:BP+8 ;地址表达式地址表达式 GOTO EQU JMP ;指令助记符指令助记符 EQU指令不能对同一个符号重复定义。若希望对同一个符号指令不能对同一个符号重复定义。若希望对同一个符号重复定义,可以用重复定义,可以用“”伪指令。例如:伪指令。例如:EMP=60H ;EMP代表数值代表数值60H EMP=80H ;在此将在此将EMP重新赋值,重新赋值,EMP
18、代表数值代表数值80H 三、段定义伪指令三、段定义伪指令段定义语句可使编程者按段组织程序和使用存储器。段段定义语句可使编程者按段组织程序和使用存储器。段定义伪指令有定义伪指令有SEGMENT和和ENDS 段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDS 1定位类型:表示此段的起始边界要求,可以是定位类型:表示此段的起始边界要求,可以是PAGE,PARA,WORD和和BYTE。它们表示如下的地址要求:它们表示如下的地址要求:PAGE=BPARA=B(隐含值)WORD=BBYTE=B分别称它们为以页、节、字、字节为边界。若该项省略,分别称它们为以页、节、字
19、、字节为边界。若该项省略,则其默认值位则其默认值位PARA。2组合类型:用来告诉连接程序本段与其他段的关系,分组合类型:用来告诉连接程序本段与其他段的关系,分别为别为NONE,PUBLIC,COMMON,AT表达式以及表达式以及STACK和和MEMORY。四、设定段寄存器伪指令四、设定段寄存器伪指令伪指令伪指令ASSUME告诉汇编程序一个段属于哪个段寄告诉汇编程序一个段属于哪个段寄存器。存器。当汇编程序遇到一个段名时,它就自动地当汇编程序遇到一个段名时,它就自动地引用给出的段寄存器将段名加以汇编。引用给出的段寄存器将段名加以汇编。格式为:格式为:ASSUME 段寄存器名段寄存器名:段名段名,段
20、寄存器名段寄存器名:段名段名,格式中的段寄存器名可以是格式中的段寄存器名可以是CS、DS、ES或或SS。在一个源程序中,在一个源程序中,ASSUME伪指令要放在可执行程序开始位伪指令要放在可执行程序开始位置的前面。置的前面。例如,以下程序是一个完整代码段的定义方法。例如,以下程序是一个完整代码段的定义方法。CODESEGMENT PARA PUBLIC CODEASSUME CS:CODE,DS:DATA,ES:EDATA,SS:STACKMOVAX,DATAMOVDS,AXMOVAX,EDATAMOVES,AXMOVAX,STACKMOVSS,AX CODEENDS 五、过程定义伪指令五、过
21、程定义伪指令过程就是子程序。过程就是子程序。调用过程和从过程返回的指令是调用过程和从过程返回的指令是CALL和和RET。过程定义伪指令的格式为:过程定义伪指令的格式为:过程名过程名PROC NEAR/FARRET过程名过程名ENDP例例4-2 编写一个软件延时的子程序编写一个软件延时的子程序。DELAYPROC ;定义一个过程定义一个过程PUSH BX ;保护保护BX原来的内容原来的内容PUSH CX ;保护保护CX原来的内容原来的内容MOV BL,50 ;外循环次数外循环次数NEXT:MOV CX,2000 ;内循环次数内循环次数WAITS:LOOP WAITS ;(CX)0则循环则循环DE
22、CBL ;修改外循环计数值修改外循环计数值JNZNEXT ;(BX)0则继续外循环则继续外循环POPCX ;恢复恢复CX原来的内容原来的内容POPBX ;恢复恢复BX原来的内容原来的内容RET ;过程返回过程返回DELAYENDP ;过程结束过程结束 六、结束伪指令六、结束伪指令END伪指令表示程序到此为止,告诉汇编程伪指令表示程序到此为止,告诉汇编程序汇编任务到此结束。其格式为:序汇编任务到此结束。其格式为:END 标号标号END伪操作后面的标号表示程序的开始地址。伪操作后面的标号表示程序的开始地址。第三节第三节 DOS功能调用功能调用 所有的所有的DOS系统功能调用都是利用软中断指令系统功
23、能调用都是利用软中断指令INT 21H来实现的。来实现的。INT 21H是一个具有是一个具有90多个子多个子功能的中断服务程序,这些子功能大致可分为设功能的中断服务程序,这些子功能大致可分为设备管理、目录管理、文件管理和其他等四个方面。备管理、目录管理、文件管理和其他等四个方面。INT 21H对每一个子功能都进行了编号称为功对每一个子功能都进行了编号称为功能号。能号。DOS系统功能调用的方法为:系统功能调用的方法为:AH功能号;功能号;在其他寄存器中放入该功能所要求的入口参数;在其他寄存器中放入该功能所要求的入口参数;INT 21H;INT 21H的几个最常用的功能的几个最常用的功能 1键盘输
24、入单字符键盘输入单字符功能号功能号1和功能号和功能号8都可以接收键盘输入的单字符,都可以接收键盘输入的单字符,输入的字符以输入的字符以ASCII码的形式放在累加器码的形式放在累加器AL中。中。其中其中1号功能有回显,即键盘输入的内容在放入累号功能有回显,即键盘输入的内容在放入累加器加器AL的同时,在显示其上也显示出来;的同时,在显示其上也显示出来;8号功号功能无回显。能无回显。键盘输入单字符的键盘输入单字符的功能功能常用来回答程序中的提示信常用来回答程序中的提示信息,或选择菜单中的可选项以执行不同的程序段息,或选择菜单中的可选项以执行不同的程序段。例4-3 从键盘输入“Y”或“N”来选择程序的
25、走向 SECLE:MOV AH,01H INT21H CMP AL,Y JEYES CMP AL,N JENOJMPSECLEYES:NO:2键盘输入字符串键盘输入字符串键盘输入字符串通过键盘输入字符串通过0AH号功能来实现。该功能要求用号功能来实现。该功能要求用户定义一个输入缓冲区来存放输入的字符串户定义一个输入缓冲区来存放输入的字符串 在调用本功能前,应把键入缓冲区的起始地址预置入在调用本功能前,应把键入缓冲区的起始地址预置入DX寄存器。寄存器。例例4-4 从键盘上输入字符串从键盘上输入字符串HOW ARE YOU?,并在串尾加结束标志并在串尾加结束标志$。DATA SEGMENTSTRI
展开阅读全文