汇编语言程序设计-第三章-课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《汇编语言程序设计-第三章-课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 第三 课件
- 资源描述:
-
1、第三章 宏汇编语言 学习指导一、学习目标与要求一、学习目标与要求1.正确而熟练地使用地址表达式和数值表达式正确而熟练地使用地址表达式和数值表达式2.熟悉常用的机器指令的指令助记符、功能及使熟悉常用的机器指令的指令助记符、功能及使用格式用格式 3.区别机器指令语句和伪指令语句区别机器指令语句和伪指令语句4.常用的伪指令功能、使用方法常用的伪指令功能、使用方法5. 熟练掌握常用的熟练掌握常用的DOS系统功能调用系统功能调用(1,2,9,10号号调用调用)第三章 宏汇编语言学习指导二、学习重点二、学习重点1.宏汇编语言中的表达式宏汇编语言中的表达式 (1) 符号常量符号常量 (2) 变量变量 (数据
2、在主存中的存储示意图数据在主存中的存储示意图) (3) 地址表达式地址表达式 (4) 属性定义算符属性定义算符 (PTR,跨段前缀跨段前缀) (5) 属性分离算符属性分离算符 (SEG, OFFSET)第三章 宏汇编语言学习指导二、学习重点二、学习重点2.常用的机器指令语句常用的机器指令语句 (1) 数据传送指令数据传送指令 (2) 算术运算指令算术运算指令 (3) 位操作指令位操作指令 要求掌握各指令的语法规定,功能,最常用指要求掌握各指令的语法规定,功能,最常用指令对标志寄存器的影响。令对标志寄存器的影响。第三章 宏汇编语言学习指导二、学习重点二、学习重点3.常用的伪指令常用的伪指令 (1
3、) 数据定义伪指令数据定义伪指令 (2) 符号定义伪指令符号定义伪指令 (3) 段定义伪指令段定义伪指令 (4) 假定伪指令假定伪指令 (5) 源程序结束伪指令源程序结束伪指令 (6)汇编地址计数器汇编地址计数器$ 第三章 宏汇编语言学习指导二、学习重点二、学习重点4. 常用的常用的DOS系统功能调用系统功能调用 1,2,9,10 号号 特别注意特殊字符的显示效果:特别注意特殊字符的显示效果: 0AH, 0DH 特别注意特别注意 $ (24H) 的作用的作用。第三章 宏汇编语言学习指导三、学习难点三、学习难点1.变量、地址表达式的使用变量、地址表达式的使用2.常用的机器指令的记忆、各指令的特殊
4、要求常用的机器指令的记忆、各指令的特殊要求3.汇编地址计数器汇编地址计数器$和假定伪指令和假定伪指令4.正确理解正确理解DOS系统功能调用、系统功能调用、注意特殊字符注意特殊字符的显示效果的显示效果 3.1 宏汇编语言的基本语法 3.2 常用的机器指令语句 3.3 伪指令语句 3.4 常用的系统功能调用 3.5 总结第三章 宏汇编语言3.1 宏汇编语言的基本语法 1. 常量与数值表达式常量与数值表达式(1)(1) 常量常量(2)(2) 数值表达式数值表达式 2. 变量、标号与地址表达式变量、标号与地址表达式(1)(1) 变量变量(2)(2) 标号标号 (3)(3) 地址表达式地址表达式 (1)
5、 常量常量C C语言中的常量定义:语言中的常量定义:#define pi=3.1415926常量的基本概念:常量的基本概念:汇编时已有确定的数值的量汇编时已有确定的数值的量。用途用途: . 机器指令语句中的立即操作数机器指令语句中的立即操作数; ; . . 也可作存贮器操作数的组成部分也可作存贮器操作数的组成部分( (位移量位移量V)V); . . 在数据定义伪指令语句中给变量赋初值;在数据定义伪指令语句中给变量赋初值; 分类分类:数值常量数值常量、符号常量符号常量1常量与数值表达式符号常量符号常量的定义:的定义:等价伪指令等价伪指令 EQU等号伪指令等号伪指令 = 使用:使用:定义后直接引用
6、符号名。定义后直接引用符号名。 注意:注意: 符号常量符号常量不分配存贮单元不分配存贮单元,只建立等价代换关系,只建立等价代换关系, 可出现在任何段。可出现在任何段。 用用EQU语句定义的符号常量在该程序中语句定义的符号常量在该程序中不能再重不能再重新赋值新赋值,而用,而用“=”定义的符号常量定义的符号常量可多次重新赋值可多次重新赋值,使用时,以最后一次定义的值为准。使用时,以最后一次定义的值为准。1常量与数值表达式常量例例1例例2例例1: DATA SEGMENT USE16 NUMBER EQU 4; COUNT = 35 TAB DW 70,80H,-5,NUMBER MOV AX,NU
7、MBER MOV SI, COUNT MOV DX, TAB COUNT = 10 MOV BX, COUNTECX MOV CX, TABECX ; 注意这两条指令的区别注意这两条指令的区别 符号常量特点符号常量特点: 在在汇编期间汇编期间被代换成相应等价的数据;被代换成相应等价的数据; 提高程序的可读性;提高程序的可读性; 便于随时修改程序中的参数。便于随时修改程序中的参数。4符号常量35TAB70, 80H, -5, NUMBERNUMBERCOUNT例2: .386 ;选择的处理器为选择的处理器为386 DATA SEGMENT USE16 ;USE16定义了定义了16 数据段数据段
8、位的段位的段 SUM DW 0 ;SUM为字变量,初值为为字变量,初值为0 DATA ENDS STACK SEGMENT USE16 STACK 堆栈段堆栈段 DB 100 DUP(0) ;堆栈的大小为堆栈的大小为100个字节个字节 STACK ENDS 符号常量 CODE SEGMENT USE16 ASSUME CS:CODE, SS:STACK, DS:DATA NUM1 EQU 1 NUM2 = 50 START: MOV AX, MOV DS,AX MOV CX,NUM2 ;循环计数器置初值;循环计数器置初值 MOV AX,0 ;累加器置初值;累加器置初值 MOV BX,NUM1
9、;1BX代码段代码段 NEXT: ADD AX,BX ;(AX)+(BX)AX INC BX INC BX DEC CX ;(CX)-1CX JNE NEXT ;(CX)0转转NEXT MOV SUM,AX ;(CX)=0累加结果累加结果SUM MOV AH,4CH INT 21H CODE ENDS END START;数据段首址数据段首址 DS, DS必须由用户程序自己设置必须由用户程序自己设置;(BX)+2BX;返回返回DOS符号常量NUM2NUM11常量与数值表达式数值表达式(2) 数值表达式数值表达式 数值表达式数值表达式:常量与运算符:常量与运算符(算术运算、逻辑运算、算术运算、逻
10、辑运算、关系运算关系运算)组成的有确定意义的式子。组成的有确定意义的式子。 算术运算算术运算 +、*、/、MOD(模除模除, 取余数取余数)、 SHR(右移右移)、SHL(左移左移)。 移位的特别说明移位的特别说明:表示将二进制常量右移或左:表示将二进制常量右移或左 移运算符右边所规定的次数移运算符右边所规定的次数(正整正整 数数),所空出的位数均补,所空出的位数均补0。 逻辑运算逻辑运算 逻辑乘:逻辑乘:AND (与与) 逻辑加:逻辑加:OR (或或) 按位加:按位加:XOR (异或异或) 逻辑非:逻辑非:NOT (非非) 关系运算关系运算 相等相等: EQ 不等不等: NE 小于小于: L
11、T 大于大于: GT 小于等于小于等于:LE 大于等于大于等于:GE (3)数值表达式的运算时机数值表达式的运算时机 汇编期间进行汇编期间进行,运算的结果为一数值常量,运算的结果为一数值常量1常量与数值表达式数值表达式2. 变量、标号与地址表达式变量(1) 变量变量 变量变量:是数据段或附加数据段中一个数据存贮单元的名是数据段或附加数据段中一个数据存贮单元的名字字, 是这个存储单元的地址的符号表示。可代表一批存储是这个存储单元的地址的符号表示。可代表一批存储单元的首址。单元的首址。 变量的属性变量的属性 段属性段属性:定义变量所在段的段首址,当访问该变量时该定义变量所在段的段首址,当访问该变量
12、时该段首址应在某一段寄存器中,即为段首址应在某一段寄存器中,即为CPU当前可访问段当前可访问段; 偏移地址偏移地址:该变量所占存储单元到所在段的段首址的字该变量所占存储单元到所在段的段首址的字节距离节距离; 类型类型:类型是指存取该变量中的数据所需要的字节数类型是指存取该变量中的数据所需要的字节数, 变量的类型由定义该变量时所使用的伪指令确定变量的类型由定义该变量时所使用的伪指令确定; 变量的定义变量的定义 一般在数据段或附加数据段中使用数据定义伪指令一般在数据段或附加数据段中使用数据定义伪指令 DB、DW、DD、DQ和和DT来定义来定义 格式格式: 变量名变量名 数据定义伪指令数据定义伪指令
13、 表达式表达式, 功能功能: 定义了一变量,并开辟了由变量属性所决定的定义了一变量,并开辟了由变量属性所决定的 一一 片连续存储区,其存储区片连续存储区,其存储区 所占字节数所占字节数=表达式个数表达式个数*变量的类型。变量的类型。 变量的类型:变量的类型:存储单元的大小,由数据定义伪指令定义。存储单元的大小,由数据定义伪指令定义。 例例2. 变量、标号与地址表达式变量数据定义伪指令数据定义伪指令:DB、DW、DD、DQ、DT指定变量的类型指定变量的类型 .BYTE (字节字节) DB .WORD (字字) DW .DWORD (双字双字) DD .FWORD (3个字个字) DF .QWOR
14、D (4个字个字) DQ .TBYTE (10个字节个字节) DT 例:例: BUF DB ABCD12EF ; BUF的类型为字节的类型为字节 ARR DW 10,-60,189 ;ARR的类型为字的类型为字 TT DD 0A57BD36H ;TT的类型为双字的类型为双字数据定义伪指令变量定义中的表达式,指定了变量的初值:变量定义中的表达式,指定了变量的初值: (i) 数值表达式数值表达式 (ii) ASCII字符串字符串 (iii) 地址表达式地址表达式(只适用只适用DW和和DD两个伪指令两个伪指令) (iv) ?变量值不确定?变量值不确定 (v)重复子句重复子句: n DUP(表达式表达
15、式),表示定义了,表示定义了n个数个数据存储单元据存储单元 (vi)上述上述(i)(v)组成的系列,各表达式之间用逗号组成的系列,各表达式之间用逗号隔开。隔开。例例注意注意表达式lDW 地址表达式地址表达式 当地址表达式含变量名时,初值取当地址表达式含变量名时,初值取变量变量EA; 例:例: A DW B A,B为变量,则为变量,则A的初始值为的初始值为B的偏移地址的偏移地址lDD 地址表达式地址表达式 当地址表达式含变量名时,初始值取当地址表达式含变量名时,初始值取变量的变量的EA,变,变量所在段的段首址量所在段的段首址 例例: A DW B B为变量,则为变量,则A的初始值为的初始值为B的
16、偏移地址,段首址的偏移地址,段首址地址表达式例例: DB 3 DUP(A, 12H) A, 12H, A, 12H, A, 12H DB 2 DUP(A, 2 DUP(3), B) A, 3, 3, B, A, 3, 3, B重复子句:n DUP(表达式)表达式的个数表达式的个数(包括包括(v)中的重复因子中的重复因子n)确定了存储单元的个数。确定了存储单元的个数。 这一片连续的数据存储单元也称数据存储这一片连续的数据存储单元也称数据存储区,其类型由数据定义伪指令确定区,其类型由数据定义伪指令确定在定义一个数据存储区时:在定义一个数据存储区时: 变量仅代表该区的变量仅代表该区的第一个第一个数据
17、存储单元数据存储单元; 整个数据存储区的类型均与变量相同整个数据存储区的类型均与变量相同; 建立了一个以变量为首址的数据存储区或建立了一个以变量为首址的数据存储区或以变量为名的数组以变量为名的数组表达式(注意)数据段定义的例子例:例:数据段定义如下:数据段定义如下: DATA SEGMENT USE16 A DW M BUF DB AB,0DH,0AH CON EQU 500H B DW 0FFAAH MARK = 100H D DD BUF M DB 2 DUP(1),2 DUP(2,B) DB 123,1 DATA ENDS请画出数据段中的数据在主存中的存储请画出数据段中的数据在主存中的存
18、储形式。形式。问题:问题:上例中若分别执行语句:上例中若分别执行语句: MOV AL,BUF MOV AL,BUF+2 后后AL的结果?的结果?指令指令 MOV EDX,M 是否正确?是否正确?0CH0H41H42H0DH0FFH0AHDATA0AAH11242H231H42H32H33H BUF A D1 M2H0H B注意注意 伪指令伪指令EQU及及“=”不分配存贮单元;不分配存贮单元; 使用直接寻址方式时,变量的类型必须与使用直接寻址方式时,变量的类型必须与 指令的要求相符;指令的要求相符; 变量的段必须是当前段变量的段必须是当前段。本例中的注意事项2. 变量、标号与地址表达式标号(2)
19、 标号标号 标号:标号:是机器指令语句存放地址的符号表示,也可以是机器指令语句存放地址的符号表示,也可以是子程序名,即子程序入口地址的符号表示;在代码段中定是子程序名,即子程序入口地址的符号表示;在代码段中定义和引用。义和引用。 标号的属性:标号的属性: 标号的段属性标号的段属性:标号的段属性是指定义该标号所在段:标号的段属性是指定义该标号所在段的段首址。的段首址。 标号的偏移地址标号的偏移地址:标号的偏移地址是指它所在段的段:标号的偏移地址是指它所在段的段首址到该标号所代表存储单元的字节距离。首址到该标号所代表存储单元的字节距离。 标号的类型标号的类型: 分分NEAR(近)和(近)和FAR(
20、远)两类型,近(远)两类型,近标号在定义该标号的段内使用,远标号无此限制。标号在定义该标号的段内使用,远标号无此限制。3. 变量、标号与地址表达式地址表达式(3)地址表达式地址表达式 地址表达式的定义地址表达式的定义 接触过的地址表达式接触过的地址表达式 地址表达式的属性地址表达式的属性 地址表达式与数值表达式区别地址表达式与数值表达式区别 特殊运算符特殊运算符 (i)类型运算符类型运算符PTR (ii)属性分离算符属性分离算符 使用地址表达式的注意事项使用地址表达式的注意事项地址表达式的定义 地址表达式地址表达式是由变量、标号、常量、是由变量、标号、常量、寄存器寄存器(名加方括号名加方括号)
21、及一些运算符及一些运算符(数值表数值表达式的运算符和达式的运算符和特殊运算符特殊运算符)所组成的有意所组成的有意义的式子。义的式子。 接触过的地址表达式接触过的地址表达式接触过的地址表达式: 直接寻址方式、寄存器间接寻址方式、直接寻址方式、寄存器间接寻址方式、 变址方式、基址加变址方式变址方式、基址加变址方式例如:例如: MOV AX,BUFBX+SI MOV AL,BUF+2 MOV AL, BUFBX MOV WORD PTR DS:1000H, 3000H ;源操作数为地址表达式;源操作数为地址表达式;目的操作数为地址表达式;目的操作数为地址表达式 地址表达式的结果是一偏移地址,因此具备
22、地址表达式的结果是一偏移地址,因此具备段属性段属性、偏移地址偏移地址和和类型类型。 问题:问题:变量定义中,给变量置初始值的地址变量定义中,给变量置初始值的地址表达式可以含寄存器符号加方括号吗?表达式可以含寄存器符号加方括号吗? 例如变量定义:例如变量定义: A DW BX 是否正确是否正确?地址表达式的属性 地址表达式的结果:是一偏移地址,它具有段属地址表达式的结果:是一偏移地址,它具有段属 性、偏移地址和类型,性、偏移地址和类型,(一个表达式中一般只出现一一个表达式中一般只出现一 个变量或标号个变量或标号) 数值表达式的结果:只有大小,无属性。数值表达式的结果:只有大小,无属性。 在特殊情
23、况下在特殊情况下(没有用到寄存器、不作为地址访没有用到寄存器、不作为地址访 问问),地址表达式的值也可能仅表示一个数值,地址表达式的值也可能仅表示一个数值(没没 有属性有属性)。例例:在变量在变量/常量定义中给变量常量定义中给变量/常量赋值,常量赋值, 或在或在OFFSET BUF + 2语句中语句中) NUM DW BUF1 - BUF2 (此时可以有多个变量或标号此时可以有多个变量或标号)地址表达式与数值表达式区别 格式格式: 类型类型 PTR 地址表达式地址表达式 类型可以是类型可以是BYTE、WORD、DWORD、FWORD、NEAR、FAR 功能功能: 用来指明紧跟其后的地址表达式的
24、类型用来指明紧跟其后的地址表达式的类型属性,但保持它原来的段属性和偏移地址属性不变属性,但保持它原来的段属性和偏移地址属性不变或者使它们临时兼有与原定义所不同的类型属性。或者使它们临时兼有与原定义所不同的类型属性。 作用作用 特殊运算符类型运算符PTR例例 作用作用1:使语句中类型模糊的操作数类型变得明确:使语句中类型模糊的操作数类型变得明确 ADD BYTE PTR SI,5 ADD WORD PTR SI,5 作用作用2:临时改变某一操作数地址的类型,使得类:临时改变某一操作数地址的类型,使得类型不一致的两地址变为一致。型不一致的两地址变为一致。 作用作用3:PTR运算符还可以与运算符还可
25、以与EQU或等号或等号“”等等伪指令连用,用来将同一存储区地址用不同类型伪指令连用,用来将同一存储区地址用不同类型的变量或标号来表示。的变量或标号来表示。 注意这两条注意这两条语句的区别语句的区别例例例例类型运算符PTR的三个作用 例例 DATA1 DW 1122H,3344H MOV AL,BYTE PTR DATA1; 问题问题1:将最后一条语句改为:将最后一条语句改为: MOV EAX, DWORD PTR DATA1 执行该语句后,执行该语句后,(EAX)=? 比较比较PTR的作用与的作用与C语言的强制类型转换的不同点?语言的强制类型转换的不同点? 问题问题2:上述最后一条指令中,改变
展开阅读全文