您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第四章、汇编语言程序格式
第四章、汇编语言程序格式徐承彬4.1汇编程序功能编辑程序PROGR.ASM文件汇编程序MASMPROGR.OBJ文件连接程序LINKPROGR.EXE文件在计算机上运行汇编语言的步骤:用编辑程序建立ASM源文件用MASM程序把ASM文件转换成OBJ文件用LINK程序把OBJ文件转换成EXE文件用DOS命令直接键入文件名就可以执行了4.2伪操作一、处理器选择伪操作.8086选择8086指令系统.286选择80286指令系统二、段定义伪操作一般格式Name1segment语句Name1endsName2segment语句Name2endsName3segment语句Name3endsend[标号]•段定义伪指令的一般格式•1、段定义伪指令SEGMENT/ENDS格式:段名segment[定位类型][组合类型][类别]段名ends功能:定义一个逻辑段,由若干逻辑段组成源程序定位类型说明段的开始地点的特点PARAWORDBYTEPAGE组合类型告诉连接程序本段与其他段的关系PUBLICSTACKCOMMONPRIVATE•2、段寄存器说明伪指令格式:ASSUME段寄存器名:段名,[段寄存器名:段名]功能:说明段寄存器与段的关系在一般程序中,该伪指令通常位于代码段的前面,指明程序中各段所用到的段寄存器的情况DatasegmentAddrdwnumberNumberdwyCountdw?DataendsCodesegmentAssumecs:code,ds:dataStart:movax,dataMovds,axMovcx,0Movbx,addrMovax,[bx]Repeat:testax,0ffffhJzexitJnsshiftInccxShift:shlax,1JmprepeatExit:movcount,cxMovah,4chInt21hCodeendsEndstart例如:数据段寄存器装入初值三、程序开始和结束1、程序开始伪指令NAMETITLE使用格式:NAMEmodule_name若没有使用NAME,则可用TITLE,格式如下:TITLEtext如果程序中既无NAME又无TITLE伪指令,则将源文件名作为模块名。2、程序结束伪指令END使用格式:END[label]标号(label)是程序开始执行的起始地址DatasegmentAddrdwnumberNumberdwyCountdw?DataendsCodesegmentAssumecs:code,ds:dataStart:movax,dataMovds,axMovcx,0Movbx,addrMovax,[bx]Repeat:testax,0ffffhJzexitJnsshiftInccxShift:shlax,1JmprepeatExit:movcount,cxMovah,4chInt21hCodeendsEndstart例如:格式:[变两名]助记符操作数[;注释]DB:定义字节,其后的每个操作数占用一个字节DW:定义字,其后的每个操作数占用一个字DD:定义双字,其后的每个操作数占用两个字DQ:定义4个字,其后的每个操作数占用4个字DT:定义10个字节,其后的每个操作数占用10个字节四、数据定义及存储器分配伪操作归纳为以下几种情况1、操作数可以是常量或常量表达式例如:XDB25,42,14H,0,-30YDW123H,6×10,3A60HZDD3705H,15X192A1400E2Y23013C00603A05Z3700002、可以定义一个表或一个字符串例如:1~10的平方值表可以定义如下:PFBDB1,4,9,16,25,36,49,64,81,100(2)定义字符串STRINGSDB‘GOODMORNING’(1)定义一个表strings‘G’‘O’‘O’‘D’‘-’‘M’‘O’‘R’‘N’‘I’‘N’‘G’字符串定义一般不使用DW伪指令例如:DB‘AB’和DW‘AB’在存储器的存储如下‘A’‘B’‘B’‘A’3、伪指令后可用操作数“?”分配并保留空间,不存数据例如:ADB5,?DB?,?,10BDW?,15,?A05---0AB--0F00--4、可以用操作符DUP来复制一些操作数格式:EXP–COUNTDUP(操作数….操作数)例1:Y1DB2DUP(11,?,15)Y2DW3DUP(2500H,?)汇编后存储情况如下:Y1DB2DUP(11,?,15)Y2DW3DUP(2500H,?)Y10B-0F0B-0FY20025--0025-PARADB2DUP(3,2DUP(5,7),0),?0305PARA07050700030507050700-例2:复制操作数可以嵌套5、可以用DW或DD伪操作把变量或标号的偏移地址(DW)或由16位段地址和16位偏移地址组成的整个地址(DD)存入存储器。后者先存偏移量,后存段地址例如:Y1DWPAR1DWPAR2DWPAR3Y2DDDATA1DDDATA2Y1PAR1的偏移地址PAR2的偏移地址PAR3的偏移地址Y2DATA1的偏移地址DATA1的段地址DATA2的偏移地址DATA2的段地址6、类型定义伪指令LABLE格式:符号名LABLE类型功能:指定一个符号名的类型,说明:变量的类型属性一般指变量的长度DB(1),DW(2),DD(4)标号的类型属性一般为NEAR或FARNEAR(2字节),FAR(4字节)例4.14OPER1DB?,?OPER2DW?,?MOVOPER1,0MOVOPER2,0例4.15OPER1DB1,2OPER2DW1234H,5678HMOVAX,OPER1+1MOVAL,OPER2OPER101H02HOPER234H12H78H56H修改例4.15中的指令MOVAX,WORDPTROPER1+1MOVAL,BYTEPTROPER2执行后AX=3402H执行后AL=34H例4.16BYTE_ARRAYLABELBYTEWORD_ARRAYDW50DUP(?)----100个BYTE_ARRAYWORD_ARRAY执行下列指令--MOVWORD_ARRAY+2,0MOVBYTE_ARRAY+2,100H00H01H五、表达式赋值伪操作EQU(符号定义语句)格式:符号名EQU表达式伪指令可以把符号名定义为常量,或一个能求出常数值得表达式例如:RT1EQU123FSEQU32B5EQURT1+1“=”赋值语句EMP=7EMP=EMP+1六、地址计数器与对准伪操作1、地址计数器$$表示当前地址例如:JNE$+6(1)、在指令中的用法目标地址等于该指令的首地址+6(2)、在定义数据中的用法例4.17ARRAYDW1,2,$+4,3,4,$+4ARRAY0074H01H00H02H00H0078H7CH00H03H00H04H00H007EH82H00H2、ORG伪操作从指定地址开始汇编格式:ORGconstantexpression例如:Org10Vect1dw47a5hOrg20Vect2dw0c596hvect1010a5h47h20vect296hc5h[名字项]操作项操作数项[;注释项]一、名字项标号变量某条指令所在存储单元的符号地址某操作数所在存储单元的符号地址1、标号在代码段定义,后面跟“:”2、变量在代码段以外的段定义,后不跟“:”4.3汇编语言程序格式标号的3个属性:段属性、偏移属性、类型属性标号的3个属性:段属性、偏移属性、类型属性DatasegmentAddrdwnumberNumberdwyCountdw?DataendsCodesegmentAssumecs:code,ds:dataStart:movax,dataMovds,axMovcx,0Movbx,addrMovax,[bx]repeat:testax,0ffffhJzexitJnsshiftInccxShift:shlax,1JmprepeatExit:movcount,cxMovah,4chInt21hCodeendsEndstart例如:变量标号标号标号[名字项]操作项操作数项[;注释项]4.3汇编语言程序格式二、操作项指令、伪指令、或宏指令助记符三、操作数项由一个或多个项组成,多个操作数之间用“,”分开对于指令语句一般为操作数地址、变量、寄存器、标号、或表达式对于伪指令语句或宏指令语句一般为所要的数据或参数常用操作符1、算术操作符+,-,*,/和MOD例4.18:将首地址为BLOCK的字数组的第6个字传送到DX寄存器MOVDX,BLOCK+(6-1)*2例4.19:将ARRAY数组的长度送到CX寄存器ARRAYDW1,2,3,4,5,6ARYENDDW?执行指令MOVCX,(ARYEND-ARRAY)/2汇编后形成MOVCX,62、逻辑与移位操作符AND,ORX,OR,NOT例4.20:INAL,PORT_VALOUTPORT_VALAND0FEH,AL3、关系操作符EQ、NE、LT、GT、LE、GE关系操作符计算的结果为逻辑值结果为真,表示0FFFFH;否则为0例4.22:MOVBX,((PORT_VALLT5)AND20)OR((PORT_VALGE5)AND304、数值回送操作符TYPE、LENGTH、SIZE、OFFSET、SEG将特征或存储器地址的一部分作为数值回送(1)TYPE回送变量或标号的类型变量的类型:DB(1),DW(2),DD(4),DQ(8)标号的类型:NEAT(-1)FAR(-2)常数的类型:0例4.23:ARRAYDW1,2,3ADDSI,TYPEARRAY汇编后形成ADDSI,2(2)LENGTH对于DUP回送分配的单元数,其他情况回送1例4.24:FEESDW100DUP(0)MOVCX,LENGTHFEES汇编后形成MOVCX,100例4.25:FEESDW1,2,3MOVCX,LENGTHFEES汇编后形成MOVCX,1(3)SIZE回送分配给该变量的字节数例4.26:FEESDW100DUP(0)MOVCX,SIZEFEES汇编后形成MOVCX,200(4)OFFSET回送变量或标号的有效地址例如:DATASEGMENTX1DB1,2,3,4,5,6,7DATAENDS将变量X1有效地址送BX则执行指令:MOVBX,OFFSETX1或:LEABX,X1(5)SEG回送变量或标号的段地址用法同上5、属性操作符PTRSHORTTHISHIGHLOW建立或说明一个符号地址的类型例如:DATASEGMENTX1DB1,2,3,4,5,6,7DATAENDSMOVAX,WORDPTRX1[名字项]操作项操作数项[;注释项]4.3汇编语言程序格式四、注释常用系统功能调用01H号读取键盘字符并回显(单字符)调用方式MOVAH,01HINT21H说明等待按键若是CTRL-BREAK则退出其他键,将其ASCLL码送AL寄存器,同时送显示器显示02H号显示字符调用方式MOVAH,02HINT21HDL要显示字符的ASCLL码说明将置入DL寄存器的字符送显示器显示08H号键盘输入单字符不显示调用方式MOVAH,08HINT21H说明将输入的字符送AL寄存器09H号字符串输出显示调用方式DX要显示字符串的首地址MOVAH,08HINT21H说明要显示的字符串一般定义在数据段该字符串必须以定界符“$”为结束标志“$”字符不显示STRINGDB‘Howareyou’,‘$’例如:MOVDX,OFFSETSTRINGMOVAH,09HINT21H0AH号字符串输入调用方式DX接收字符串缓冲区的首地址MOVAH,0AHINT21H说明从键盘接收字符串到内存指定的缓冲区,直到回车为止缓冲区的第一个字节为指定缓冲区的字符个数缓冲区的第二个字节保留,填写实际输入字符的个数缓冲区的第三个字节开始存入输入的字符例如:DATASEGMENTBUFDB80DB?DB80DUP(?)DATAENDS4CH号结束程序返回操作系统调用方式MOVAH,4CHINT21HDatasegmentAddrdwnumberNu
本文标题:第四章、汇编语言程序格式
链接地址:https://www.777doc.com/doc-3778905 .html