




已阅读5页,还剩83页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020/5/3,第4章8086/8088汇编语言(格式),1,8086/8088和ARM核汇编语言程序设计,第4章8086/8088汇编语言(格式),2020/5/3,第4章8086/8088汇编语言(格式),2,4.1汇编语言和汇编程序的基本概念,4.2汇编语言源程序书写格式,4.3伪指令语句,第4章8086/8088汇编语言(格式),4.48086/8088汇编语言程序格式,4.5汇编语言的上机过程,2020/5/3,第4章8086/8088汇编语言(格式),3,汇编语言是一种面向CPU指令系统的程序设计语言,它采用指令系统的助记符来表示操作码和操作数,用符号地址表示操作数地址,因而易记、易读、易修改,给编程带来很大方便。用汇编语言编写的程序能够直接利用硬件系统的特性,直接对位、字节、字寄存器、存储单元、I/O端口等进行处理,同时也能直接使用CPU指令系统和指令系统提供的各种寻址方式编制出高质量的程序,这种程序不但占用内存空间少,而且执行速度快。,4.1.1汇编语言,4.1汇编语言和汇编程序的基本概念,2020/5/3,第4章8086/8088汇编语言(格式),4,用汇编语言编写的源程序在输入计算机后,需要将其翻译成目标程序,计算机才能执行相应指令,这个翻译过程称为汇编,完成汇编任务的程序称为汇编程序。汇编程序有基本汇编ASM(Assembler)和宏汇编MASM(MacroAssembler)两种。汇编程序以汇编语言源程序文件作为输入,并由它产生两种输出文件:目标程序文件和源程序列表文件。,4.1汇编语言和汇编程序的基本概念,4.1.2汇编程序,2020/5/3,第4章8086/8088汇编语言(格式),5,4.1汇编语言和汇编程序的基本概念,4.1.2汇编程序,汇编语言程序的建立和汇编过程,在计算机上运行汇编语言程序的步骤是:用编辑程序(任何一种文本编辑程序)建立ASM文件;用MASM程序把ASM文件转换成OBJ文件;用LINK程序把OBJ文件转换成EXE文件;用DOS命令直接键入文件名就可执行该程序;,2020/5/3,第4章8086/8088汇编语言(格式),6,4.1汇编语言和汇编程序的基本概念,4.1.2汇编程序,汇编程序的主要功能:(1)检查源程序,给出出错信息。(2)产生目标文件(.obj)和列表文件(.lst)。(3)展开宏指令。,2020/5/3,第4章8086/8088汇编语言(格式),7,连接的主要功能DOS运行一个可执行程序时,先要在内存中为该程序开辟一块或几块存储空间,然后在此加载并运行该程序。该存储空间是由系统当时的运行状态决定的,是不固定的,这就要求可执行程序是可重定位的,即它可以在内存的不同位置运行。汇编后生成的目标程序虽然加载了CPU可识别的机器代码,但它缺少系统所需要的重定位信息,所以并不能直接运行。目标程序必须经过连接程序的连接,生成附带重定位信息的可执行程序(后缀为.COM或.EXE的文件)才能运行。连接程序的第一个任务就是从目标模块中产生一个运行模块,并使其具有可重定位性。连接程序的第二个任务是可将几个目标模块连接成一个可执行的模块,并同样使其具有可重定位性。这样就可以将一个程序的几部分分别编写,汇编成几个目标模块,再通过连接程序将几个目标模块连接,生成一个完整的运行模块。连接程序可以发现源程序中的连接错误,如段的溢出或覆盖、匹配的模块、不存在或不匹配的标号、变量等。DOS下常用的连接程序有Link、Tlink等。,4.1汇编语言和汇编程序的基本概念,4.1.2汇编程序,2020/5/3,第4章8086/8088汇编语言(格式),8,4.2汇编语言源程序书写格式,4.3伪指令语句,第4章8086/8088汇编语言(格式),4.48086/8088汇编语言程序格式,4.5汇编语言的上机过程,4.1汇编语言和汇编程序的基本概念,2020/5/3,第4章8086/8088汇编语言(格式),9,4.2汇编语言源程序书写格式,4.2.1汇编语言源程序的分段结构,数据段堆栈段代码段,4.2.2汇编语言源程序的语句类型,指令语句伪指令语句宏指令语句,2020/5/3,第4章8086/8088汇编语言(格式),10,例:一个完整的段定义格式,STACKSEGMENTSTACK;定义堆栈段STACK.;分配堆栈段的大小STACKENDSDATASEGMENT;定义数据段.;定义数据DATAENDSCODESEGMENTCODE;定义代码段ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;程序开始MOVDS,AX.;程序代码MOVAX,4C00H;程序终止,返回DOSINT21HCODEENDS;代码段结束.;子程序代码ENDSTART;汇编结束,例:一个完整的段定义格式,4.2汇编语言源程序书写格式,2020/5/3,第4章8086/8088汇编语言(格式),11,stacksegsegmentparastackdb256dup(?)stacksegendsdata1segmentwordpublicconstdata1endsdata2segmentwordpublicvarsdata2ends,汇编语言程序结构,4.2汇编语言源程序书写格式,2020/5/3,第4章8086/8088汇编语言(格式),12,codesegsegmentassumecs:codeseg,ds:data1,es:data2,ss:stacksegstart:movax,data1;初始化DS和ESmovds,axmovax,data2moves,axmovah,4ch;程序结束,返回DOSint21hcodesegendsendstart,4.2汇编语言源程序书写格式,2020/5/3,第4章8086/8088汇编语言(格式),13,4.3伪指令语句,4.2汇编语言源程序书写格式,第4章8086/8088汇编语言(格式),4.48086/8088汇编语言程序格式,4.5汇编语言的上机过程,4.1汇编语言和汇编程序的基本概念,2020/5/3,第4章8086/8088汇编语言(格式),14,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,变量助记符表达式,表达式,;注释,1)变量名必须是一个合法的标识符,它可以写,也可以不写;2)助记符用于确定内存单元的数据类型,如:DB(字节)、DW(字)、DD(双字)、DF(6字节)、DQ(四字)、DT(10字节)。3)操作数是定义内存单元时的初值表达式,一个定义语句可以有多个初值表达式,各表达式之间必须用逗号,分开;如果某个存储单元没有初值表达式,则必须用一个问号?来表示;4)在定义语句的后面可以书写注释内容,也可以不写。,2020/5/3,第4章8086/8088汇编语言(格式),15,DATA_BYTEDB10,4,10H,?DATA_WORDDW100,100H,-5,?,DATA_BYTE,DATA_WORD,例:,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),16,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,表达式根据不同的伪操作有不同的形式:,DB伪指令:表达式可以是以下4种形式:字节常量以及不确定常量“?”;重复子句:数值表达式DUP(表达式,表达式);串常量;以上3种形式的任意组合。,DB伪指令,2020/5/3,第4章8086/8088汇编语言(格式),17,XDB10,34H,0FDH,?YDBHELLO!ZDB0,2DUP(2DUP(2,3),4),4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,X,Y,Z,2020/5/3,第4章8086/8088汇编语言(格式),18,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,表达式根据不同的伪操作有不同的形式:,DW伪指令:表达式可以是以下4种形式:除了是字数据外与DB伪指令的、同;地址表达式(此时取的是其偏移地址);一个或两个字符组成的串常量;以上3种形式的任意组合。,DW伪指令,2020/5/3,第4章8086/8088汇编语言(格式),19,ARRAYDW-1,1234H,2DUP(-32768)ADDRDWARRY+2STR1DWEH,LL,!O,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,ARRAY,ADDR,STR1,FFHFFH34H12H00H80H00H80H02H30H,48H45H4CH4CH4FH21H,HELLO!,23000H,设ARRAY的段地址为2000H,偏移地址为3000H,2020/5/3,第4章8086/8088汇编语言(格式),20,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,表达式根据不同的伪操作有不同的形式:,DD伪指令:表达式可以是以下4种形式:除了是双字数据外与DB伪指令的、同;地址表达式(此时分别将偏移地址和段地址存放到存储器中,偏移地址对应低地址);一个到四个字符组成的串常量;以上3种形式的任意组合。,DD伪指令,2020/5/3,第4章8086/8088汇编语言(格式),21,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,PARAMETER_TABLEDWPAR1DWPAR2INTERSEG_DATADDDATA1DDDATA2,PARAMETER_TABLE,PAR1的偏移地址,PAR2的偏移地址,INTERSEG_DATA,DATA1的偏移地址DATA1的段地址,DATA2的偏移地址DATA2的段地址,2020/5/3,第4章8086/8088汇编语言(格式),22,04,10,64,00,00,01,FB,FF,3C,00,00,00,FD,FF,00,00,0A,DATA1,DATA2,DATA3,10d,4,10h,DATA1DB10,4,10HDATA2DW100,100H,-5DATA3DD3CH,0FFFDH,例:,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),23,ARRAYDBHELLODBABDWAB,ARRAY,DW1DD12345678HDW2DD0abcd1243H,DW1,DW2,例,例:,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),24,重复说明符DUP从前面的内容里,我们知道了定义少量内存变量的定义形式,但如果在程序中要说明50个、100个、200个甚至更多的、同类型的内存变量时,若采用前面所学的方法,对它们一一加以说明显然是不可行的。为此,汇编语言提供了变量的重复说明符DUP,其说明的一般形式如下:repeat_countDUP(表达式,表达式,表达式)解释:repeat_count是重复次数,(表达式,表达式,表达式)是被重复的部分,“表达式”可以是存储单元的初值,也可以是含另一个DUP的式子。如果在表达式的括号中有多个表达式,那么,它们之间要用逗号,分开。,4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),25,01,02,-,00,01,02,-,-,00,BUF1,BUF2,-,100个字节,例:BUF1DB2DUP(0,1,2,?)BUF2DB100DUP(?),例:DB2DUP(0,2DUP(1,2),3),4.3.1数据定义及存储器分配伪指令,4.3伪指令语句,应为0,1,2,1,2,3,0,1,2,1,2,3,2020/5/3,第4章8086/8088汇编语言(格式),26,4.3.2符号定义伪指令,4.3伪指令语句,常用的符号定义伪指令有EQU、LABLE。,1)EQU伪指令格式:标识符EQU表达式功能:用表达式来定义标识符,即使得标识符等同于表达式。,COUNTEQU8;定义一个符号常量COUNT,使其等同于8ADDREQUSS:BXSI;使得ADDR等同于地址表达式SS:BXSI,例,作用是左边的符号名代表右边的表达式。注意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名,也不能被重新定义,2020/5/3,第4章8086/8088汇编语言(格式),27,4.3.2符号定义伪指令,4.3伪指令语句,2)伪指令格式:标识符=表达式功能:与EQU伪指令基本相同,但=伪指令可对同一标识符重新定义。,数值表达式在汇编时应该可以计算出数值,它不能含有向前引用的符号名称。用等号语句定义的符号可以被重复定义。例如:ABC=10+200*5;ABC的值为1010ABC1=5*ABC+21;ABC1的值为5071COUNT=1;COUNT的值为1COUNT=2*COUNT+1;COUNT的值为3,2020/5/3,第4章8086/8088汇编语言(格式),28,4.3.2符号定义伪指令,4.3伪指令语句,3)LABEL伪指令格式:标识符LABEL类型功能:定义标识符的类型。如果标识符是变量,则类型可以是BYTE、WORD、DWORD。如果标识符是标号,则类型可以是FAR、NEAR。,2020/5/3,第4章8086/8088汇编语言(格式),29,(1)label与伪指令(变量定义)语句连用,为变量定义类型属性,如:array_bytelabelbytearray_worddw10dup(?),4.3.2符号定义伪指令,4.3伪指令语句,注意:EQU、=伪指令仅仅是对程序中某些符号进行等价说明,并不实际分配存储单元。因此,EQU、=和LABEL伪指令定义的符号不占存储单元。,2020/5/3,第4章8086/8088汇编语言(格式),30,(2)label与指令语句连用,为标号定义类型属性,如:sub_farlabelfarsub:movax,bx,4.3.2符号定义伪指令,4.3伪指令语句,sub_far和sub两个标号就具有相同的逻辑地址,但具有不同的类型属性,前者为far属性,后者为near属性。,2020/5/3,第4章8086/8088汇编语言(格式),31,4.3.3段定义伪指令,4.3伪指令语句,段定义伪指令指示汇编程序如何按段组织程序和使用存储器。,1SEGMENT和ENDS伪指令格式:段名SEGMENT定位类型组合类型类别;段体段名ENDS,功能:SEGMENT和ENDS伪指令将程序分成若干个逻辑段。这些逻辑段根据其用途不同分为代码段、数据段、附加段和堆栈段,它们被分别装入由CS、DS、ES和SS所指定的物理段中。,2020/5/3,第4章8086/8088汇编语言(格式),32,(1)PARA:表示本段必须从能被16整除的地址处开始存放,即段起始地址最低四位必须是0。(2)BYTE:表示本段起始地址可以从任一地址处开始存放。(3)WORD:表示本段要从一个偶数地址处开始存放,即段起始地址的最低一位必须是0。(4)DWORD:该段必须从双字的边界开始,即段的起始地址的最低16进制数位必须为4的倍数。(5)PAGE:表示本段要从能被256整除的地址处开始存放,即起始地址的最低八位必须是0。默认为PARA,1)定位类型:说明段的起始地址应有怎样的边界值。PARA、BYTE、WORD、DWORD、PAGE,4.3.3段定义伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),33,(1)PRIVATE该段为私有段,在连接时将不与其他同名段合并(2)PUBLIC该段在连接时可以把不同模块的同名段相连接而形成一个段。(3)COMMON该段在连接时可以把不同模块中的同名段重叠而形成一个段,由于各同名段有相同的起始地址,所以会产生覆盖。(4)STACK把不同模块的同名段组合而成一个堆栈段。各段之间没有间隙。(5)MEMORY同PUBLIC(6)AT表达式使段地址是表达式所计算出来的16位值,CS除外。默认为PRIVATE,2)组合类型(combine_type)说明程序连接时段合并方法PRIVATE、PUBLIC、COMMON、ATexpression、MOMORY、STACK,4.3.3段定义伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),34,【例】有两个模块,各模块段定义如下模块1:DATA1SEGMENTPARAPUBLICM1DB45HDUP(0)DATA1ENDSDATA2SEGMENTPARACOMMONN1DB102HDUP(0)DATA2ENDSEND,模块2:DATA1SEGMENTPARAPUBLICM2DB104HDUP(11H)DATA1ENDSDATA2SEGMENTPARACOMMONN2DB105HDUP(0)DATA2ENDSDATA3SEGMENTT1DB50DUP(20H)DATA3ENDSEND,4.3.3段定义伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),35,3)类别在引号中给出连接时组成的段组的类型名。类别说明并不能把相同类别的段合并起来,在连接后形成的装入模块中,可使相同类别的段位置靠在一起。,4.3.3段定义伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),36,4.3.3段定义伪指令,4.3伪指令语句,2ASSUME伪指令格式:ASSUME段寄存器名:段名/组名,段寄存器名:段名/组名功能:该伪指令用于通知汇编程序,CS、DS、SS或ES被设定为哪些段的段地址寄存器,从而在汇编时能知道语句中引用的变量、标号或表达式所对应的段。格式:ASSUME段寄存器:NOTHING格式3:ASSUMENOTHING这两种格式取消前面由ASSUME指定的段寄存器与段或组的联系。,2020/5/3,第4章8086/8088汇编语言(格式),37,伪指令ASSUME建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。DATA1SEGMENTADB1,2,3DATA1ENDSCODESEGMENTASSUMEDS:DATA1,CS:CODE,其中段寄存器名必须是CS,DS,ES和SS中的一个。段名必须是由SEGMENT定义的段中的段名。,4.3.3段定义伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),38,段寄存器的装入,DS和ES的装入通过寄存器传送如:MOVAX,DATA1MOVDS,AXMOVAX,DATA2MOVES,AX,SS的装入(1)自动装入采用定义段时指定组合类型STACK参数,在ASSUME语句中建立SS的关系,这样就可以自动装入SS。,2020/5/3,第4章8086/8088汇编语言(格式),39,SS段寄存器的装入,stack1segmentparastackdw40hdup(?)stack1endscode1segmentassumecs:code1,ss:stack1,2020/5/3,第4章8086/8088汇编语言(格式),40,SS段寄存器的装入,(2)程序设置stack1segmentparadw40hdup(?)toplabelwordstack1endscode1segmentassumecs:code1,ss:stack1,movax,stack1movss,axmovsp,offsettop,2020/5/3,第4章8086/8088汇编语言(格式),41,CS和IP的装入,初始化时装入,根据END伪指令指示的地址END标号END语句的作用:告诉汇编程序,源程序结束指定程序运行时的起始地址,即:seg标号csoffset标号ip,2020/5/3,第4章8086/8088汇编语言(格式),42,CS和IP的装入,(2)自动修改CS和IP执行CALLFAR和RET指令执行JMPFAR指令响应中断及中断返回(IRET),2020/5/3,第4章8086/8088汇编语言(格式),43,段定义伪操作,完整的段定义格式举例,datasegment;定义数据段dataends;-extrasegment;定义附加段extraends;-stacksegment;定义堆栈段stackends;-codesegment;定义代码段assumecs:code,ds:data,es:extra,ss:stackstart:codeendsendstart,2020/5/3,第4章8086/8088汇编语言(格式),44,codesegmentmainprocfarassumestart:pushdsmovax,0pushaxretmainendpcodeendsendstart,codesegmentmainprocfarassumestart:movax,4c00hint21hmainendpcodeendsendstart,2020/5/3,第4章8086/8088汇编语言(格式),45,4.3.3段定义伪指令,4.3伪指令语句,3段组语句GROUP格式:段组名GROUP数据段名1,数据段名2功能:GROUP伪指令可以把模块中若干不同的段集合成一个组,并赋予一个组名,使它们都装在同一物理段(64KB)中。以便程序在访问各数据段时使用一个数据段寄存器DS。,data1segmentdata1endsdata2segmentdata2endsdatagroupgroupdata1,data2codesegmentassumecs:code,ds:datagroupstart:movax,datagroupmovds,ax,2020/5/3,第4章8086/8088汇编语言(格式),46,ORG伪指令格式:ORG表达式格式2:ORG$+表达式其中表达式的值必须为常量。功能:告知汇编程序,使其后的指令或数据从表达式的值所指定的偏移地址开始存放。,2020/5/3,第4章8086/8088汇编语言(格式),47,例:DATASEGMENTORG10VECT1DW47A5HORG20VECT2DW0C596HDATAENDS,A5,47,VECT1,0AH,14H,96,C5,VECT2,2020/5/3,第4章8086/8088汇编语言(格式),48,5程序计数器(地址计数器)$在汇编程序对源程序汇编的过程中,使用地址计数器来保存当前正在汇编指令的偏移地址。当开始汇编或每一段开始时,将地址计数器初始化为,以后汇编过程中,每处理一条指令就增加一个值,此值为该指令所需字节数。地址计数器的值用$表示,汇编语言允许用户直接用$引用地址计数器的值。,4.3.3段定义伪指令,4.3伪指令语句,2020/5/3,第4章8086/8088汇编语言(格式),49,程序(地址)计数器$:保存当前正在汇编的指令的地址JNE$+6;转向地址是JNE指令的首址+6JMP$+2;转向下一条指令$用在伪操作的参数字段:表示地址计数器的当前值,2020/5/3,第4章8086/8088汇编语言(格式),50,例:ARRAYDW1,2,$+4,3,4,$+4,又假定ARRAY分配的偏移地址为0074,则存储区分配情况如图所示。,00,02,00,7C,00,03,00,04,01,ARRAY,0074,00,82,00,0078,007E,lengthequ($-ARRAY)/2,2020/5/3,第4章8086/8088汇编语言(格式),51,4.3.4过程定义伪指令,4.3伪指令语句,一个过程由伪指令PROC和ENDP来定义格式:过程名PROC类型;过程体RET过程名ENDP,其中过程名是为过程所起的名称,不能省略,过程的类型由FAR(远过程,为段间调用)和NEAR(近过程,在本段内调用)来确定。如果缺省类型,则该过程就默认为近过程。ENDP表示过程结束。,2020/5/3,第4章8086/8088汇编语言(格式),52,4.3.5汇编结束伪指令END,4.3伪指令语句,格式:END表达式功能:该伪指令表示源程序的结束,令汇编程序停止汇编。因此,任何一个完整的源程序均应有END指令。其中表达式表示该汇编程序的启动地址。例如:ENDSTART;表明该程序的启动地址为START,源程序的最后必须有一条END语句可选的标号用于指定程序开始执行点,连接程序将据此设置CS:IP值,请同学们注意:程序终止和汇编结束是两码事,2020/5/3,第4章8086/8088汇编语言(格式),53,4.3伪指令语句,4.2汇编语言源程序书写格式,第4章8086/8088汇编语言(格式),4.5汇编语言的上机过程,4.1汇编语言和汇编程序的基本概念,4.48086/8088汇编语言程序格式,2020/5/3,第4章8086/8088汇编语言(格式),54,4.48086/8088汇编语言程序格式,一般情况下,汇编语言的语句可以由以下几部分组成:名字操作符操作数;注释例:ARRAYDB1,2,4,5,6,7,8;数据定义NEXT:MOVAX,BX;数据传送,2020/5/3,第4章8086/8088汇编语言(格式),55,4.4.1名字项,4.48086/8088汇编语言程序格式,名字项可以是标号或变量,它们都是用来表示本语句的符号地址。标号:在代码段中定义,后面跟上“:”。它有三种属性,即段、偏移和类型。变量:在数据段或附加段中定义,后面不跟冒号,它也有三种属性,即段、偏移和类型。,名字项,2020/5/3,第4章8086/8088汇编语言(格式),56,4.4.1名字项,段属性:标号和变量对应存储单元所在段的段地址。偏移属性:标号和变量对应存储单元所在段的偏移地址。类型属性:标号、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间;变量名的类型可以是BYTE(字节)、WORD(字)和DWORD(双字)等。,2020/5/3,第4章8086/8088汇编语言(格式),57,4.4.2操作数项,操作数项可以是常数、寄存器、标号、变量或由多个表达式组成。对于指令的操作数项一般给出操作数地址,可以是1个、个或没有。对于伪指令和宏指令,则给出它们的参数。表达式是常数、寄存器、标号、变量与一些操作符相组合的序列,它可以是数字表达式和地址表达式两种。在汇编期间,按照一定各优先规则对表达式进行计算后得到一个数值或一个地址。,4.48086/8088汇编语言程序格式,操作数项,2020/5/3,第4章8086/8088汇编语言(格式),58,ARRAYDW1,2,3,4,5,6,7ARYENDDW?MOVCX,(ARYEND-ARRAY)/2,ADDAX,ARRAY+(6-1)*2;符号地址常数有意义;时意义不明确,4.48086/8088汇编语言程序格式,4.4.2操作数项,算术操作符包括:+(加)、-(减)、*(乘)、/(除)和MOD(取模)。可以用于数字表达式和地址表达式中,但用于地址表达式中时,只有当其结果具有明确的物理意义时才有效果。,(1)算术操作符,常用的操作符,2020/5/3,第4章8086/8088汇编语言(格式),59,【例】用算术操作符进行数值表达式运算。NUM1EQU25*450;NUM1=50NUM2EQUNUM1/7;NUM2=7NUM3DBNUM1MOD7;NUM3=1VAR1DB1,2,3,4,5VAR2DB12345NUM4EQUVAR2-VAR1;NUM4=5,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),60,逻辑和移位操作符具体是:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、SHL(左移位)和SHR(右移)。逻辑操作符要求汇编程序对其前后两个操作数(或表达式)作指定的逻辑操作。移位操作符的格式:表达式SHL(或SHR)移位次数。例:,4.48086/8088汇编语言程序格式,4.4.2操作数项,OPR1EQU25;00011001BOPR2EQU7;00000111BANDAX,OPR1ANDOPR2,;ANDAX,1,MOVAX,0FFFFHSHL2,;MOVAX,0FFFCH,2020/5/3,第4章8086/8088汇编语言(格式),61,(3)关系操作符:关系运算符包括符号:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)和GE(大于等于)。关系操作符的两个操作数必须都是数字,或是同一段内的两个存储器地址。结果应为逻辑值,结果为真用0FFFFH表示;结果为假用0表示。【例】用关系运算符进行数值表达式运算。NUM1DB10LT5;NUM1=0NUM2DB0AAAAHGT7FFFH;NUM2=0FFFFHMOVAX,AEQ41H;0FFFFHAXMOVBX,NUM2LTNUM1;0BX,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),62,分析操作符(数值回送操作符):OFFSET、SEG、TYPE、LENGTH、SIZE,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),63,TYPE运算符格式:TYPE变量或标号功能:分离出其后变量或标号的类型。如果是变量,将返回该变量的类型对应字节数;如果是标号,则返回代表标号类型的数值。它们之间的关系见下表所示。,例:ARRAYDW1,2,3ADDSI,TYPEARRAY则加法指令被汇编成:ADDSI,2,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),64,LENGTH运算符格式:LENGTH变量功能:取出变量所含的数据存储单元个数。它返回重复操作符DUP中的重复数。如果有嵌套的DUP,则只返回最外层的重复数;如果没有操作符DUP,则返回1。【例】取出变量占存储单元个数。DATASEGMENTADBABCDEFBDW10DUP(1,2DUP(2)CDB3,20DUP(0)DATAENDSMOVAX,LENGTHA;1AXMOVBX,LENGTHB;10BXMOVCX,LENGTHC;1CX,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),65,SIZE变量格式:SIZE变量功能:取出变量所含的数据存储区大小。其返回值为:LENGTH变量*TYPE变量,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),66,4.48086/8088汇编语言程序格式,4.4.2操作数项,ARRAYDW100DUP(?)TABLEDBABCDADDSI,TYPEARRAY;ADDSI,2ADDSI,TYPETABLE;ADDSI,1MOVCX,LENGTHARRAY;MOVCX,100MOVCX,LENGTHTABLE;MOVCX,1MOVCX,SIZEARRAY;MOVCX,200MOVCX,SIZETABLE;MOVCX,1,2020/5/3,第4章8086/8088汇编语言(格式),67,OFFSET运算符格式:OFFSET变量或标号功能:分离出其后变量或标号的偏移地址。SEG运算符格式:SEG变量或标号功能:分离出其后变量或标号所在段的段地址。,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),68,【例】假设有下面变量定义:FIRSTDD12345678H,0;数据段的变量定义SCOREDW?,12HNAMEDB10DUP(10)MOVAX,SEGSCORE;代码段的指令MOVBX,SEGNAMEMOVCX,OFFSETSCOREMOVDX,OFFSETNAME由于SCORE和NAME在同一段中定义,所以,寄存器AX和BX的值是相等的。,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),69,4.48086/8088汇编语言程序格式,4.4.2操作数项,综合操作符或属性修改操作符号:PTR段操作符SHORTTHISHIGHLOW,2020/5/3,第4章8086/8088汇编语言(格式),70,4.48086/8088汇编语言程序格式,4.4.2操作数项,属性操作符PTR格式:类型PTR地址表达式在程序中,有时需要对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需要显式指定等,这时就需要强制属性操作符PTR。其中常用的类型有:BYTE、WORD、DWORD、NEAR和FAR等。例如指令MOVBX,1H是错误的,可改写成:MOVBYTEPTRBX,1H或MOVWORDPTRBX,1H,2020/5/3,第4章8086/8088汇编语言(格式),71,THIS格式:THIS类型功能:它可以像PTR一样建立一个指定类型(BYTE、WORD、DWORD等)的或指定距离(NEAR、FAR)的地址操作数。该操作数的段地址和偏移地址与下一个存储单元地址相同。如:WBUFFEREQUTHISWORDBUFFERDB20DUP(?)如果引用变量名WBUFFER,则是按“字”属性来访问;如果引用变量名BUFFER,则是按“字节”属性来访问。,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),72,例:STARTEQUTHISFARMOVCX,100,4.48086/8088汇编语言程序格式,4.4.2操作数项,MOV指令就有一个属性为FAR的地址START,这就允许其他段的JMP指令直接跳转到START来。,注:THIS、LABEL均可以使变量或标号具有不同的属性。,2020/5/3,第4章8086/8088汇编语言(格式),73,段操作符格式:段寄存器:地址表达式功能:用来表示一个标号、变量或地址表达式的段属性。如:MOVAX,ES:BX+SISHORT功能:用来修饰JMP指令中转向地址的属性。如:JMPSHORTNEXTNEXT:MOVAX,BX,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),74,HIGH和LOW格式:HIGH常量或地址表达式LOW常量或地址表达式功能:HIGH用来分离出其后16位常量或地址表达式的偏移量的高字节;LOW用来分离出其后16位常量或地址表达式偏移量的低字节。如:HIGH(1234H+100H)LOW1234H它们的选取结果分别为:13H和34H。,4.48086/8088汇编语言程序格式,4.4.2操作数项,2020/5/3,第4章8086/8088汇编语言(格式),75,各类运算符和常数、寄存器名、标号、变量一起共同组成表达式。在计算具有多个运算符的表达式值时,按以下规则操作:1、优先级高的先运算,优先级低的后运算。2、当优先级相同时,按表达式中从左到右的顺序进行运算。3、使用括号可以提高表达式运算的优先级。,4.48086/8088汇编语言程序格式,4.4.3表达式,2020/5/3,第4章8086/8088汇编语言(格式),76,运算符的优先级,4.48086/8088汇编语言程序格式,4.4.3表达式,2020/5/3,第4章8086/8088汇编语言(格式),77,4.3伪指令语句,4.2汇编语言源程序书写格式,第4章8086/8088汇编语言(格式),4.1汇编语言和汇编程序的基本概念,4.48086/8088汇编语言程序格式,4.5汇编语言的上机过程,2020/5/3,第4章8086/8088汇编语言(格式),78,2020/5/3,第4章8086/8088汇编语言(格式),79,开发过程1:源程序的编辑,源程序文件要以ASM为扩展名。源程序文件的形成(编辑)可以通过任何一个文本编辑器实现。本书介绍的MASM程序员工作平台DOS中的全屏幕文本编辑器EDIT,也可其他程序开发工具中的编辑环境。例如:EDITtest01.asm,2020/5/3,第4章8086/8088汇编语言(格式),80,开发过程2:源程序的汇编,汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。使用提供的汇编程序是MASM.EXE:C:MASMtest01.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(test01.obj),否则MASM将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,再进行汇编。,2020/5/3,第4章8086/8088汇编语言(格式),81,开发过程3:目标模块的连接,连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):C:LINKtest01.obj如果没有严重错误,LINK将生成一个可执行文件(test01.exe);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件。,2020/5/3,第4章8086/8088汇编语言(格式),82,开发过程4:可执行程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 强化训练自考专业(小学教育)试题含答案(模拟题)
- 火电电力职业鉴定考前冲刺练习试题带答案详解(预热题)
- 2026届云南省巍山县化学九年级第一学期期末综合测试模拟试题含解析
- 星兴蓝天安全培训课件
- 2026届上海市文来中学化学九上期末监测试题含解析
- 口腔健康主题活动讲解
- 2026届四川省达州市开江县化学九年级第一学期期中经典模拟试题含解析
- 2026届抚顺市重点中学化学九上期中学业水平测试模拟试题含解析
- 高效煤粉锅炉安装指南
- 2026届莆田市重点中学九年级化学第一学期期中达标检测试题含解析
- 航拍无人机转让协议合同
- 电影院转让协议合同
- 2025-2031年中国第三方认证行业发展前景预测及投资方向研究报告
- 2025年人力资源制度:【年终奖】员工超产奖金计算表
- 《跨境电子商务基础》高职全套教学课件
- 医院委托采购合同范本
- 癌性伤口护理个案分享
- 一般纳税人成本核算流程
- 建设6英寸硅基功率半导体晶圆生产线项目资金申请报告
- 软件项目管理规范
- 渣土运输车辆挂靠合同正规范本
评论
0/150
提交评论