汇编语言程序设计 第三章 ppt课件.ppt
《汇编语言程序设计 第三章 ppt课件.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计 第三章 ppt课件.ppt(132页珍藏版)》请在三一办公上搜索。
1、第三章 宏汇编语言,学习指导一、学习目标与要求正确而熟练地使用地址表达式和数值表达式熟悉常用的机器指令的指令助记符、功能及使用格式 区别机器指令语句和伪指令语句常用的伪指令功能、使用方法5.熟练掌握常用的DOS系统功能调用(1,2,9,10号调用),第三章 宏汇编语言,学习指导二、学习重点1.宏汇编语言中的表达式(1)符号常量(2)变量(数据在主存中的存储示意图)(3)地址表达式(4)属性定义算符(PTR,跨段前缀)(5)属性分离算符(SEG,OFFSET),第三章 宏汇编语言,学习指导二、学习重点2.常用的机器指令语句(1)数据传送指令(2)算术运算指令(3)位操作指令 要求掌握各指令的语法
2、规定,功能,最常用指令对标志寄存器的影响。,第三章 宏汇编语言,学习指导二、学习重点3.常用的伪指令(1)数据定义伪指令(2)符号定义伪指令(3)段定义伪指令(4)假定伪指令(5)源程序结束伪指令(6)汇编地址计数器$,第三章 宏汇编语言,学习指导二、学习重点4.常用的DOS系统功能调用 1,2,9,10 号 特别注意特殊字符的显示效果:0AH,0DH 特别注意$(24H)的作用。,第三章 宏汇编语言,学习指导三、学习难点变量、地址表达式的使用常用的机器指令的记忆、各指令的特殊要求汇编地址计数器$和假定伪指令正确理解DOS系统功能调用、注意特殊字符的显示效果,3.1 宏汇编语言的基本语法 3.
3、2 常用的机器指令语句 3.3 伪指令语句 3.4 常用的系统功能调用 3.5 总结,第三章 宏汇编语言,3.1 宏汇编语言的基本语法,常量与数值表达式常量数值表达式 变量、标号与地址表达式变量标号 地址表达式,(1)常量C语言中的常量定义:#define pi=3.1415926常量的基本概念:汇编时已有确定的数值的量。用途:.机器指令语句中的立即操作数;.也可作存贮器操作数的组成部分(位移量V);.在数据定义伪指令语句中给变量赋初值;分类:数值常量、符号常量,1常量与数值表达式,符号常量的定义:等价伪指令 EQU等号伪指令=使用:定义后直接引用符号名。注意:符号常量不分配存贮单元,只建立等
4、价代换关系,可出现在任何段。用EQU语句定义的符号常量在该程序中不能再重新赋值,而用“=”定义的符号常量可多次重新赋值,使用时,以最后一次定义的值为准。,1常量与数值表达式常量,例1,例2,例1:DATA SEGMENT USE16 NUMBER EQU 4;COUNT=35 TAB DW 70,80H,-5,NUMBER MOV AX,NUMBER MOV SI,COUNT MOV DX,TAB COUNT=10 MOV BX,COUNTECX MOV CX,TABECX;注意这两条指令的区别 符号常量特点:在汇编期间被代换成相应等价的数据;提高程序的可读性;便于随时修改程序中的参数。,4,
5、符号常量,35,TAB,70,80H,-5,NUMBER,NUMBER,COUNT,例2:.386;选择的处理器为386 DATA SEGMENT USE16;USE16定义了16 数据段 位的段 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
6、 CX,NUM2;循环计数器置初值 MOV AX,0;累加器置初值 MOV BX,NUM1;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,符号常量,NUM2,NUM1,1常量与数值表达式数值表达式,(2)数值表达式 数值表达式:常量与运算符(算术运算、逻辑运算、关系运
7、算)组成的有确定意义的式子。算术运算+、*、/、MOD(模除,取余数)、SHR(右移)、SHL(左移)。移位的特别说明:表示将二进制常量右移或左 移运算符右边所规定的次数(正整 数),所空出的位数均补0。,逻辑运算 逻辑乘:AND(与)逻辑加:OR(或)按位加:XOR(异或)逻辑非:NOT(非)关系运算 相等:EQ 不等:NE 小于:LT 大于:GT 小于等于:LE 大于等于:GE(3)数值表达式的运算时机 汇编期间进行,运算的结果为一数值常量,1常量与数值表达式数值表达式,2.变量、标号与地址表达式变量,(1)变量 变量:是数据段或附加数据段中一个数据存贮单元的名字,是这个存储单元的地址的符
8、号表示。可代表一批存储单元的首址。变量的属性 段属性:定义变量所在段的段首址,当访问该变量时该段首址应在某一段寄存器中,即为CPU当前可访问段;偏移地址:该变量所占存储单元到所在段的段首址的字节距离;类型:类型是指存取该变量中的数据所需要的字节数,变量的类型由定义该变量时所使用的伪指令确定;,变量的定义 一般在数据段或附加数据段中使用数据定义伪指令 DB、DW、DD、DQ和DT来定义 格式:变量名 数据定义伪指令 表达式,功能:定义了一变量,并开辟了由变量属性所决定的 一 片连续存储区,其存储区 所占字节数=表达式个数*变量的类型。变量的类型:存储单元的大小,由数据定义伪指令定义。,例,2.变
9、量、标号与地址表达式变量,数据定义伪指令:DB、DW、DD、DQ、DT指定变量的类型.BYTE(字节)DB.WORD(字)DW.DWORD(双字)DD.FWORD(3个字)DF.QWORD(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(表达式),表
10、示定义了n个数据存储单元(vi)上述(i)(v)组成的系列,各表达式之间用逗号隔开。,例,注意,表达式,DW 地址表达式 当地址表达式含变量名时,初值取变量EA;例:A DW B A,B为变量,则A的初始值为B的偏移地址DD 地址表达式 当地址表达式含变量名时,初始值取变量的EA,变量所在段的段首址 例:A DW B B为变量,则A的初始值为B的偏移地址,段首址,地址表达式,例: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)确定
11、了存储单元的个数。这一片连续的数据存储单元也称数据存储区,其类型由数据定义伪指令确定在定义一个数据存储区时:变量仅代表该区的第一个数据存储单元;整个数据存储区的类型均与变量相同;建立了一个以变量为首址的数据存储区或以变量为名的数组,表达式(注意),数据段定义的例子,例:数据段定义如下:DATA SEGMENT USE16 A DW M BUF DB AB,0DH,0AH CON EQU500H B DW 0FFAAH MARK=100H D DD BUF M DB 2 DUP(1),2 DUP(2,B)DB 123,1 DATA ENDS请画出数据段中的数据在主存中的存储形式。问题:上例中若分
12、别执行语句:MOV AL,BUF MOV AL,BUF+2 后AL的结果?指令 MOV EDX,M 是否正确?,BUF,A,D,M,B,注意,伪指令EQU及“=”不分配存贮单元;使用直接寻址方式时,变量的类型必须与 指令的要求相符;变量的段必须是当前段。,本例中的注意事项,2.变量、标号与地址表达式标号,(2)标号 标号:是机器指令语句存放地址的符号表示,也可以是子程序名,即子程序入口地址的符号表示;在代码段中定义和引用。标号的属性:标号的段属性:标号的段属性是指定义该标号所在段的段首址。标号的偏移地址:标号的偏移地址是指它所在段的段首址到该标号所代表存储单元的字节距离。标号的类型:分NEAR
13、(近)和FAR(远)两类型,近标号在定义该标号的段内使用,远标号无此限制。,3.变量、标号与地址表达式地址表达式,(3)地址表达式 地址表达式的定义 接触过的地址表达式 地址表达式的属性 地址表达式与数值表达式区别 特殊运算符(i)类型运算符PTR(ii)属性分离算符 使用地址表达式的注意事项,地址表达式的定义,地址表达式是由变量、标号、常量、寄存器(名加方括号)及一些运算符(数值表达式的运算符和特殊运算符)所组成的有意义的式子。,接触过的地址表达式,接触过的地址表达式:直接寻址方式、寄存器间接寻址方式、变址方式、基址加变址方式例如:MOV AX,BUFBX+SI MOV AL,BUF+2 M
14、OV AL,BUFBX MOV WORD PTR DS:1000H,3000H;,;源操作数为地址表达式,;目的操作数为地址表达式,地址表达式的结果是一偏移地址,因此具备段属性、偏移地址和类型。问题:变量定义中,给变量置初始值的地址表达式可以含寄存器符号加方括号吗?例如变量定义:A DW BX 是否正确?,地址表达式的属性,地址表达式的结果:是一偏移地址,它具有段属 性、偏移地址和类型,(一个表达式中一般只出现一 个变量或标号)数值表达式的结果:只有大小,无属性。在特殊情况下(没有用到寄存器、不作为地址访 问),地址表达式的值也可能仅表示一个数值(没 有属性)。例:在变量/常量定义中给变量/常
15、量赋值,或在OFFSET BUF+2语句中)NUM DW BUF1-BUF2(此时可以有多个变量或标号),地址表达式与数值表达式区别,格式:类型 PTR 地址表达式 类型可以是BYTE、WORD、DWORD、FWORD、NEAR、FAR 功能:用来指明紧跟其后的地址表达式的类型属性,但保持它原来的段属性和偏移地址属性不变或者使它们临时兼有与原定义所不同的类型属性。作用,特殊运算符类型运算符PTR,例,作用1:使语句中类型模糊的操作数类型变得明确 ADD BYTE PTR SI,5 ADD WORD PTR SI,5 作用2:临时改变某一操作数地址的类型,使得类型不一致的两地址变为一致。作用3:
16、PTR运算符还可以与EQU或等号“”等伪指令连用,用来将同一存储区地址用不同类型的变量或标号来表示。,注意这两条语句的区别,例,例,类型运算符PTR的三个作用,例 DATA1 DW 1122H,3344H MOV AL,BYTE PTR DATA1;问题1:将最后一条语句改为:MOV EAX,DWORD PTR DATA1 执行该语句后,(EAX)=?比较PTR的作用与C语言的强制类型转换的不同点?问题2:上述最后一条指令中,改变了DATA1的类型是否从此DATA1变为BYTE类型?问题3:是否可以用该运算符改变寄存器的类型?MOV EAX,DWORD PTR SI,将变量DATA1临时改为字
17、节类型,PTR作用2 例:,PTR作用3 例:,例:分析下列程序的执行结果 DATA1 DW 1122H,3344H DATA2 EQU BYTE PTR DATA1 MOV AL,DATA2 MOV BX,DATA1 用PTR算符建立了一个与变量DATA1有相同段 首址和偏移地址的变量DATA2,但它的类型为BYTE,DATA1,DATA2,;22AL,;1122BX,例:阅读下列程序段,指出其中的错误语句 DATA SEGMENTUSE16NUM DB 11H,22H,33H,44H LEN EQU$-NUM DATA END MOV AX,NUM MOV EAX,DWORD PTR NU
18、M MOV SI,OFFSET NUM ADD 2SI,LEN MOV BYTE PTR 2SI,A INC SI DEC BYTE PTRSI,定义符号常量LEN,其值为以变量NUM为首址的数据存储区所占的字节数,类型不一致,出错,临时改NUM双字,注意与C语言强制类型转换的区别(NUM)44332211HEAX,NUM的EASI,目的操作数类型不明确,出错,OPDSI2NUM2,41HNUM2PTR指定OPD类型为字节,类型不明确,出错,OPD-SINUM,由PTR指定为字节类型,注意,类型运算符PTR 例:,a.PTR临时赋予地址表达式的新类型只能在本语句中有效。b.不带方括号的寄存器符
19、号不是地址表达式,不能用PTR改变寄存器的类型,使用PTR注意事项:,格式:属性分离算符 变量或标号 功能:属性分离算符可分离出变量、标号的段、偏移地址、类型的属性值。运算结果为数值常量。a.取段址算符SEG 格式:SEG 功能:分离出其后变量或标号的段首址。b.取偏移算符OFFSE 格式:OFFSET 功能:分离出其后变量或标号的偏移地址。,例,特殊运算符属性分离算符,属性分离算符的例子,DATA SEGMENT USE16 A DW 50,100,B DB ABC DATA ENDS MOV AX,SEG B;MOV DS,AX MOV BX,OFFSET A;MOV DX,2BX;,A,
20、MOV AX,DATA,A的EABX,100DX,B,(1)指令中的地址表达式不允许出现不带方括号 的寄存器符号;例:MOV AX,SI+4 错误语句,MOV AX,SI+4 正确语句(2)在定义变量时,其后表达式不能带寄存器 符号和方括号;例:A DW SI+4,SI+4 错误(3)数值表达式中如果有变量和标号,均是取其EA参加运算。,例,使用地址表达式注意事项,请指出下列程序段中的错误:DW1122H,3344H MOV SI,OFFSET A MOV AX,A MOV BX,SI MOV DL,2SI MOV 4SI,55H,改为:MOV BYTE PTR 4SI,55HMOV WORD
21、 PTR 4SI,55H,例,3.2 常用的机器指令语句,3.2.1 80X86指令集及其特点 3.2.2 数据传送指令3.2.3 算术运算指令3.2.4 位操作指令,3.2.1 80X86指令集及其特点,1.80X86指令集 8086 100条基本指令 80386 170条指令 Pentium 300多条2.特点 原8086的16位操作指令都可扩展支持32位操作数;原有16位存储器寻址的指令都可以使用32位的寻址方式;在实方式和虚拟8086方式中段的大小只能为64KB,只有在保护方式下才使用32位段。,3.分类(1)数据传送指令一般数据传送指令 堆栈操作指令:PUSH、POP、PUSHF、P
22、OPF标志传送命令:SAHF、LAHFI/O指令地址传送指令(2)算术运算指令(3)位操作指令(4)串操作指令(5)程序控制指令(6)处理机控制指令标志的操作指令:STD、CLD;STI、CCI怎样记住常用的指令?格式、功能、特殊规定,对标志寄存器的影响,3.2.1 80X86指令集及其特点,4.再次强调的问题大多数双操作数的指令,具有相同的语句格式和操作规定格式:标号:操作符 OPD,OPS;注释指令:数据传送指令;算术运算指令 部分位操作指令;串操作指令操作规定:目的操作数与源操作数应有相同的类型。目的操作数不能是立即操作数。操作结束后,运算结果送入目的地址中,源操作 数并不改变。源操作数
23、和目的操作数不能同时为存储器操作数。,3.2.1 80X86指令集及其特点,(2)某些单操作数指令也有相同的语句格式和操作规定,格式:标号:操作符 OPD;注释指令:算术运算和位操作操作规定:操作对象为目的地址中的操作数,操作结束 后,将结果送入目的地址。操作数不能是立即操作数。,3.2.180X86指令集及其特点,3.2.2 数据传送指令,一般数据传送指令(1)传送指令(2)数据交换指令(3)查表转换指令XLAT 地址传送指令(1)传送偏移地址指令,一般数据传送指令 传送指令,A.一般传送指令 MOV 格式:MOV OPD,OPS 功能:(OPS)OPD(字或字节)说明:a.不能实现存贮单元
24、之间的直接数据传送,OPS、OPD不能同时采用存贮器寻址方式。例:将字变量BUF0中的内容传送至字变量BUF1中,只能用以下方式:MOV AX,BUF0MOV BUF1,AX,图,一般传送指令 MOV,MOV指令所允许的数据传送路径及类型,主存储器,立即数,CS DS,ES,FS,GS,SS,双字类型,双字类型,字节类型,字类型,字类型,字节类型,双字类型,字类型,b.不能向CS送数据;IP不能在任何语句中出现。例:“MOV CS,AX”、“MOV AX,IP”均为错误语句。c.OPS和OPD必须类型一致。例:MOV AX,CL 为错误语句。d.立即数不能直接传递至数据段或者附加数据段寄存器中
25、;问题:前面说过指令 MOV ECX,BL 是错误的,若确实想把BL寄存器的有符号数传送到ECX?,一般数据传送指令 传送指令,一般数据传送指令 传送指令,B.有符号数传送指令 格式:MOVSX OPD,OPS(move with sign-extend)功能:将源操作数的符号向前扩展成与 目的操作数相同的数据类型再送入目的地址。MOVSX ECX,BLC.无符号数传送指令 格式:MOVZX OPD,OPS(move with zero-extend)功能:将源操作数的高位全部补0,扩展成与 目的操作数相同的数据类型再送入目的地址中。,例,例 阅读下列程序段,指出运行结束后,EAX、EBX的值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 第三章 ppt课件 汇编语言 程序设计 第三 ppt 课件
链接地址:https://www.31ppt.com/p-2159223.html