汇编语言第4周教学课件

上传人:仙*** 文档编号:241540448 上传时间:2024-07-03 格式:PPT 页数:53 大小:929KB
返回 下载 相关 举报
汇编语言第4周教学课件_第1页
第1页 / 共53页
汇编语言第4周教学课件_第2页
第2页 / 共53页
汇编语言第4周教学课件_第3页
第3页 / 共53页
点击查看更多>>
资源描述
汇编语言第汇编语言第4周周56、死去何所道,托体同山阿。57、春秋多佳日,登高赋新诗。58、种豆南山下,草盛豆苗稀。晨兴理荒秽,带月荷锄归。道狭草木长,夕露沾我衣。衣沾不足惜,但使愿无违。59、相见无杂言,但道桑麻长。60、迢迢新秋夕,亭亭月将圆。汇编程序功能汇编程序对语句格式的要求不同的汇编程序对用汇编语言所写的源程序在格式上的要求不尽相同,以MASM为例:大小写无关。每条语句必须占行,但可以使用续行符“”。为了提高可读性,应该使各个域对齐。susujiangshu.edu6汇编语言程序设计汇编程序功能汇编程序特征汇编程序提供了许多伪操作和宏指令。通过使用这些具有类似于高级语言特征的、面向汇编器的伪指令,可以方便地控制程序的结构,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。汇编程序的主要功能1、检查汇编语言源程序2、指出源程序中的语法错误,并给出出错信息3、生成相应目标程序,并给出列表文件4、展开宏指令susujiangshu.edu7汇编语言程序设计汇编语言源程序格式一、汇编语言源程序的一般结构一、汇编语言源程序的一般结构源程序由若干个代码段、数据段、附加段和堆栈段组成。段之间的顺序可以随意安排。通常需要一个代码段、一个数据段和一个堆栈段,有时可包含一个附加段。susujiangshu.edu8汇编语言程序设计二、汇编语言源程序的语句格式二、汇编语言源程序的语句格式名字名字 助记符助记符 操作数操作数;注释注释名字项:名字项:应该是有效标识符,表示本语句的符号地址,可以是标号或变量。助记符项助记符项:包括指令、伪操作、宏指令的助记符。汇编程序将把指令翻译成机器语言,对伪操作将根据功能进行处理,对宏指令则按其定义展开。操作数项操作数项:由一个或多个表达式组成,可有多个操作数,以逗号分隔。表达式由常数、寄存器、标号、变量与一些操作符结合而成,汇编程序按照一定的优先 规则对表达式进行计算,得到一个数值或一个地址。注释项注释项:以分号开头的字符串,用来说明程序或指令的功能,使程序易于读懂;可单独使用的。汇编语言源程序格式susujiangshu.edu9汇编语言程序设计第4章汇编语言程序格式主要内容汇编程序功能标识符和表达式常用伪操作汇编语言源程序的格式汇编语言程序的开发过程susujiangshu.edu10汇编语言程序设计标识符和表达式一、有效标识符一、有效标识符在汇编语言中,标号、内存变量名、子程序名和宏名等都是标识符标识符最多由31个字母、数字及规定的特殊字符(?、_、$)等组成通常情况下,汇编语言不区分标识符中字母的大小写标识符不能用数字开头标识符不能是汇编语言的保留字,即不能用指令助忆符、伪指令定义符、寄存器名以及一些具有特殊含义的字符串等。例:MSG1、ERRMSG2、ASC1、asc2、ABCDH 是合法的标识符1a、ah、mov、ORG、0abcdh不是合法的标识符。susujiangshu.edu11汇编语言程序设计标识符和表达式二、表达式二、表达式数值表达式数值表达式是在汇编过程中能够由汇编程序计算出值的表达式,其组成部分在汇编时就能完全确定。它通常是一些常量的运算组合,包括算术、关系、逻辑运算等。如:-590 322*5/32 0abcdH+5 120+(321-90)mod 3有数值表达式数值表达式和地址表达式地址表达式之分。susujiangshu.edu12汇编语言程序设计以上表达式B1+1、B1+3和W1+2等都是地址表达式,其值所代表的地址位置如图所示,对应的存储内容分别为:11H、A和5678H。标识符和表达式若有定义:B1DB10H,11H,12HDBABCDW1DW1234H,5678H 10 11 12 A B C D 34 12 78 56 B1B1+3W1+2注意:地址表达式W1+1并不表示字变量W1之后一个字的存储单元,而是字变量W1之后一个字节开始的存储单元,W1+1对应的字节字节值是:12H;W1+1对应的字字值是:7812H。地址表达式地址表达式是计算存储单元地址的表达式,它可由标号、变量名和由括号括起来的基址或变址寄存器组成。其计算结果表示一个存储单元的地址表示一个存储单元的地址,而不是该存储单元的值。susujiangshu.edu14汇编语言程序设计第4章汇编语言程序格式主要内容汇编程序功能标识符和表达式常用伪操作汇编语言源程序的格式汇编语言程序的开发过程susujiangshu.edu15汇编语言程序设计常用伪操作(伪指令)分类:一、处理器选择伪操作二、段定义伪操作三、程序开始和结束伪操作四、数据定义伪操作 五、表达式赋值伪操作 六、地址计数器与对准伪操作七、基数控制伪操作通过伪指令可以定义汇编语言源程序的基本结构,如模块、段、子程序和宏等。susujiangshu.edu16汇编语言程序设计常用伪操作一、处理器选择伪操作一、处理器选择伪操作 在缺省方式下,MASM只承认8086指令。为了使用更高的CPU指令,必须使用处理器选择伪指令,主要包括:.8086.286/.286P.386/.386P.486/.486P.586/.586P.686/.686P说明:以上指令分别表示其后面的代码使用相应CPU的指令。其中,结尾有P P的表示使用保护方式下的指令系统。若使用32位CPU新增指令以及寄存器或内存寻址方式,则至少要用.386以上的伪指令。susujiangshu.edu17汇编语言程序设计常用伪操作二、段定义伪操作二、段定义伪操作 SEGMENT与ENDS 段定义伪操作一般形式:段名段名SEGMENT 对齐类型对齐类型 组合类型组合类型 使用类型使用类型 类别类别 段名段名ENDS说明:表示这些属性说明是可以省略的,但书写时要按顺序。语句序列语句序列通常是一组定义、分配存储单元的伪操作;对于代码段则是程序指令及伪操作。段名段名应该是合法标识符,两个段名要一样。对齐类型对齐类型表示当前段对起始地址的要求,连接程序按地址格式来定位段的起始地址;组合类型组合类型是告诉连接程序如何把不同模块中段名相同的段合并在一起;使用类型使用类型适用于386及后续机型,说明寻址方式的位数;类别类别是表示段的分类,连接程序利用该类别来调整同名、同类别的段,并使它们相邻。susujiangshu.edu18汇编语言程序设计段定义伪操作的属性说明-1对齐类型对齐类型起始地址(二进制)align功能说明最多空闲的字节数PARAxxxxxxxxxxxxxxxx0000下一个段首地址15BYTExxxxxxxxxxxxxxxxxxxx下一个字节地址0WORDxxxxxxxxxxxxxxxxxxx0下一个字地址1DWORDxxxxxxxxxxxxxxxxxx00下一个双字地址3PAGExxxxxxxxxxxx00000000下一个页地址127LINK.EXE在进行段定位时,会根据其定位类型进行定位,各段之间就有可能出现一些空闲字节,即可能浪费几个字节单元。PARA是一个适用于所有段类型的对齐类型,它也是缺省的对齐类型。BYTE和WORD通常用于数据段的定位。DWORD通常用于80386及其以后CPU代码段的定位。susujiangshu.edu19汇编语言程序设计组合类型组合类型Combine功 能 说 明PRIVATEPRIVATE/NONE/NONE表示当前段在逻辑上独立于其它模块,并有其自己的基地址。是缺省的组合类型。PUBLICPUBLIC/MEMORYMEMORY表示当前段与其它模块中同段名的PUBLIC类型段组合成一个段。组合的先后次序取决于LINK程序中目标模块排列的次序。在组合时,后续段的起始地址要按其对齐类型进行定位,因而同名段之间可能有间隔。COMMONCOMMON表示当前段与其它模块中同名段重叠,即它们的起始地址相同。最终段的长度是同名段的最大长度。由于段覆盖,前一同名段中的初始化数据被后续段的初始数据覆盖掉。STACKSTACK表示当前段是堆栈段,把不同模块中同名段组合成一个大堆栈段。AT AT 数值表达数值表达式式该数值表达式是当前段所指定的绝对起始地址的段地址。使用类型使用类型USE16使用使用16位寻址方式,实模式下使用,默认项。位寻址方式,实模式下使用,默认项。(use-type)USE32使用使用32位寻址方式位寻址方式段定义伪操作的属性说明-2susujiangshu.edu20汇编语言程序设计ENDSDATA1SEGMENTWORDPUBLICDataDATA1例1:上述段定义说明了该段的起始地址是下一个字地址、组合类型为PUBLIC、段类别是Data。类别类别(CLASS)是一个由程序员指定的用单引号括起来的字符串。如果一个段没有给出类别,那么这个段的类别就为空。典型的类别是Data和Code。段定义伪操作的属性说明-3CSEGSEGMENTPUBLICCode.CSEGENDS例2:susujiangshu.edu21汇编语言程序设计常用伪操作ASSUME 设定段与段寄存器关系伪操作一般形式:ASSUME segReg:seg-name,segReg:seg-name ASSUME segReg:NOTHING;某个段寄存器不与任何段相对应说明:明确指出段与段寄存器的缺省对应关系,即告诉汇编程序某个段的段地址在哪个段寄存器里。汇编器会根据变量所在的段,必要时自动插入段超越前缀。例:ASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG指出了CSEG、DSEG、ESEG和SSEG分别为代码段、数据段、附加段和堆栈段。susujiangshu.edu22汇编语言程序设计常用伪操作 GROUP段组定义伪指令一般格式:段组名段组名 GROUP GROUP 段名段名,段名段名,说明:把源程序模块中若干个段结合成一个组,并对该段组定义一个段组名。例:GSEGGROUP DATA1,DATA2;把段DATA1和DATA2定义成一个段组DATA1SEGMENTb1DB10hDATA1ENDSDATA2SEGMENTb2DB23hDATA2ENDSCODE1SEGMENTASSUMECS:CODE1,DS:GSEGSTART:MOVAX,GSEGMOVDS,AX;把段组GSEG的段值赋给段寄存器DSMOVBL,b1;引用DS来访问DATA1中的变量b1MOVAL,b2;引用DS来访问DATA2中的变量b2CODE1ENDSENDSTARTsusujiangshu.edu23汇编语言程序设计常用伪操作MODEL存储模型说明伪操作一般格式:.MODEL 存储模式存储模式,语言类型,语言类型,操作系统类型,操作系统类型,堆栈类型,堆栈类型 作用:用于说明存储器中代码段和数据段是如何安排的,根据不同组合形成七种存储模型存储模型:TINY、SMALL、MEDIUM、COMPACT、LARGE、HUGE和FLAT。伪指令.MODEL必须写在源程序的首部,且只能出现一次;汇编程序汇编程序将用该存储模式生成相应的ASSUME和GROUP语句。语言类型语言类型说明将被某种高级语言所调用:C、BASIC、FORTRAN、PASCAL等。操作系统类型操作系统类型说明程序运行的操作系统环境:OS_DOS(缺省值)、OS_OS2。堆栈类型堆栈类型说明堆栈距离:NEARSTACK和FARSTACK。susujiangshu.edu24汇编语言程序设计存储模式如果要用汇编语言编写被高级语言调用的子程序,那么该汇编程序的存储模式必须与该高级语言编译(或解释)程序所使用的存储模式相匹配。TINY:在汇编程序MASM6.11和TASM4.0,该存储类型是为编写COM文件类型而设置的。SMALL:所有的数据变量必须在一个数据段之内,所有的代码也必须在一个代码段之内。所有转移也都是段内转移。MEDIUM:所有的数据变量必须在一个数据段之内,但代码段可以有多个,转移可以是段间转移。COMPACT:数据段可以有多个,但代码段只能有一个。LARGE:数据段和代码段都可以有多个,但一个数组的字节数不能超过64KB。HUGE:数据段和代码段都可以有多个,一个数组的字节数也可以超过64KB。FLAT:该模式下程序仅含一个32位段,并且只能在80386及其以后的计算机系统中运行,将自动生成段寄存器说明语句。在FLAT存储模式下,程序将不使用段寄存器FS和GS。汇编程序在处理说明语句“.MODELFLAT”时,将自动生成下列段寄存器说明语句:ASSUMECS:FLAT,DS:FLAT,SS:FLAT,ES:FLAT,FS:ERROR,GS:ERRORsusujiangshu.edu25汇编语言程序设计常用伪操作简化的标准段定义伪操作一般格式:.CODE name;整个模型中仅一个代码段时可以省略段名.DATA;初始化的数据段.DATA?;未初始化的数据段.FARDATAname;缺省段名为FAR_DATA.FARDATA?name;缺省段名为FAR_BSS.CONST.STACK size;不指定堆栈段大小时,默认为1KB说明:不同存储模型下可以使用的标准段定义见p.123表4.1。段定义必须在.MODEL伪操作定义存储模型后,每个新段的开始就是上一段的结束。预定义符号data、fardata、stack等表示已定义的段地址,可直接引用。susujiangshu.edu26汇编语言程序设计常用伪操作源程序开始伪操作一般形式:NAME模块名TITLE标题text;text为汇编后列表文件的每一页上打印的标题SUBTTL/SUBTITLE子标题字符串说明:text最多60个字符。程序中若无NAME伪操作,就用text的前六个字符作为模块名。若程序中既无NAME又无TITLE伪操作,则将用源文件名作为模块名。源程序结束伪操作一般形式:END 起始地址说明:表示汇编语言源程序到此结束,对END之后的语句不再进行汇编。可选的地址指出程序执行的起始点,通常是标号或过程名。若程序包含多个源文件,则每个源文件的最后必须有一条END语句,但只有主模块文件可以指出执行的起始地址。三、程序开始和结束伪操作三、程序开始和结束伪操作susujiangshu.edu28汇编语言程序设计常用伪操作程序入口点和出口点定义伪操作一般格式:.STARTUP;在代码段的开始,用于自动初始化寄存器DS、SS和SP;.EXITreturn-value;用于结束程序的运行页面定义伪指令一般格式:PAGE行数,宽度;行数的取值范围为(10,255),宽度为(60,132)说明:指出每页的最大行数、每行的字符数,汇编程序可以根据要求生成列表文件。.MODEL SMALL.MODEL SMALL.STACK 128.STACK 128.DATA.DATAMSGMSGDBDBSimplified Segment Directives.$Simplified Segment Directives.$.CODE.CODEMOVMOV AX,DATAAX,DATA;取数据段的段取数据段的段值MOVMOVDS,AXDS,AX;把把给段寄存器段寄存器DSDS赋值MOVMOVDX,offset MSGDX,offset MSGMOVMOVAH,9H ;AH,9H ;在屏幕上在屏幕上显示一个字符串示一个字符串INTINT21H21HMOVMOVAX,4C00HAX,4C00HINTINT21H21HENDEND .CODE.CODE.STARTUP.STARTUP MOVMOVDX,offset MSGDX,offset MSGMOVMOVAH,9HAH,9HINTINT21H21H.EXIT.EXITENDENDsusujiangshu.edu29汇编语言程序设计常用伪操作四、数据定义伪操作四、数据定义伪操作 数据定义伪操作用来为数据分配内存空间,并设置相应内存单元的初始值。一般形式:变量名数据定义符操作数,操作数;注释说明:变量名变量名是一个符号地址,表示其后操作数的首地址;变量名为可选项,给出变量名只是为了按名存取其对应的内存单元。数据定义符数据定义符主要包括:DB(Define Byte):定义字节,后面的每个操作数占):定义字节,后面的每个操作数占1个字节。个字节。DW(Define Word):定义字,后面的每个操作数占):定义字,后面的每个操作数占1个字。个字。DD(Define Dword):定义双字,后面的每个操作数占):定义双字,后面的每个操作数占2个字。个字。DF(DefineFarword):定义6字节48位,可用来存放远地址。DQ(DefineQuadword):定义4字8字节,用于存放双精度浮点数。DT(DefineTenbytes):定义10字节,形成压缩BCD码。操作数操作数可以是常数、符号常量、表达式、?和DUP子句等。其中,?表示只保留内存空间,未定义初始值。DUP子句的格式为:子句的格式为:重复次数DUP(操作数,操作数)susujiangshu.edu30汇编语言程序设计例1:COUNTER DB6 DBA,D,0Dh,$TABLE DB1,3,5,7,9,11 存储示意图:06 41 44 0D 24 01 03 05 07 09 0B 例2:MSG1DBI am a student例3:Word1DW89H,1909H,-1 DW0abcdH,?,0 COUNTER TABLE 89 00 09 19 FF FF CD AB-00 00 49 20 61 6D 20 61 20 73 74 75 64 65 6E 74 I a m a s t u d e n tsusujiangshu.edu31汇编语言程序设计常用伪操作补充说明:变量可以定义在任何段(包括代码段),但一般定义在数据段。用DW/DD/DQ/DF/DT定义的数据在内存按“低字节在低地址”的方式存放。当DW与DD后的操作数是地址表达式时,分别表示其16位偏移地址和32位分段地址(段地址在高字,偏移地址在低字)。例:源程序的基本框架.386;以下是数据段和堆栈段的定义;以下是数据段和堆栈段的定义DSEG SEGMENT USE16DW?,12H ;数据定义数据定义DSEG ENDSESEG SEGMENT USE16DB 100 DUP(0,2 DUP(1,2),3),101HESEG ENDSSSEG SEGMENT STACK USE16 DW 512 DUP(?)SSEG ENDSESEG001000H011001H021002H011003H021004H031005H001006H011007H021008H011009H02100AH03100BH001252H011253H021254H011255H021256H031257H;这是代码段例;这是代码段例CSEG SEGMENT USE16 ASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEGSTART:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX ;指令序列指令序列 MOV AH,4CH INT 21H;程序退出,返回程序退出,返回DOSCSEG ENDS END STARTsusujiangshu.edu32汇编语言程序设计常用伪操作五、表达式赋值伪操作五、表达式赋值伪操作 一般格式:表达式名EQU表达式;不可重复为同一表达式名指定符号名=常数表达式功能:前者给表达式指定一个等价的符号名,后者给符号名赋具体的值。说明:EQU不能重复定义;而=可重复定义,其作用域从定义点到重新定义之前。EQU后的表达式可以是数值、字符串、寄存器名、指令助记符等。=后的表达式只能是常数,对于字符或字符串,汇编时按整数处理。例:COUNT=20MOV CX,COUNT;等价于MOV CX,20DATA1EQUBP+8ADDREQUDATA1+256susujiangshu.edu33汇编语言程序设计常用伪操作六、地址计数器与对准伪操作六、地址计数器与对准伪操作汇编器在将源程序转换为目标程序的过程中,每汇编一个段,都需要跟踪其中代码或数据的偏移地址,这就是地址计数器。地址计数器的值表示当前偏移地址,用$表示。在缺省情况下,段的偏移地址从0开始。例1:若指令序列出现在段的开始,那么,在汇编时地址计数器的值如左侧所示。00008AD8MOV BL,AL;机器码为2字节000280E30FAND BL,0FH;机器码为3字节00058AF8MOV BH,AL;机器码为2字节0007B104MOVCL,4;机器码为2字节0009D2EFSHRBH,CL例2:JNZ$+6;转向地址是该指令的首地址加6例3:ARRAYDW1,2,$+4,3,4,$+4;伪指令中$表示地址计数器当前值ARRAY010074H0000750200760000777C0078007800007903007A00007B04007C00007D82007E007E00007Fsusujiangshu.edu34汇编语言程序设计常用伪操作ORG 设置地址计数器值的伪操作指令格式:ORG 常数表达式 ;调整内存变量起始偏移量功能:设置其后数据或代码的起始偏移地址为该常数表达式的值n。也就是将地址计数器的值置为n。例1:已知下列数据段,指出变量V1、V2的偏移地址。datasegmentorg200hv1 dw1,2;v1的偏移地址为200horg$+10h;跳过10h个字节v2 db?;v2的偏移地址为214hdataendssusujiangshu.edu35汇编语言程序设计常用伪操作EVEN偶对齐伪指令指令格式:EVEN功能:使下一个变量或指令从下一个偶地址单元开始分配。ALIGN对齐伪指令指令格式:ALIGNboundary说明:boundary必须是2的幂,如:2、4、8和16等。本伪指令下面的内存变量必须从下一个能被boundary整除的地址开始分配。注:ALIGN2等价于EVEN。例例2:下述指令可以使:下述指令可以使ARRAY的值为的值为4的倍数。的倍数。B1DB12HALIGN4ARRAYDW100 DUP(?)susujiangshu.edu36汇编语言程序设计常用伪操作七、基数控制伪操作七、基数控制伪操作指令格式:.RADIXexp说明:exp的值必须是区间2,16内的一个整数。该指令设置整数的缺省进制为exp。宏汇编开始时所默认的整数进制为十进制。例:MOVAX,1234;1234是十进制数MOVAX,1234H;1234H是十六进制数.radix8B1DB10,11,12;这三个数是八进制数DB10D;这数是十进制数.radix10.radix16MOVBX,0FFDW90D,101B;前者是十进制数,后者是二进制susujiangshu.edu37汇编语言程序设计常用伪操作注意:MASM是强类型的。变量在定义后其类型便被确定,使用时要注意类型匹配。例有定义:OP1 DB?,?OP2 DW?,?下列两条指令执行不同类型的操作:MOV OP1+1,0;字节操作指令,将0作为1个字节送到地址OP1+1MOV OP2+2,0;字操作指令,将0作为1个字送到地址OP2+2然而,下列两条指令是错误的:MOV OP1,AX;类型不匹配MOV OP2,AL;类型不匹配LABEL伪指令和类型操作符PTR一般格式:变量或标号名LABEL类型说明:指定变量或标号名的类型,并不为其分配内存空间;类型类型为BYTE、WORD、DWORD、FWORD、QWORD、TBYTE。例:MOV AX,WORDPTROP1MOV AL,BYTEPTROP2OP1?00750075OP1+10000760076OP2?00770077OP2+1?00780078OP2+20000790079OP2+300007A007A例:定义地址相同、类型不同的两个变量。例:定义地址相同、类型不同的两个变量。BALABEL BYTEWADW 50 DUP(?);实际上实际上BA=WA;将;将100个字节的数组首地址赋予两个不同类型的变量:字节类个字节的数组首地址赋予两个不同类型的变量:字节类型变量型变量BA与字类型变量与字类型变量WA。MOV WA+2,0;将将0作为作为1个个字字送到地址送到地址WA+2MOV BA+2,0;将将0作为作为1个个字节字节送到地址送到地址BA+2susujiangshu.edu38汇编语言程序设计第4章汇编语言程序格式主要内容汇编程序功能标识符和表达式常用伪操作汇编语言常用操作符汇编语言程序的开发过程susujiangshu.edu39汇编语言程序设计汇编语言源程序格式变量、标号与地址表达式变量、标号与地址表达式 变量与标号的3种属性:段地址、偏移地址、类型。变 量 的 类 型 包 括 BYTE、WORD、DWORD、FWORD、QWORD、TBYTE等。标号的类型包括NEAR和FAR。地址表达式的基本形式为:变量名或标号名 常数其类型由相应的变量或标号确定。两个地址表达式的差表示两个地址之间的距离(字节数),两个地址必须在同一个段内。注意,不能将两个地址表达式相加。$是一个特殊的地址表达式,表示当前地址,即地址计数器的当前值。susujiangshu.edu40汇编语言程序设计汇编语言源程序格式常数与数值表达式常数与数值表达式 整数,包括二进制、十进制、八进制或十六进制表示的整数。字符与字符串必须用单引号或双引号括起来。数值表达式的值是确定的数。变量、标号与地址表达式变量、标号与地址表达式 变量与标号的3种属性:段地址、偏移地址、类型。变量的类型包括BYTE、WORD、DWORD、FWORD、QWORD、TBYTE等。标号的类型包括NEAR和FAR。地址表达式的基本形式为:变量名或标号名 常数其类型由相应的变量或标号确定。两个地址表达式的差表示两个地址之间的距离(字节数),两个地址必须在同一个段内。注意,不能将两个地址表达式相加。$是一个特殊的地址表达式,表示当前地址,即地址计数器的当前值。susujiangshu.edu41汇编语言程序设计汇编语言常用操作符算术操作符/运算符:+(加)、-(减)、*(乘)、/(除)和MOD(取模)。关系操作符:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)和GE(大于等于)。关系表达式的计算结果规定:若关系不成立,则该数值表达式的计算结果为0;否则,其结果为-1,即0FFFFH。逻辑与移位操作符:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、SHL(左移位)和SHR(右移位)。susujiangshu.edu42汇编语言程序设计汇编语言常用操作符数值回送操作符SEG 地址表达地址表达;返回地址表达式的段地址段地址OFFSET地址表达式地址表达式;返回地址表达式的偏移地址偏移地址TYPE表达式;返回表达式所表示变量的类类型型值值,否则为0SIZE变量;返回直接分配给指定变量的字节数字节数LENGTH变量;返回DUP直接分配给变量的元元素素个个数数,否则为1说明:TYPE返回一个常数,表示变量的类型:DB为1,DW为2,DD为4,DF为6,DQ为8,DT为10。表示标号的类型:NEAR为-1,FAR为-2。susujiangshu.edu43汇编语言程序设计例:数值回送操作符DATA1SEGMENTORG 2000HV1DW1,2 V2DB?V3DBABCDV4DW20DUP(?)DATA1ENDSTYPEV1=2TYPEV2=1TYPEV3=1TYPEV4=2LENGTHV1=1LENGTHV2=1LENGTHV3=1LENGTHV4=20SIZE V1=2SIZE V2=1SIZE V3=1SIZE V4=40movax,segv1movds,axmovsi,offset v3movbx,offsetv4si=bx=?susujiangshu.edu44汇编语言程序设计汇编语言源程序格式属性操作符类型操作符:类型PTR表达式;为表达式所表示的内存操作数或标号指定一个类型,而地址不变。别名操作符:THIS类型;建一个指定类型或指定距离的地址操作数。SHORT;修饰JMP指令的转向地址在127字节内。字节分离操作符:HIGH/LOW表达式;分别取表达式的高位字节/低位字节字分离操作符:HIGHWORD/LOWWORD表达式;取表达式的高位字/低位字例1:HIGH(1234H+100H);结果为13HLOW1234H;结果为34H。例2:WBUFFEREQUTHISWORDBUFFERDB20DUP(?)MOVAL,BUFFERMOVAX,WBUFFER;等效于MOVAX,wordptrBUFFERsusujiangshu.edu45汇编语言程序设计汇编语言源程序格式例:设有如下定义:WordVar dw10dup(?)欲将WordVar的第0个字节置为1,如何处理?方法2:用THIS与EQU。ByteVar equthis byteWordVar dw10dup(?)mov ByteVar,1方法1:用PTR操作符。WordVardw10dup(?)MovbyteptrWordVar,1susujiangshu.edu46汇编语言程序设计汇编语言源程序格式 运算符和操作符的优先级:高高LENGTH、SIZE、WIDTH、MASK、()、.、(后两个用于结构变量)PTR、SEG、OFFSET、TYPE、THIS、:(用于段超越前缀)*、/、MOD、SHL、SHR HIGH、LOW+、-EQ、NE、LT、LE、GT、GE NOT AND OR、XOR低低SHORTsusujiangshu.edu47汇编语言程序设计汇编语言程序的开发一、建立汇编语言工作环境一、建立汇编语言工作环境1.根据需要下载汇编程序:MASM6.11 或更高版本;2.安装或复制到PC,注意路径设置;3.使用自己习惯的编辑器(记事本),输入源程序;4.开始实现你的程序设计。建议下载:建议下载:MASM for windowsMASM for windows软件,有完整界面软件,有完整界面。否则一般情况下,你还需要有如下程序:编辑程序EDIT.EXE,或文本编辑器调试程序Debug(只能调试16位程序)CodeView(可以调试32位程序)。susujiangshu.edu48汇编语言程序设计汇编语言程序的开发二、汇编语言程序设计上机过程二、汇编语言程序设计上机过程用编辑程序编辑编辑输入源程序,生成xxx.ASM用汇编程序将源程序汇编汇编,生成xxx.OBJ连接连接多模块的目标文件,生成可执行文件xxx.EXE可执行文件的调试调试运行、运行、源程序修改修改,重复上述过程可执行文件的正式运行正式运行如果对汇编程序如何翻译机器码有兴趣,可查阅80 x86汇编小站x86asm提供的OPCODES手册。susujiangshu.edu49汇编语言程序设计1、可以用文本编辑器、记事本等来输入和编辑源程序,保存文件xxxxx.asm,必须用此扩展名。2、可以分别使用汇编程序和连接程序用masmxxxxx.asm(可省略扩展名,只要文件存在)生成目标文件xxxxx.obj,以及选择生成列表文件xxx.LST(列出源程序及机器语言程序清单,包括段名表和符号表)和交叉引用文件xxx.CRF(用于建立交叉引用表)。3、然后用linkxxxxx,生成可执行文件xxxxx.exe可能需要输入库文件名(yyy.LIB);可选择输出连接映像文件xxx.MAP(列出各段在存储器中的分配情况)。4、也可直接使用汇编和连接如:ML/xxxxx.asm;汇编连接成功,产生可执行程序xxxxx.exe汇编语言程序的开发susujiangshu.edu50汇编语言程序设计本章小结构成汇编语言源程序的基本成分是指令和伪指令。汇编器在汇编每个段时,由地址计数器跟踪代码或数据的偏移地址。在生成可执行文件后,代码或数据的偏移地址已确定,但段地址只有在装入内存运行时,根据实际的装入地址才能确定,也就是说,需要重定位。变量与标号均为符号地址,都具有3种属性:段地址、偏移地址和类型。大多数程序包含一个代码段、一个数据段和一个堆栈段。用汇编语言开发程序,需要经过编辑、汇编、连接、运行调试的过程,通常可能要反复多次,直到满足功能需求为止。susujiangshu.edu51汇编语言程序设计作业与练习书上习题 p.155:4.1、4.4、4.5、4.8、4.9、4.10、4.14、4.15、read:4.2、4.3、4.12、4.13(可做在书上)4.11、4.17susujiangshu.edu52汇编语言程序设计谢谢46、我们若已接受最坏的,就再没有什么损失。卡耐基47、书到用时方恨少、事非经过不知难。陆游48、书籍把我们引入最美好的社会,使我们认识各个时代的伟大智者。史美尔斯49、熟读唐诗三百首,不会作诗也会吟。孙洙50、谁和我一样用功,谁就会和我一样成功。莫扎特
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!