1、汇编语言课件07MASM语法(1)汇编语言语句一般格式为:汇编语言语句一般格式为:语句标号语句标号:指令名指令名 操作数序列操作数序列 ;注释;注释 标识符标识符:用来为变量、段、标号、过程等命名用来为变量、段、标号、过程等命名命名规则:命名规则:n 最长最长31个字符个字符n第一个字符不能是数字第一个字符不能是数字n?-$可出现在任意位置,但可出现在任意位置,但?$不能单独使用不能单独使用汇编语言语句格式与分类汇编语言语句格式与分类 语句标号语句标号:指令名指令名 操作数序列操作数序列 ;注释;注释 语句标号语句标号标识符后加标识符后加 :,提供转移地址,开始地,提供转移地址,开始地址址 语
2、句标号语句标号:指令名指令名 操作数序列操作数序列 ;注释;注释 三类:机器指令、伪指令和宏指令。三类:机器指令、伪指令和宏指令。机器指令:指令系统中的硬指令,程序运行时由机器指令:指令系统中的硬指令,程序运行时由CPU执行执行伪指令:汇编程序执行的操作,规定汇编程序如何按要求伪指令:汇编程序执行的操作,规定汇编程序如何按要求进行汇编及分配内存进行汇编及分配内存宏指令:由一系列指令或伪指令构成,汇编时展开成若干宏指令:由一系列指令或伪指令构成,汇编时展开成若干条机器指令,用于提高编程效率条机器指令,用于提高编程效率(伪指令和宏指令由汇编程序在汇编期间处理伪指令和宏指令由汇编程序在汇编期间处理
3、)语句标号语句标号:指令名指令名 操作数序列操作数序列 ;注释;注释 可以是常量、变量、表达式、寄存器名可以是常量、变量、表达式、寄存器名或标号等,用逗号隔开。或标号等,用逗号隔开。“;”后可给出语句注释,提高可读性和可理解性。后可给出语句注释,提高可读性和可理解性。语句标号语句标号:指令名指令名 操作数序列操作数序列 ;注释;注释 常量、变量、标号、运算符和表达式常量、变量、标号、运算符和表达式常量表示一个固定的数值,又可分成多种形式。常量表示一个固定的数值,又可分成多种形式。1.1.常数常数这里指由这里指由1010,1616,2 2和和8 8进制形式表达的数值进制形式表达的数值各种进制的数
4、据以后缀字母区分,各种进制的数据以后缀字母区分,默认不加后缀默认不加后缀字母的是十进制数字母的是十进制数基数控制基数控制.RADIX.RADIX伪指令可以改变默认进制:伪指令可以改变默认进制:.RADIX n.RADIX n .RADIX 10.RADIX 10 .model small .model small .stack 1024.stack 1024 .data .data stringstring db Hello,world,0dh,0ah db Hello,world,0dh,0ah,$.code.code start:start:movmov ax,data ax,data m
5、ov ds,ax mov ds,ax mov dx,offset mov dx,offset stringstring movmov ah,9 ah,9 int int 21h 21h mov mov ah,4ch ah,4ch intint 21h 21h endend startstart 常量常量n其中,其中,n n为为2-162-16范围内任何数值。例如指范围内任何数值。例如指令令“.RADIX 16”.RADIX 16”,将缺省基数改为,将缺省基数改为 1616,即没有后缀的数值表示即没有后缀的数值表示1616进制数,非进制数,非1616进制数均应使用后缀字母,包括进制数均应使用后缀
6、字母,包括1010进制进制数数n例如例如10101100B10101100B0a4h,56acH0a4h,56acH35D35D357Q357Qn实数:实数:整数整数.小数小数E E指数指数4 4字节、字节、8 8字节或字节或1010字节字节n例如:例如:21.4221.42 -4.55E+2 -4.55E+2n字符串字符串字符串常量是用单引号或双引号括起来的单字符串常量是用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应个字符或多个字符,其数值是每个字符对应的的ASCIIASCII码值。码值。n例如例如dd64H64HABAB4142H4142H,Hello,Assembly!
7、Hello,Assembly!符号常量符号常量n符号常量是指使用符号常量是指使用标识符表达一个数值标识符表达一个数值。常量若使用有意义的符号名来表示,就可常量若使用有意义的符号名来表示,就可以以提高程序的可读性提高程序的可读性,同时更具有通用性。,同时更具有通用性。nMASMMASM提供等价机制,用来为常量定义符号提供等价机制,用来为常量定义符号名,符号定义伪指令有名,符号定义伪指令有“等价等价EQU”EQU”和和“等等号号”伪指令伪指令。符号定义伪指令符号定义伪指令符号名符号名 EQU EQU 数值表达式数值表达式符号名符号名 EQU EQU ;MASM 5.x;MASM 5.x不支持不支持
8、符号名符号名 数值表达式数值表达式n等价伪指令等价伪指令EQUEQU给符号名定义一个数值或定给符号名定义一个数值或定义成另一个字符串,这个字符串甚至可以义成另一个字符串,这个字符串甚至可以是一条处理器指令。是一条处理器指令。n例如:例如:DosWriteChar equDosWriteChar equ 2 2CarriageReturnCarriageReturn=13=13CallDOS equ intCallDOS equ 21hn应用上述符号定义,下列左边的程序段应用上述符号定义,下列左边的程序段可以写成右侧的等价形式:可以写成右侧的等价形式:mov ah,DosWriteChar ;m
9、ovmov ah,DosWriteChar ;mov ah,2 ah,2mov dl,CarriageReturnmov dl,CarriageReturn;mov;mov dl,13 dl,13CallDOSCallDOS ;int ;int 21h 21hnEQUEQU用于数值等价时不能重复定义符号名,用于数值等价时不能重复定义符号名,但但“”允许重复赋值,允许重复赋值,n例如:例如:X=7X=7 ;同样同样 X EQU 7 X EQU 7 是正确的是正确的X=X+5 ;X=X+5 ;但是但是 X EQU X+5 X EQU X+5 是错误的是错误的数值表达式数值表达式n数值表达式一般是指
10、由运算符(数值表达式一般是指由运算符(MASMMASM统称统称为操作符为操作符OperatorOperator)连接的各种常量所构)连接的各种常量所构成的表达式。汇编程序在汇编过程中计算成的表达式。汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以表达式,最终得到一个确定的数值,所以也是常量。也是常量。n由于表达式是在程序运行前的汇编阶段计由于表达式是在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编算,所以组成表达式的各部分必须在汇编时就能确定。时就能确定。n汇编语言支持多种运算符汇编语言支持多种运算符nP46 表表3-2movmov ax,3 ax,3*4+54+5 ;
11、等价于等价于 movmov ax,17 ax,17or al,03h AND 45hor al,03h AND 45h;等价于等价于 or al,01Hor al,01Hmovmov al,0101b SHL(2 al,0101b SHL(2*2)2);等价于等价于 movmov al,01010000b al,01010000b变量变量n变量实质上是指内存单元的数据,因而变量实质上是指内存单元的数据,因而可以改变。变量需要事先定义才能使用。可以改变。变量需要事先定义才能使用。n变量的三种属性:变量的三种属性:段值(段值(SEGSEG):):变量所在段的段址变量所在段的段址 偏移量(偏移量(O
12、FFSETOFFSET):):变量所在段相对变量所在段相对0 0的存储位置的存储位置(字字节数节数)类型(类型(TYPETYPE):):变量占用的字节数变量占用的字节数1.1.变量的定义变量的定义变量名变量名 伪指令伪指令 初值表初值表n变量名为用户自定义标识符,表示初值变量名为用户自定义标识符,表示初值表首元素的逻辑地址。变量名也可以没表首元素的逻辑地址。变量名也可以没有,在这种情况下,汇编程序将直接为有,在这种情况下,汇编程序将直接为初值表分配空间,无符号地址。初值表分配空间,无符号地址。n变量名变量名 伪指令伪指令 初值表初值表n变量定义伪指令有变量定义伪指令有DBDB,DWDW,DDD
13、D,DFDF,DQDQ,DTDT,它们根据申请的主存空间单位分类,它们根据申请的主存空间单位分类DB:DB:字节字节DW:DW:字字(16(16位位)DD:DD:双字双字(32(32位位)DQ:DQ:4 4字节字节 存实型数存实型数DT:DT:1010字节字节,BCD,BCD码码 除了除了 DBDB,DW DW,DDDD等定义的简单变量,等定义的简单变量,汇编语言还支持复杂的数据变量汇编语言还支持复杂的数据变量,如结构如结构(StructureStructure)、记录()、记录(RecordRecord)、联合)、联合(UnionUnion)等)等变量名变量名 伪指令伪指令 初值表初值表 初
14、值表是用逗号分隔的参数,主要由常初值表是用逗号分隔的参数,主要由常量、数值表达式或量、数值表达式或“?”组成。其中组成。其中“?”表示初值不确定,即未赋初值。表示初值不确定,即未赋初值。另外,多个存储单元如果初值相同,可另外,多个存储单元如果初值相同,可以用复制操作符以用复制操作符 DUPDUP进行定义。进行定义。DUPDUP的格的格式为:式为:重复次数重复次数 DUP(DUP(重复参数重复参数)例:例:stack1 db 100 dup(?)stack1 db 100 dup(?)2.2.变量的应用变量的应用n变量具有逻辑地址变量具有逻辑地址。在程序代码中,通。在程序代码中,通过变量名引用其
15、指向的第一个数据,通过变量名引用其指向的第一个数据,通过变量名加减位移量存取以第一个数据过变量名加减位移量存取以第一个数据为基地址的前后数据。为基地址的前后数据。n变量名后用变量名后用“n”n”或或“n”n”作用相同,作用相同,都表示后移都表示后移n n个个字节字节存储单元存储单元。例例 变量的定义和应用变量的定义和应用bvar1bvar1 db 100,01100100b,64h,ddb 100,01100100b,64h,d;字节变量:不同进制表达同一个数值,内存中有字节变量:不同进制表达同一个数值,内存中有4 4个个64H64Hminintminint=5=5;符号常量:符号常量:min
16、intminint数值为数值为5 5,不占内存空间,不占内存空间bvar2bvar2 db-1,minint,minint+5 db-1,minint,minint+5;内存中数值依次为内存中数值依次为0FFH,5,0AH0FFH,5,0AH db?,2 dup(20h)db?,2 dup(20h);预留一个字节空间,重复定义了预留一个字节空间,重复定义了2 2个数值个数值20H20Hwvar1 dwwvar1 dw 2010h,4 2010h,4*4 4;字变量:两个数据是字变量:两个数据是2010H2010H、10H10H,共占,共占4 4个字节个字节64H64H64H64Hbvar1bv
17、ar1-1(0ffh)50ahbvar2bvar220h20h?20h10h00h10hwvar1wvar1wvar2wvar2 dwdw?;wvar2;wvar2是没有初值的字变量是没有初值的字变量dvar dddvar dd 12347777h,87651111h 12347777h,87651111h;双字变量:双字变量:2 2个双字数据个双字数据abcabc db a,b,c,?db a,b,c,?等效于等效于abc db abcabc db abc,?,?;定义字符,实际是字节变量定义字符,实际是字节变量77h77h12H34Hwvar2wvar211h11h65hdvardvarb
18、a87h?cabcabc?00habc+2?stringstringdb ABCDEFGHIJdb ABCDEFGHIJ;定义字符串:使用字节定义定义字符串:使用字节定义DBDB伪指令伪指令crlfscrlfs db 13,10,$db 13,10,$;回车符回车符0D H0D H、换行符、换行符0AH0AH和字符和字符$24H24Hmaxintmaxint equ equ 0ah 0aharray1 dw maxintarray1 dw maxint dup(0)dup(0);10;10个初值为个初值为0 0的字量,可以认为是数组的字量,可以认为是数组array db 2 dup(2,3,2
19、 dup(4)array db 2 dup(2,3,2 dup(4);8;8个字节内容依次为:个字节内容依次为:2 3 4 4 2 3 4 42 3 4 4 2 3 4 4stringABCDEFJIGH$131000h23442344crlfsarray1array共共20字节字节movmov dl,bvar1 dl,bvar1;bvar1;bvar1表示它的第表示它的第1 1个数据,故个数据,故DL100DL100dddecdec bvar2+1 bvar2+1;bvar2;bvar2位移量为位移量为1 1的字节数据的字节数据(minintminint5 5)减)减1 1,故为,故为4 4
20、movmov abc3,dl abc3,dl;abc;abc位移量为位移量为3 3的字节单元赋值的字节单元赋值dd,字符串成为字符串成为 abcdabcd64H64H64H64Hbvar1bvar1-1(0ffh)50ahbvar2bvar220h20h?20h10h00h10hwvar1wvar1movmov dl,bvar1 dl,bvar1;bvar1;bvar1表示它的第表示它的第1 1个数据,故个数据,故DL100DL100dddecdec bvar2+1 bvar2+1;bvar2;bvar2位移量为位移量为1 1的字节数据的字节数据(minintminint5 5)减)减1 1,
21、故为,故为4 4movmov abc3,dl abc3,dl;abc;abc位移量为位移量为3 3的字节单元赋值的字节单元赋值dd,字符串成为,字符串成为 abcdabcd64H64H64H64Hbvar1bvar1-1(0ffh)50ahbvar2bvar220h20h?20h10h00h10hwvar1wvar1movmov dl,bvar1 dl,bvar1;bvar1;bvar1表示它的第表示它的第1 1个数据,故个数据,故DL100DL100dddecdec bvar2+1 bvar2+1;bvar2;bvar2位移量为位移量为1 1的字节数据的字节数据(minintminint5
22、5)减)减1 1,故为,故为4 4movmov abc3,dl abc3,dl;abc;abc位移量为位移量为3 3的字节单元赋值的字节单元赋值dd,字符串成为,字符串成为 abcdabcd64H64H64H64Hbvar1bvar1-1(0ffh)50ahbvar2bvar220h20h?20h10h00h10hwvar1wvar1dDL:DL:movmov dl,bvar1 dl,bvar1;bvar1;bvar1表示它的第表示它的第1 1个数据,故个数据,故DL100DL100dddecdec bvar2+1 bvar2+1;bvar2;bvar2位移量为位移量为1 1的字节数据的字节数
23、据(minintminint5 5)减)减1 1,故为,故为4 4movmov abc3,dl abc3,dl;abc;abc位移量为位移量为3 3的字节单元赋值的字节单元赋值dd,字符串成为,字符串成为 abcdabcd64H64H64H64Hbvar1bvar1-1(0ffh)50ahbvar2bvar220h20h?20h10h00h10hwvar1wvar1dDL:DL:movmov dl,bvar1 dl,bvar1;bvar1;bvar1表示它的第表示它的第1 1个数据,故个数据,故DL100DL100dddecdec bvar2+1 bvar2+1;bvar2;bvar2位移量为
24、位移量为1 1的字节数据的字节数据(minintminint5 5)减)减1 1,故为,故为4 4movmov abc3,dl abc3,dl;abc;abc位移量为位移量为3 3的字节单元赋值的字节单元赋值dd,字符串成为,字符串成为 abcdabcd64H64H64H64Hbvar1bvar1-1(0ffh)40ahbvar2bvar220h20h?20h10h00h10hwvar1wvar1dDL:DL:movmov dl,bvar1 dl,bvar1;bvar1 bvar1表示它的第表示它的第1 1个数据,个数据,故故DL100DL100dddecdec bvar2+1 bvar2+1
25、;bvar2;bvar2位移量为位移量为1 1的字节数据的字节数据(minintminint5 5)减)减1 1,故为,故为4 4movmov abc3,dl abc3,dl;abc;abc位移量为位移量为3 3的字节单元赋的字节单元赋值值dd,字符串成为,字符串成为 abcdabcd64H64H64H64Hbvar1bvar1-1(0ffh)40ahbvar2bvar220h20h?20h10h00h10hwvar1wvar1dDL:DL:movmov dl,bvar1 dl,bvar1;bvar1;bvar1表示它的第表示它的第1 1个数据,个数据,故故DL100DL100dddecdec
26、 bvar2+1 bvar2+1;bvar2;bvar2位移量为位移量为1 1的字节数据的字节数据(minintminint5 5)减)减1 1,故为,故为4 4movmov abc3,dl abc3,dl;abc;abc位移量为位移量为3 3的字节单元赋的字节单元赋值值dd,字符串成为,字符串成为 abcdabcddDL:DL:77h77h12H34Hwvar2wvar211h11h65hdvardvarba87h?cabcabc?00hmovmov dl,bvar1 dl,bvar1;bvar1;bvar1表示它的第表示它的第1 1个数据,个数据,故故DL100DL100dddecdec
27、bvar2+1 bvar2+1;bvar2;bvar2位移量为位移量为1 1的字节数据的字节数据(minintminint5 5)减)减1 1,故为,故为4 4movmov abc3,dl abc3,dl;abc;abc位移量为位移量为3 3的字节单元赋的字节单元赋值值dd,字符串成为,字符串成为 abcdabcddDL:DL:77h77h12H34Hwvar2wvar211h11h65hdvardvarba87hdcabcabc?00hmov ax,word ptrmov ax,word ptr dvar0 dvar0mov dx,word ptrmov dx,word ptr dvar2
28、dvar2;取双字到取双字到DX.AXDX.AX77h77h12H34Hwvar2wvar211h11h65hdvardvarba87h?cabcabc?00h其它几个可用于变量的运算符其它几个可用于变量的运算符SEG:SEG:取变量、标号段地址取变量、标号段地址TYPE:TYPE:返回此变量类型存储的所需字节数。(对标号为返回此变量类型存储的所需字节数。(对标号为-1-1,-2-2)LENGTHLENGTH:取数组元素个数:取数组元素个数SIZESIZE:取数组字节数:取数组字节数设:设:DS=2000HDS=2000HXP DW?XP DW?X1 DB A,B,CX1 DB A,B,CAR
29、RAY DW 100 DUP(1,2,3,20(0)ARRAY DW 100 DUP(1,2,3,20(0)MOV ALMOV AL,TYPE XPTYPE XP;等效于等效于MOV AL,2MOV AL,2MOV AL,TYPE X1 ;MOV AL,TYPE X1 ;等效于等效于MOV AL,1MOV AL,1MOV AL,LENGTH X1;MOV AL,LENGTH X1;等效于等效于MOV AL,1MOV AL,1MOV AL,LENGTH ARRAY;MOV AL,LENGTH ARRAY;等效于等效于MOV AL,100MOV AL,100MOV AX,SIZE ARRAY;MO
30、V AX,SIZE ARRAY;等效于等效于MOV AX,200(MOV AX,200(有嵌套,不对有嵌套,不对)MOV AX,SEG XP;AX=2000hMOV AX,SEG XP;AX=2000hdata segment data segment abc db a,b,cabc db a,b,cstringstring db ABCDEFGHIJdb ABCDEFGHIJcrlfscrlfsdb 13,10,$db 13,10,$data endsdata endscode segment code segment .movmov cx,10 cx,10 mov mov bx,0 bx,0again:add stringbx,3again:add stringbx,3 inc bx inc bx loop againloop again;循环循环,每次每次cxcx减减1,1,不为不为0 0到指定标号到指定标号,否则否则,退出退出 lea dx,abclea dx,abc;mov offset dx;mov offset dx mov mov ah,9 ah,9 int int 21h 21h .;显示结果显示结果:abcDEFGHIJKLMabcDEFGHIJKLM
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。