书签 分享 收藏 举报 版权申诉 / 40
上传文档赚钱

类型汇编语言程序设计第四章课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4142802
  • 上传时间:2022-11-14
  • 格式:PPT
  • 页数:40
  • 大小:119.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《汇编语言程序设计第四章课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    汇编语言 程序设计 第四 课件
    资源描述:

    1、第四章第四章 高级汇编语言的语法高级汇编语言的语法l4.1.1 汇编语言语句格式1、机器指令的形式标号 指令前缀 助记符 操作数;注释例如:EXEC:REP MOVS DEST,SOURCE;(OPS)OPDl构成汇编语言程序的语句主要包括两类:指令与伪指令。它们之间的区别:指令指令是程序运行期间由CPU执行的,汇编后由对应的机器代码所取代。伪指令伪指令是不可执行的。它只是源程序汇编期间由汇编器处理的命令,用来指示汇编器为数据分配内存空间,或者为汇编器提供源程序结束或段定义等。2、伪指令语句的形式、伪指令语句的形式名字 伪操作命令 参数,参数 ;注释伪操作命令包括:符号定义:EQU,=,LAB

    2、EL;数据定义:DB,DW,DQ,DT,RECORD,ORG,SEGMENT,ASSUME,ORG模块定义:EXTERN,PUBLIC,NAME,END过程定义:PROC,ENDP4.1.2 数值表达式数值表达式l数值表达式是常量或运算符与常量的组合。表达式的值是在汇编阶段已经确定或得到的值。(1)整常量 MOV EAX,0FA5CH (2)字符串常量 MOV AX,Aa;AX=4161H (3)符号常量 COUNT=60*60 MOV ECX,COUNT ;COUNT=3600ECXl算法运算符共7种:+,-,*,/,MOD,SHR,SHLl对于语句:MOV AL,2可用下列语句替换:VAL

    3、 EQU 5MOV AL,VAL SHL 1 ;VAL=5=00000101B 逻辑右移位为:00000010B=2注意:移位运算符只对常量移位。而移位指令SHR,SHL只出现在指令码中,对寄存器或内存操作数进行移位操作。l实例:VAL=5 SHR AL,VAL SHL 1 ;若VAL=5,等价于语句SHR AL,10l逻辑运算符4种:AND,OR,XOR,NOT,分别对常量按位进行逻辑与,或,异或和非的运算。运算的结果也是一个已知的常量。注意与指令AND,OR,XOR,NOT的区别。上述指令放在操作码中,而操作符放在操作数中。例:PORT EQU 29H ;AND DX,PORT AND 0

    4、F0H ;DX表达式的值(20H)DXl关系运算符共6种:EQ(相等),NE(不等),LT(小于),GT(大于),LE(小于等于),GE(大于等于)l 对两个常量进行运算,结果是两特殊的常量值。如果关系成立(为真),结果为-1,即0FFFFH,如果关系不成立(为假),结果为0。l例:PORT EQU 3 MOV BX,(PORT LT 5)AND 18)OR(PORT GE 5)AND 69)语句被汇编成:MOV BX,184.1.3 标号变量与地址表达式标号变量与地址表达式标号:在代码段定义的指令的地址。三个属性值:段地址,EA,类型(FAR,NEAR)。变量:是内存中一个数据区的名字,作为

    5、指令的存储器操作数引用。三个属性值:段地址,EA,类型。类型由:DB,DW,DD,DQ,DT定义。如:count dw 5l地址表达式地址表达式形成的结果是存储器的地址,用来表标指令中的标号或变量操作数,有个属性:段地址,和类型。而数值表达式的结果只有大小没有属性。地址表达式可由变量、标号、常量、寄存器及一些运算符组成。l例1:ARRAYD DD 2,0,0,2,6,1,8,9,4,40 MOV EAX,ARRAYD+36 MOV ESI,36 SUB ESI,4 ADD EAX,ARRAYDESI l例 ARRAYW DW 1,2,3,4 DW 5,6,7,8 DW 9,10,11,12 M

    6、OV AX,ARRAYWBXSI等价于:MOV AX,ARRAYW+BX+SI或者MOV AX,ARRAYWBX+SI 4.1.4 特殊运算符特殊运算符1、属性替换运算符用来取代一个操作数的属性。(1)强制类型运算符PTR如:MOV byte ptr BX,5 JMP FAR PTR NEXTLABBX(2)段取代运算符:如:MOV DX,ES:BX+DIl2.属性分离运算符功能:只是分离变量或标号的属性值,而不取代有关的属性。SEG:取段地址。OFFSET:取偏移地址。如:ARRAYW DW 20 DUP(0)start:mov ax,seg ARRAYW mov ds,ax mov bx,

    7、offset ARRAYW lOFFSET与LEA指令的使用区别OFFSET是伪指令,在汇编阶段进行计算。所以OFFSET后面的地址表达式不能带寄存器,因为汇编阶段还不能计算出寄存器的值。如:MOV DX,OFFSET ARRAYWBX+SI;错误 LEA DX,ARRAYWBX+SIlTYPE运算符功能:取TYPE后面变量或标号的类型值。类型是字节、字、双字,则返回:1,2,4例如:MOV CL,TYPE ARRAYW ;ARRAYW为字类型,则返回。l3、返回数值运算符(1)LENGTH 取变量数据项个数。如果变量采用DUP定义,则LENGTH取DUP前面的重复系数。如果有多个DUP嵌套,

    8、仍取每一个DUP前面的系数否则LENGTH取值为例如:ARRAY DW 100 dup(?)MOV CX,LENGTH ARRAY ;CX=100 ARRAY DB 10 dup(1,20 dup(20H)MOV CX,LENGTH ARRAY ;CX=10 l(2)SIZE 取变量数据的字节数用来取变量定义中,有dup项时的字节数 设变量Y,则SIZE Y=LENGTH Y TYPE Y 例如:DW 100 DUP(0)TYPE Y=2 ,LENGTH Y=100 则SIZE Y=2*100=200 l(3)动态求数据项个数的方法对于:STRING DB“macro assemble”mov

    9、 cx,size string ;cx=1*1=1所以size在一些场合并不适用可以考虑动态求取例如:string db advanced assembly counts equ$-string ;counts=16 varw dw 9,8,7,6,5,4,3,2,1,0 countw equ ($-varw);countw=(10*2/2)=10 buffer db 10 dup(2 dup(8),A)countL equ$-buffer ;countL=(10*(2+1)=30l$符号表示:该条包含有$语句之后下一个可用的偏移值。l(4)字节分离运算符HIGH,LOW功能:从一个字数值或符

    10、号常量中得到高字节或低字节。如:WVAR EQU 0CA19H mov ah,HIGH WVAR mov al,LOW WVAR表达式运算符的优先级表达式运算符的优先级从高到低排列:(1)LENGTH,SIZE,WIDTH*,MASK*,以及(),中的项目。(2).(结构引用操作符);:(段取代运算符)(3)PTR,OFFSET,SEG,TYPE,THIS;HIGH,LOW(4)*,/,MOD,SHL,SHR;+,-(5)EQ,NE,LT,LE,GT,GE(6)NOT;AND;OR,XOR;SHORT4.2 汇编伪指令语句汇编伪指令语句l方式伪指令包括:.8086,.386,.386P等,用来

    11、指定CPU的类型例如:.386 code segment code ends .8086 code segment 注意:默认是8086方式。数据与符号定义伪指令数据与符号定义伪指令l1.定义符号伪指令包括EQU,=,LABEL,它们只用来定义名字,不分配存储空间格式:名字EQU 表达式 名字 =表达式 注意 (1)EQU的表达式可以是常量,变量名,标号,指令助记符,寄存器名;而=的表达式只能是数字表达式,主要用来定义符号常量 (2)同一个源程序,EQU符号名不能重复定义,=则可以 (3)同一个源程序中同一符号名,不能同时用EQU和=语句定义l 例如:NUMBER EQU 60 ;NUMBER

    12、=60 TIMES EQU NUMBER*24 ;TIMES=60*24=1440 BYTES DB 10 dup(?)WORDF EQU WORD PTR BYTES ;定义新名字,新类型 COUNT EQU CX ;COUNT为CX寄存器的同义名字 DEC COUNT ;相当于CX=CX-1 VALUE =88 VALUE =VALUE+1 ;VALUE=89 MOV CL,VALUE ;CL=89 COUNT =VALUE+1 ;COUNT的值=90 l(2)定义名字语句的LABEL格式格式:名字 LABEL 类型类型包括:byte,word,dword,near,far等功能:它可以把

    13、同一数据区的内容既看作字节,也可以作为字或双字等类型参与运算,以适应按不同类型的存取操作如:BARRAY LABEL BYTE WARRAY DW 50 dup(0)MOV AX,WARRAY48;取数组的第25个元素到AX MOV AL,BARRAY49;取数组的第50个字节值到AL.最后一条语句也可以用:MOV AL,BYTE PTR WARRAY49代替lLABEL还可以定义指向同一条指令NEAR和FAR类型的标号由其它程序段来调用FAR标号,在同一段内调用NEAR标号如:FARSUB LABEL FAR NEARSUB:MOV EBX,ECX JZ NEARSUB 在另一个程序段可用:

    14、JMP FARSUB 来执行 MOV EBX,ECX l2.程序模块名与结束语句(1)模块命名语句 格式:NAME 模块名模块语句可以在程序中不写出(2)源程序模块结束语句 END格式:END 表达式源程序模块的最后一条语句.如果有表达式的值,则为程序开始执行目标代码的地址。程序汇编后,指令指针IP或EIP指向这个入口地址。如:NAME Pentium_MASM61x codes segment start:codes ends end start注意:模块是独立的汇编单元,汇编程序只处理到END为止。后面的语句被忽略。3.数据定义及存储分配语句指令:DB(字节),DW(字),DD(双字),D

    15、F(长字),DQ(4字),DT(10字)格式:变量名 DB 初值表达式1,初值表达式2表达式可以是下列的形式:(1)数值表达式(2)?定义的数据项无法确定初值,即只分配存储存储单元。(3)ASCII字符串 多于两个字符的字符串可用DB定义(4)n DUP(?)重复运算符dup用来重复定义n个数据项,内容是未确定的。(5)n DUP(表达式,表达式)(6)n DUP(m DUP(表达式1),表达式2)多层嵌套DUP项,共有n*(m+1)项,初值由表达式确定。l 例4.1 定义单项变量 (1)定义单项变量VARN DB 88VARM DB 60*60STRC DW ABMAXN DD-214748

    16、3468STRS DD AB ;STRS的逻辑值00004142H,物理存储为42410000HQVAR DQ?TVAR DT 1024D ;为变量TVAR分配10个字节,初值为整数,即:00000000000000000400H=1024l例4.2 定义字符串变量STR1 DB A,B,C,DSTR2 DB ABCDEERROR DB syndax error!,13,10例4.4 定义数组或缓冲区变量BUF DB 98 dup(?)TABB DB 2 DUP(3 DUP(8),A)ARRA DW 26 DUP(41H)4.2.3 段定义与段管理伪指令段定义与段管理伪指令指令包括:SEGME

    17、NT,ENDS,ASSUME,GROUP,ORG等。段完整定义格式:段名 SEGMENT 使用类型边界类型连接类型类别 段名 ENDS其中,两处段名是相同的。SEGMENT表示段的开始,ENDS表示段的结束。表示可选项。l(1)使用类型 只有使用了.386,这个选项才作用。选项值:use16 表示该段按16位寻址,与8086方式 一样。use32 表示该段按32位寻址,地址指针48位,段地址16位,偏移地址32位。注意:在定义段时,如果用了.386等伪指令后,默认使用use32l(2)边界类型作用:指令段起始地址的类型。参数值:无 即省略边界,指系统默认值:节类型PARAPARA 段地址是16

    18、的倍数,最后4位是0000BYTE 段地址从任意地址开始(字节地址)WORD 段地址是2的倍数,即偶地址,最低位为0DWORD 段地址是4的倍数,最低两位为0PAGE 段地址是256的倍数,最低8位都为0l(3)连接类型作用:告诉LINK程序,本段与其它段的相互关系。参数值:无 省略连接符,表示本段有自己的段地址,与其它同名段无联系(独立段)。PUBLIC 同名同类型连接,LINK程序将本段与其它具有该类型且段名相同(可包括不同模块)的段连接在一起,组成一个物理段。具有一个段地址。STACK 指定堆栈段。LINK程序连接后的段为堆栈段,与PUBLIC处理相同。如果定义堆栈段没有说明STACK类

    19、型,LINK程序将发出警告”no stack”此外,还有COMMON,MEMORY,AT 表达式的形式。l例4.7 同名段的连接。程序段1DATAS SEGMENT PUBLICVAR1 DB 5DATAS ENDSCODES SEGMENTCODES ENDS程序段2DATAS SEGMENT PUBLICVAR2 DB 8DATAS ENDSCODES SEGMENTCODES ENDS汇编后,将生成一个段码段和数据段。数据依序存放。l(4)类别 类别是任何合法的名字。连接时,LINK程序将类别相同的段依次放在内存中。2.置汇编单元计数器语句置汇编单元计数器语句ORG格式:ORG 表达式

    20、ORG$+表达式表达式的值必须为常量。$表示当前地址。ORG的功能指定该语句后面的程序或数据存放的起始地址。例:ORG 400H DATA DB 20H,30H ;DATA的地址为400H例4.10 .386 DATAS_SEG SEGMENT use32 dword public data ORGAREA db?ORG$+100H VAR db 128 dup(99)DATAS_SEG ENDS CODE_SEG SEGMENT use32 dword public code .CODE_SEG ENDS l3.指示段寄存器语句 ASSUME格式1:ASSUME 段寄存器:段名/组名,段寄存

    21、器:段名/组名格式2:ASSUME 段寄存器:NOTHING格式3:ASSUME NOTHING 后两种方式取消段寄存器与段或组的联系。例4.1 code segment use16 para public code assume cs:codes,ds:datas,es:datas,ss:stack start:mov ax,datas mov ds,ax mov es,ax .ASSUME ES:NOTHING ;取消ES段寄存器寻址,再用ES就出错了。code endsl4.段组语句 GROUP功能:GROUP语句可以把模块中几个不同段合成一个组,并赋于一个组名,使它们都装在同一个物理段(64K)中。格式为:组名 GROUP 段名,连接时,如果超出64KB,则出错。例:CGROUP GROUP DATA1,DATA2 ASSUME DS:CGROUP,CS:CODES DATA1 SEGMENT WORD PUBLIC DATA1 VAR1 DW 10 DUP(?)START:MOV AX,CGROUP MOV DS,AX MOV BX,OFFSET CGROUP:VAR1

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:汇编语言程序设计第四章课件.ppt
    链接地址:https://www.163wenku.com/p-4142802.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库