第四章_汇编语言格式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《汇编语言》第四章汇编语言程序格式2回顾IBM-PC的寻址方式指令寻址方式操作数的寻址方式IBM-PC指令系统数据传送指令运算指令控制转移指令串处理指令处理机控制指令简单的汇编语言程序设计3目标汇编语言语句格式常量表达式、数值表达式变量定义及应用变量、标号和逻辑段的属性基本伪指令和操作符EQU/=、+-*/、DB/DW/DD、?/DUP、ORG/$、OFFSET/SEG/PTR、END、SEGMENT/ENDS完整段定义源程序格式,DOS的程序结构汇编语言源程序的编辑、汇编、连接和调试4指令格式硬指令和伪指令硬指令使CPU产生动作、并在程序执行时才处理的语句指令格式:标号:硬指令助记符操作数,操作数;注释伪指令(Directive)不产生CPU动作、在程序执行前由汇编程序处理的说明性语句例如,数据说明、变量定义、分配存储区等等。伪指令与具体的处理器类型无关,但与汇编程序的版本有关。伪指令的格式:名字伪指令助记符参数,参数,…;注释?伪指令语句与指令语句的主要区别:伪指令语句经汇编后不产生机器目标代码,而指令语句经汇编后将产生相应的机器目标代码;伪指令语句所指示的操作是在程序汇编时完成的,而指令语句的操作必须在程序运行时才能完成。5汇编语言基础标号、名字与标识符标号反映硬指令位置(逻辑地址)的标识符,后跟一个冒号分隔名字反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有一个冒号常见名字的表现方式有:变量名、段名、过程名等标识符(Identifier)是名字和标号的统称,一般最多由31个字母、数字及规定的特殊符号(如_、$、?、@)组成,不能以数字开头默认情况下,汇编程序不区别标识符中的字母大小写一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的保留字例:next:incsistringdb1,2,3,4xdw1ydw26汇编语言基础保留字(ReservedWord)保留字是汇编程序已经利用的标识符,主要有:硬指令助记符:例如,MOV、ADD伪指令助记符:例如,DB、EQU操作符:例如,OFFSET、PTR寄存器名:例如,AX、CS预定义符号:例如,@data助记符硬指令助记符可以是任何一条处理器指令,也可以是一条宏指令伪指令助记符操作数与参数处理器指令的操作数可以是立即数、寄存器和存储单元伪指令的参数可以是常数、变量名、表达式等;可以有多个,参数之间用逗号分隔。7汇编语言基础注释语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性必要时,一个语句行也可以由分号开始作为阶段性注释汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理分隔符语句的4个组成部分要用分隔符分开标号后用冒号,注释前用分号操作数之间和参数之间使用逗号分隔其他部分通常采用空格或制表符,多个空格和制表符的作用与一个相同MASM支持续行符“\”8常量常数:表示一个固定的数值,常用的数制有:十进制常数(D/d)、十六进制常数(H/h)、二进制常数(B/b)、八进制常数(Q/q)以字母A~F开头的十六进制数,前面要用0表示MASM中默认进制的设置:.RADIXn字符串常数用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值符号常数:利用一个标识符表达的一个数值等价EQU伪指令:符号名EQU数值表达式或符号名EQU字符串等号=伪指令:符号名=数值表达式说明:二者间的区别在于=定义的常量可重复赋值,而EQU不允许例:符号定义及应用DosWriteCharequ2CarriageReturn=13CallDOSequint21hXdb‘1’符号应用(左边程序段等价右侧的符号形式)movah,2;movah,DosWriteCharmovdl,13;movdl,CarriageReturnint21h;CallDOS9数值表达式数值表达式一般是指由运算符连接的各种常数所构成的表达式汇编程序在汇编过程中计算表达式,最终得到一个数值表达式在程序运行之前,就已经计算结果;所以,程序运行速度没有变慢,但增强程序的可读性MASM对除伪指令外各种汇编时处理的指令统称为操作符(Operator)运算符算术运算符、逻辑运算符、(逻辑)移位运算符、关系运算符、高低分离符10运算符算术运算符+、-、*、/、MODMOD也称为取模,它计算除法之后的余数加+和减-运算符还可以用于地址表达式的计算除加、减外,其他运算符的参数必须是整数例:movax,3*4+5;等价于movax,17逻辑运算符AND、OR、XOR、NOT实现按位相与、相或、异或、求反的逻辑运算例:oral,03hAND45h;等价于oral,01h11运算符逻辑移位运算符SHL/SHR实现左移、右移的逻辑操作;移入低位或高位的是0格式为:数值表达式SHL/SHR移位次数例:moval,0101bSHL(2*2)关系运算符用于比较和测试符号数值EQ、NE、GT、LT、GE、LEMASM用-1表示条件为真,MASM用0表示条件为假例:movbx,((PORTLT5)AND20)OR((PORTGE5)AND30);当PORT5时,汇编结果为movbx,20;否则,汇编结果为movbx,3012运算符高低分离符HIGH、LOW、HIGHWORD、LOWWORD取数值的高半部分或低半部分HIGH、LOW从一个字数值或符号常量中得到高、低字节例:movah,HIGH8765h;等价于movah,87h从MASM6.0引入的HIGHWORD、LOWWORD取一个符号常量(不能是其他常数)的高字或低字部分例:dd_valueequ0ffff1234h;定义一个符号常量movax,LOWWORDdd_value;等价于movax,1234h13操作符的优先级1()[]LENGTHSIZEWIDTHMASK2PTROFFSETSEGTPYETHIS3HIGELOW4*/MODSHLSHR5+-6EQNEGTLTGELE7NOT8AND9ORXOR10SHORT14地址型参数地址型参数汇编语言程序中,地址型数据可作指令参数主要形式是标号和名字(变量名、段名、过程名等)硬指令的操作数有存储单元存储单元就应该用地址型参数(存储器操作数)表达15变量定义及存储器分配变量定义伪指令功能变量申请固定长度的存储空间并同时将相应的存储单元初始化数据定义伪指令的格式:变量名数据定义伪指令助记符初值表例:Xdb1,23,34db‘a’,’b’ydb50dup(1,2)16变量定义及存储器分配变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用符号表示地址,称为符号地址变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址。初值表初值表是用逗号分隔的参数主要由数值常数、表达式或?、DUP组成?:表示初值不确定,即未赋初值;DUP:表示重复初值DUP的格式为:重复次数DUP(重复参数)17变量定义及存储器分配数据定义伪指令助记符变量定义伪指令根据申请的主存空间单位分类DB:定义字节DW:定义字DD:定义双字DF:定义3字DQ:定义4字DT:定义10字节常用的是DB、DW、DD类型属性类型属性表示每个数据项的字节长度DB:1DW:2DD:4例1:datasegment;数据段定义Xdb'a',-5db2dup(100),?Ydb'ABC'Dataends61HFBH64H64H?41H42H43HXY例2:若对例1完成如下操作,结果是?:moval,XdecX+1movY,al18变量定义及存储器分配例3:DUP的嵌套DATA1DB3DUP(2DUP(1,2),?)例4:字单元定义datasegment;数据段countdw8000h,?,'AB'maxintequ64hnumberdwmaxintarraydwmaxintdup(0)dataends19变量和标号的属性属性的类型地址属性:在存储器中的位置类型属性:表示的数据宽度标号和名字一经定义便具有以下两类三种属性:段值:属于地址属性,标号和名字对应存储单元的段地址偏移值:属于地址属性,标号和名字对应存储单元的偏移地址类型:属于类型属性标号、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间;变量名的类型可以是BYTE、WORD和DWORD等20变量和标号的属性地址操作符用于取得名字或标号的段地址和偏移地址两个属性。[]:将括起的表达式作为存储器地址$:当前偏移地址::采用指定的段地址寄存器OFFSET名字/标号:返回名字或标号的偏移地址SEG名字/标号:返回名字或标号的段地址例:地址操作符的应用org$+10arraydb45,45hmovax,segarraymovds,axmovbx,offsetarray;等价于leabx,arraymovcl,array+4;等效于movcl,array[4]movax,es:[2000h]21变量和标号的属性类型操作符类型操作符对名字或标号的类型属性进行有关设置常用的类型操作符类型名PTR名字/标号THIS类型名SHORT标号TYPE名字/标号SIZE/SIZEOF变量名LENGTH/LENGTHOF变量名22类型操作符PTR格式:类型名PTR名字/标号功能:PTR操作符使名字或标号具有指定的类型使用PTR操作符,可以临时改变名字或标号的类型类型名BYTE、WORD、DWORD、FWORD、QWORD、TBYTENEAR、FAR由STRUCT、RECORD、UNION以及TYPEDEF定义的类型例1:PTR的使用moval,byteptrw_var;w_var是一个字变量jmpfarptrn_label;n_label是一个标号例2:为什么要使用PTRoper1db1,2oper2dw3,4movax,oper1;错误,movax,wordptroper1movbl,oper2;错误,movbl,byteptroper2例3:对BX指向的存储单元加1inc[bx];错误,应改为:incbyteptr[bx];或改为incwordptr[bx]提出问题:add[ax],32h正确吗?addax,32h正确吗?23类型操作符THIS格式:名字THIS类型功能:利用THIS说明的操作数具有汇编时的当前逻辑地址,且具有指定的类型一般与EQU一起使用例:xdb1,2,3b_varequTHISbyte;按字节访问变量b_var,但与w_var的地址相同w_vardw4,5,6;按字访问变量w_varf_jumpequTHISfar;用f_jump为段间转移(f_jumplabelfar)n_jump:movax,w_var;用n_jump为段内近转移,但两者指向同一条指令24类型操作符LABEL格式:名字LABLE类型LABEL伪指令的功能等同于EQUTHIS例:b_varequTHISbyte;等价于b_varLABELbytew_vardw10dup(0);f_jumpequTHISfar;等价于f_jumpLABELfarn_jump:movax,w_var;25类型操作符SHORT格式:SHORT标号指定标号作为-128~+127字节范围内的短转移如果标号实际上超出了这个范围,则出错。对高版本MASM已无意义例:jmpshortn_jump26数值返回操作符数值返回操作符返回变量或存储单元的属性或地址。有:TYPE、LENGTH、SIZE、SEG、OFFSET类型操作符TYPE格式:TYPE名字/标名返回表明名字或标号类型的一个字量数值对字节、字和双字变量依次返回1、2和4;对短、近和

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功