汇编语言的基本概念.ppt_第1页
汇编语言的基本概念.ppt_第2页
汇编语言的基本概念.ppt_第3页
汇编语言的基本概念.ppt_第4页
汇编语言的基本概念.ppt_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章汇编语言的基本概念,概述汇编语言程序格式伪指令PC机常用系统功能介绍,汇编语言程序设计特点,汇编语言是一种用符号表示的、面向CPU指令系统的程序设计语言。汇编语言具有以下两个基本特点:可以更充分利用机器硬件的全部功能,发挥机器的长处;程序目标代码占用内存少,执行速度快,效率高,具有实时性;,汇编语言与高级语言,由于汇编的这种特点,汇编语言常用于编写计算机系统程序、实时通信程序和实时控制程序。但汇编语言程序依赖于机器硬件,其通用性和移植性都较差。相对于汇编语言,高级语言的编程方便快捷,通用性和移植性都较好,在一些涉及大量数据处理、人机界面等设计任务的应用程序中,采用高级语言编程更为合适。,从汇编源程序获得可执行程序的过程,为了能顺利完成汇编,用户必须为汇编程序提供一些额外的、与硬件有关的信息,如:程序使用的变量应分别存放在内存的哪个单元、堆栈应从内存的什么地址开始等等。,汇编语言源程序的一般结构分段式结构:数据段堆栈段代码段附加段,段,;段名1SEGMENT;一个段的开始语句1语句2段名1ENDS;一个段的结束;段名2SEGMENT;另一个段的开始段名2ENDS;另一个段的结束;其它段;END;源代码结束,源程序的基本框架,汇编语言的上机过程,1.源程序的建立可用多种编辑程序建立源程序,但要求源程序用ASCII码存储,程序扩展名为.ASM。如源程序文件EXAMP.ASM2.汇编生成目标文件(.OBJ)C:MASMEXAMP3.连接生成DOS格式的可执行文件(.EXE或.COM文件)C:LINKEXAMP,汇编语言程序格式,汇编语言中的语句语句是由各种符号(标记)及分隔符按照一定的规则组织起来的一个有序序列。标识符操作符操作数注释有三种基本语句:,宏指令语句汇编时进行宏代替,指令性语句可译为指令机器码,指示性语句(伪指令)仅作源程序管理用,指令性语句:即执行性语句(指令),与机器码一一对应,表示某种确定操作,包括四部分:标号:指令操作码操作数;注释例:AGAN:ADDAX,CX;加法指示性语句:即说明性语句(伪指令),不对应机器码,只为汇编提供所需信息,由四部分组成:名字伪指令操作数;注释例:SUMDB64H;变量SUM的值是64H宏指令:由伪指令定义的指令序列,包括宏定义、宏调用和宏扩展三部分,MASM汇编语句中的操作数,汇编语言中使用的操作数,可以是常数、寄存器、存储器、变量、标号或表达式。(1)常数固定值,无属性;,数字常量二进制数:以“B”结尾,如00001101B;八进制数:以“O”结尾,如725O;十六进制数:以“H”结尾,如0A12H;十进制数:以“D”结尾或无任何字母作结尾,如10D、10。,字符串常量字符串常量表示为包含在两个单引号之间的一连串ASCII字符。当单引号本身作为一个串元素时,需连写两个单引号。每个串元素的值定义为该元素所对应的1字节ASCII码值。Hello,thisisasampleprogram!还可用符号定义伪指令定义成标识符,即符号常量HEQUHello,thisisasampleprogram!,(2)变量通常指存放在存储单元中的值。变量的三个属性:段属性:指变量所在段的段基值,此值必须在一个段寄存器中。偏移属性:指变量所在地址与所在段的段首地址之间的地址偏移字节数(段内偏移量)。类型属性:指变量中每个元素所包含的字节数,类型包括字节变量(BYTE)、字变量(WORD)及双字变量(DWORD)等,(3)标号指令性语句(可执行语句)所在地址的符号表示。标号的三个属性:段属性:指标号所在段的段基值,偏移属性:标号所在地址与所在段的段首址之间的偏移地址。类型属性:指在转移指令中标号可转移的距离,也称距离属性。有NEAR和FAR两种。,注意:标号通常作为转移指令或CALL指令的目标地址。,(4)表达式由常数、寄存器、变量、标号与运算符组合而成的运算式。运算式在汇编时由汇编程序计算出结果,再作为指令中的一个操作数参与指令的执行。MOVAL,2+3汇编后变为MOVAL,5,保留字,汇编源程序中标识符不能使用的字符串所有指令助记符:如MOV、ADD等。寄存器名:包括16位和8位寄存器。如AL、DH、AX、CS、TF等。宏汇编程序规定的所有伪指令助记符:如ASSUME、DB、DW、DD等。宏汇编程序规定的其他助记符:BYTE、DUP、EQ、SEG等。,MASM中运算符,6类运算符算术运算符、逻辑运算符、关系运算符分析运算符、属性修改运算符、其他运算符,算术运算符,算术运算符的功能+加法运算符-减法运算符*乘法运算符/除法运算符MOD求余运算符SHL左移运算符SHR右移运算符,算术运算符,算术运算符的使用特点数值表达式中可使用所有算术运算符地址表达式仅使用+、-算术运算符算术运算符不影响标志位,例:完成80H+90H解:MOVAL,80H+90H;使用数值表达式;(AL)=10H、CF=不变MOVAL,80HADDAL,90H;使用加法指令;(AL)=10H、CF=1,关系运算符,关系运算符的功能,EQ相等关系NE不相等关系LT小于关系GT大于关系LE小于或等于关系GE大于或等于关系,关系运算符,关系运算符的使用特点在两个性质相同的操作数之间进行大小关系比较若关系正确为真(T),全1操作数若关系错误为假(F),全0操作数例:MOVAX,0A2HNE02H;汇编后得到“MOVAX,0FFFFH”,分析运算符,分析运算符(数值返回运算符)的功能,SEG符号地址段值属性返回符OFFSET符号地址偏移量值属性返回符TYPE符号地址中数据类型属性返回符LENGTHDUP重复次数返回符SIZE变量总字节数返回符,分析运算符,对存储器地址进行运算将存储器地址的三个属性,即段、偏移量、类型分离出来。SEG取变量或标号所在段的段寄存器值作为段基址,结果为16位值格式:SEG变量名或标号名OFFSET取变量或标号的段内偏移量,结果为16位值格式:OFFSET变量名或标号名,TYPE取变量或标号的类型所占字节数格式:TYPE变量名或标号名LENGTH取变量所含的数据元素个数,由DUP(重复操作符)定义数据个数时才有效。格式:LENGTH变量SIZE取分配给变量的字节个数,由DUP定义数据个数时才有效。格式:SIZE变量,符号地址与逻辑址址,定义数据段DATA如下:从实际地址02000H开始存数据即段地址为0200H段内偏移地址从0000H开始DATASEGMENTVAR1DB20,30VAR2DW2000H,3000HVAR3DD22003300HDATAENDS,段地址=0200H,0000H,0002H,0006H,VAR1,VAR2,VAR3,例,SEG和OFFSET应用,MOVBX,SEGVAR1;(BX)=0200HMOVBX,SEGVAR2;(BX)=0200HMOVBX,SEGVAR3;(BX)=0200HMOVBX,OFFSETVAR1;(BX)=0000HMOVBX,OFFSETVAR2;(BX)=0002HMOVBX,OFFSETVAR3;(BX)=0006H,SEG功能:返回符号地址的段逻辑值OFFSET功能:返回符号地址的偏移逻辑值,TYPE的应用特点,返回变量数据类型所含的字节数量MOVBL,TYPEVAR1;(BL)=1MOVBL,TYPEVAR2;(BL)=2MOVBL,TYPEVAR3;(BL)=4,LENGTH和SIZE的应用特点,定义数据段DATASEGMENTVAR1DB100DUP(?)VAR2DW100DUP(?)DATAENDS指令功能MOVBX,LENGTHVAR1;(BX)=100MOVBX,LENGTHVAR2;(BX)=100MOVBX,SIZEVAR1;(BX)=100MOVBX,SIZEVAR2;(BX)=200,变量定义数据个数,变量定义数据字节数,属性修改运算符的功能,PTR操作数重新定义类型运算符,属性修改运算符,属性修改运算符,PTR临时修改类型属性或强制说明操作数的类型。可用类型:BYTE、WORD、DWORD、NEAR、FAR等,例:数据段中定义了字变量VAR,则MOVAL,VAR;错误,类型不匹配改为:MOVAX,VAR或:MOVAL,BYTEPTRVAR,PTR的应用特点(在JMP指令中的应用),段内间接近转移CS不变、IP变段间间接远转移CS变、IP变,存储器中的16位值为段内IP目的地址JMPWORDPTRBXJMPWORDPTR2000H,存储器中的32位值为CS:IP目的地址JMPDWORDPTRBXJMPDWORDPTR2000H,PTR的应用特点(在变量定义中的应用),定义数据段代码段中使用,DATASEGMENTVAR1DB20H,30HDATAENDS,MOVAX,VAR1;错误,操作数类型不合MOVAX,WORDPTRVAR1;正确,返回字数据,伪指令和宏指令,段定义伪指令过程定义伪指令数据类型定义及存储器地址分配伪指令符号定义伪指令,1、段定义伪指令,1)、段定义语句SEGMENT/ENDS用于对DS、ES、SS、CS段的定义,格式:段名SEGMENT定位选择组合类型类别段名ENDS,注意:ENDS必须与SEGMENT成对出现,且段名必须一致。,定位类型段起始边界的确定PAGE、PARA、WORD、BYTEPAGE段起始地址最低8位为0PARA段起始地址最低4位为0WORD段起始地址最低位为0BYTE段起始地址为任意值,组合类型各段间的关系为连接程序提供本段与其它段的关系信息AT表达式:把本段装在表达式的值所指定的段地址上,例:用组合类型中的AT表达式指定段基值,DATASEGMENTAT1234HARRAYDB1,2,3DB4,5,6RESULTDW?DATAENDS,则MOVAX,SEGARRAY;AX=1234HMOVDS,AX;DS=1234HMOVSI,OFFSETARRAY;SI=0000H,1、段定义伪指令,2)、段指示伪指令ASSUME用来指示程序中定义的段与CPU中的各段寄存器之间的关系ASSUME伪指令仅用在代码段首行,段名SEGMENT相关约定ASSUMECS:段名,DS:段名,代码段内定义,指令集合段名ENDS,例:程序分别定义了DA、CD、ST段,则如下语句ASSUMECS:CD,DS:DA,SS:STCD段为代码段;DA段为数据段;ST段为堆栈段。,注意:使用ASSUME伪指令,仅仅告诉汇编程序哪个段寄存器被设定指向哪一个段,并没有给各段寄存器装入实际的段基值。要使段寄存器真正指向指定的段,还必须通过指令性语句将段基值装入相应的段寄存器;但CS寄存器除外,CS值是由操作系统将程序装入内存时自动设定的。,例:CDSEGMENTASSUMECS:CD,DS:DA,ES:DM,SS:ST;MOVAX,DAMOVDS,AX;为DS装入段基值,1、段定义伪指令,3)、程序结束伪指令END格式:END标号名指令中的标号名是该程序中第一条要执行的语句的标号名。标记汇编源程序结束。注意:END是伪指令助记符,不可缺省,放在源程序的最后一行,每个模块只有一个END。,2、过程定义伪指令,1)、过程定义伪指令PROC/ENDPPROCFAR、ENDP远过程定义伪指令PROCNEAR、ENDP近过程定义伪指令,过程名PROCFAR(NEAR)过程指令集合RET过程名ENDP,注:过程定义必须在代码段内,过程名是由用户设定的标识符,可在程序中作标号使用,至少有一个RET语句,程序其他地方可以用CALL指令调用这个过程。,例,COD1SEGMENTASSUMECS:COD1,;代码段中的其它语句(主程序)SUB1PROCFAR;名为SUB1的FAR过程开始RET;返回SUB1ENDP;SUB1结束SUB2PROC;名为SUB2的NEAR过程开始RET;返回SUB2ENDP;SUB2结束;可能定义的其它过程COD1ENDS;代码段结束,3、数据定义及存储器分配伪指令,数据定义及存储器分配伪指令用于为数据项分配存储单元并预置初值。,DB变量为字节数据类型(8位)DW变量为字数据类型(16位)DD变量为双字数据类型(32位)DQ变量为4字数据类型(64位),格式:变量名DB/DW/DD/DQ/DT,;注释,注意:变量名代表所定义变量的第一个单元的地址。,ONEDB8;给变量ONE分配一个字节,并预置初值为8TWODB?;字节变量TWO初值不定STDB96,20,?,57;以ST为首址连续分配4个字节的存储单元STRDBHowareyou?;定义字符串TWINDB5DUP(0FFH);连续分配5个字节,初值均为0FFHDB100DUP(?);连续分配100个字节单元,初值不定,例,3、数据定义及存储器分配伪指令,表达式的类型常数、数值表达式?表达式DUP表达式,1)常数、数值表达式,DBYTEDB10,10HDWORDDW1234H,5EABHDQWORDDQ1234567890ABCDEFHATEDB5*6,5-6,DBYTE,DWORD,DQWORD,ATE,2)?表达式表示只分配存储单元,但无确切的初值。,RESULTDB?,?ADDR1DW1234H,?,RESULT,ADDR1,3)带DUP的表达式格式:nDUP(初值)用于定义重复的数据项。,例:ARRDB2DUP(25H)VARDB2DUP(0,3DUP(A)ARR2DW100DUP(?),ARR,VAR,变量的使用如:ORG1000H;程序偏移地址定位VARDB2DH,3AH,45H,7CH,注意:变量名代表所定义的第一个单元的偏移地址。,则:MOVAL,VAR汇编后为MOVAL,1000H执行后:AL=2DH。,则:MOVAL,VAR+2汇编后为MOVAL,1002H;执行后:AL=45H。,4、符号定义语句,符号定义语句EQU、=,格式特点,符号EQU表达式符号=表达式,EQU不能重复定义=可重复定义,注:符号而非变量,故用EQU、=定义的符号不占用存储器单元,伪指令EQU,=的例子COUNTEQUCX;用COUNT代替CX通用寄存器MEQUMOV;用M代替MOV指令助记符,count=10MOVCX,count;(CX)=10count=count-1MOVBX,count;(CX)=9,5、宏指令,宏指令将程序中多处反复出现的若干条语句定义为一条指令,这条指令被称为宏指令。凡是在程序中出现这几条语句,即可用相应的宏指令代替。目的:简化汇编语言源程序的书写。宏指令的使用过程宏定义:对宏指令进行定义并取名宏调用:通过宏指令名字来调用宏展开:由宏汇编程序用宏定义中的指令来代替宏调用中的宏指令名,过程调用与宏调用的特点,相同点不同点,均应先定义,后调用,过程:执行程序时,调用过程代码,需保护、恢复现场;宏:汇编源程序时,展开宏指令,无断点问题;,过程调用与宏调用,宏调用,过程调用,源文件,汇编时,执行时,源文件,宏调用,宏调用,宏定义,过程调用,过程调用,过程定义,替换,替换,调用,调用,基本源程序结构,段的定义,一般方法,使用特点,先定义数据段DS、附加段ES、堆栈段SS后编写代码段CS,代码段CS必须数据段DS需要附加段ES重叠(可以与数据段DS同段)堆栈段SS可以省缺,基本源程序结构,段说明与段赋值,仅说明了DS段(CS段必须说明)ASSUMECS:CODE,DS:DATADS段赋值MOVAX,DATAMOVDS,AX,说明了DS段、ES段ASSUMECS:CODE,DS:DATA,ES:EDATADS段、ES段赋值MOVAX,DATAMOVDS,AXMOVAX,EDATAMOVES,AX,基本源程序结构,代码段(CS)的定义,汇编程序是在PC-DOS操作系统环境下执行的,必须保证程序执行完后,能回到DOS,可使用如下两种方法:1、FAR过程定义法;2、主程序定义法。,基本源程序结构,代码段(CS)的定义FAR过程定义法,CODESEGMENT;CODE为代码段名ASSUMECS:CODE,DS:DATASTARTPROCFAR;START为过程名PUSHDSMOVAX,0PUSHAX;正常返回DOS所需的段地址及偏移地址MOVAX,DATAMOVDS,AX;上述为固定写法,基本源程序结构,。程序正文(指令集合)RET;过程返回STARTENDP;结束过程定义CODEENDS;结束代码段ENDSTART;结束汇编,固定写法,基本源程序结构,代码段(CS)的定义主程序定义法,CODESEGMENT;CODE为代码段名ASSUMECS:CODE,DS:DATAMAIN:MOVAX,DATA;从MAIN开始汇编MOVDS,AX程序正文(指令集合)MOVAH,4CHINT21H;21H号中断,返回DOSCODEENDS;结束代码段ENDMAIN;结束汇编,完整汇编程序例程,例设有两个长为8字节无符号数分别存在以NUM1、NUM2为首址的连续内存单元中,将两数相加,结果存入SUM内存单元。,NUM1,NUM2,SUM,数据表,程序,;-数据段定义-DATASEGMENTNUM1DQ00120030FC218B4AH;数1NUM2DQ3E8144E96D701155H;数2SUMDQ?;结果单元DATAENDS;-代码段定义-CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;-循环初始化-LEABX,NUM1;BX指向数1的最低一个字LEASI,NUM2;SI指向数2的最低一个字LEADI,SUM;DI指向结果单元的最低一个字MOVCX,4;循环次数(4个字相加)CLC;清进位标志,程序,AGAIN:MOVAX,BX;字相加ADCAX,SIMOVDI,AX;存和INCBX;指针调整INCBXINCSIINCSIINCDIINCDILOOPAGAIN;循环控制;-MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART,PC/XT机中中断号分配,系统专用功能调用INT00HINT04H8259A芯片专用功能调用INT08H0FHBIOS专用功能调用INT10HINT1AHDOS专用功能调用INT20HINT27H用户保留功能调用,PC机常用系统功能介绍,DOS功能调用,DOS功能调用,DOS系统功能调用和BIOS系统调用,8088/8086除了将00H04H类型中断规定为专用中断以外,IBMPC把类型08H0FH中断分配给主板和扩展槽上的基本外设的中断服务程序(8259专用),类型10H-1AH作为ROM-BIOS中的I/O功能子程序调用使用,类型20H0FFH中断中的一部分分配给DOS操作系统使用,类型40H7FH中断留给用户开发时使用。DOS系统功能调用使用中断的方式调用DOS操作系统提供的功能子程序(80多个),实现磁盘的读写、内存管理、基本I/O管理等系统服务功能。DOS将所有功能子程序放在中断类型号为21H的中断服务程序中,并按顺序编号,这个编号就是子程序的功能号。因此,可通过INT21H指令,并通过不同的功能号调用指定的功能子程序,从而实现DOS系统功能调用。,注意:调用这些功能子程序时,程序中应包含以下三方面的内容:入口参数(有些子程序不需要);子程序的功能号送入AH寄存器;INT21H。调用结束后,如果要返回DOS操作系统,应在程序后加入退出语句:MOVAH,4CHINT21H,DOS常用系统功能调用示例(1)键盘输入并回显(功能号01)等待键盘按键,有键按下时,将相应键符的ASCII码读入AL中,同时回显在屏幕上。例如:MOVAH,01HINT21H(2)显示输出(功能号02)根据DL中的内容(字符的ASCII码)在屏幕上显示对应的字符。例如MOVAH,02HMOVDL,AINT21H,(3)字符串显示功能,功能号09H入口参数DS:DX存储字符串的首地址字符串结束符$,例显示数据段中定义的字符串,定义数据段编写代码段,DATASEGMENTBUFDBWelcometoyou!DB$DATAENDS,ASSUMECS:CODE,DS:DATALEADX,BUFMOVAH,09HINT21H,BIOS功能调用,固化在PC机内存较高地址的ROM区中,通常从地址0FE000H开始的8KROM中装有BIOS的例行程序,提供了系统加电自检、引导装入、主要I/O设备的处理以及接口控制等程序功能模块。与使用DOS中断调用非常类似,用户也可以通过INTN指令调用BIOS中断不同的是BIOS中断调用占用的中断类型号为10H1FH与DOS相比,BIOS是在更低的层次上为用户提供系统服务,例使用ROM-BIOS功能调用显示字符A。CODESEGMENTASSUMECS:CODESTART:MOVAL,AMOVBX,0MOVAH,0EHINT10HMOVAH,4CHINT21HCODEENDSENDSTART,由于汇编语言仅提供IN、OUT指令访问外设,我们可以利用ROM-BIOS和DOS操作系统提供的丰富的中断服务程序来访问外设。,用户中断服务子程序的装载,将用户中断服务子程序的入口地址放入中断向量表的相应位置的过程称为用户中断服务子程序的装载。常用的装载方法有三种,中断向量设置方法,编程写入法3、INT21H功能设置法,1、数据段定义法2、指令传送法,置中断向量功能读中断向量功能,用户中断服务子程序的装载,1、定义数据段与向量表重合DATASEGMENTAT0000H;定义数据段(DS)=0000HORGn*4;n为中断类型号SUPDWnoffset;中断服务程序的入口IPDWnseg;中断服务程序的入口CSDATAENDS,注:此方法未保存原中断向量,用户中断服务子程序的装载,2、程序初始化部分用数据传送指令DATASEGMENTAT0000HO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论