您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理与接口技术第七章
1上机环境硬件系统软件应用软件操作系统:DOS系统编辑器:EDIT.exe编程序:MASM.exe连接程序:LINK.exe调试程序:DEBUG.exe用户开发的程序:ABC.exe等CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备2汇编语言上机过程D:EDITABC.asmD:MASMABC;有语法错,回EDIT下改该程序D:LINKABC;有错,回在EDIT下改程序D:ABC运行结果错,回EDIT下改程序或在DEBUG下调试,找原因。D:DEBUGABC.exe3编辑源程序EDITABC.ASM汇编源程序MASMABC.ASM形成目标程序ABC.OBJ连接目标程序LINKABC.OBJ形成可执行程序ABC.EXE运行程序用DEBUG调试4§7.2伪指令(指示性语句)伪指令是汇编语言程序中的指示性语句,它体现程序员的汇编意图,其作用是在源程序汇编时指导汇编程序汇编而不会产生目标代码和占用内存。伪指令的具体功能是向汇编程序提供下列信息:如何分段、段的定义和说明,段间关系,模块的定义和说明以及模块间的关系,数据的定义,开始汇编和结束汇编等。5指示性语句与指令性语句:指令性语句是用指令系统中的指令构成的语句。例MOVAX,BX指示性语句是指示汇编程序进行汇编的操作。例MOVAX,4+8中的+codeSEGMENT中的SEGMENTMOVBX,OFFSETstring中的OFFSET6指示性语句与指令性语句区别一个程序经汇编,连接和装入内存后,在执行程序之前:◢指示性语句的功能已经完成,故又称伪指令。◢而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。7一、符号定义伪指令1、等值语句:格式符号名EQU表达式▲作用是用符号名等值指定的表达式其中表达式可以是任何有效的操作数汇编时用语句中的表达式代替程序中符号所在的地方。▲应用:1.定义符号常量,方便修改程序。2.某表达式多次出现时,用等值伪指令可以方便编程。8例如:EMPEQU8COUNTEQUEMP+62、等号语句:格式符号名=表达式作用是用符号名等值指定的表达式,用“=”定义的符号名可重新定义。例如:NMU=6NMU=NMU+69二、数据定义伪指令格式变量名助记符操作数[,操作数,...]▲用来定义程序中所用的内存操作数。其中变量名指示内存操作数的地址(符号地址)助记符指示内存操作数的类型(字节、字、双字等)操作数指示内存操作数的内容。▲常用的类型助记符有:DB指示其后的操作数为字节类型DW指示其后的操作数为字类型DD指示其后的操作数为双字类型DQ指示其后的操作数为八字节类型DT指示其后的操作数为十字节类型10例:DATA-BYTEDB10,4,10HDATA-WORDDW100,100H,—5HDATA-DWDD6+20,0FFFDH数据定义伪指令中的表达式也可以是字符串如:MESSDB‘ABCD’数据定义伪指令的表达式中会出现“?”数据项,ABCDB?,?,DEFDW?,50,?这时汇编程序会对“?”数据项保留相应的存储空间,而不存入数据。110AH04H10HDATA-BYTE64H00HDATA-WORD00H01HFBHFFH1AH00H00H00HDATA-DW100100H-52612MESS41H42H43H44HABCDEF32H注意:3个及其以上的字符,只能用DB定义可用DUP复制操作符定义相同的操作数,其格式为重复次数DUP(操作数)例EEDB3DUP(4)等价于EEDB4,4,413可用DUP复制操作符定义相同的操作数,其格式为重复次数DUP(操作数)例EEDB3DUP(4)等价于EEDB4,4,4例:EDDB10DUP(?)相当于定义10个空单元。14三、段定义伪操作格式段名SEGMENT[定位类型][组合类型][类别]、、、、、、段名ENDS▲段定义由伪操作SEGMENT开始、ENDS结束。其中:SEGMENT和ENDS必须成对出现,且语句前必须有段名,段名必须相同。▲SEGMENT和ENDS语句之间可以有指令和其他伪操作,表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理▲程序中可以定义多个段。▲程序经汇编、连接及装入内存后,段名为一具体的段值。15AASEGMENT;数据段1str1DB'Hello!’AAENDSBBSEGMENT;数据段2str2DB6dup(?)BBENDSCCSEGMENT;代码段ASSUMECS:CCASSUMEDS:AA,ES:BBstart:CLDMOVAX,AAMOVDS,AXLEASI,str1数据传送源程序:MOVAX,BBMOVES,AXLEADI,str2MOVCX,6REPMOVSBMOVAH,4CHINT21HCCENDSENDstart16定位类型、组合类型和类别说明段的属性,它们用方括号括起来表示可以缺省。若不缺省,各项排序不能错,项与项要用空格分开。定位类型有四种:PAGE(页)型要求该段物理地址低8位全为0PARA(节)型要求该段物理地址低4位全为0WORD型要求该段物理地址码为偶数(最低位为0)BYTE型该段的物理地址可为任意值。组合类型说明本段与其它段的关系。‘类别’它可以是任何合法的名称。17四、段寄存器说明ASSUME伪指令格式ASSUME段寄存器:段名[,段寄存器:段名,…]其中段寄存器为CS、DS、ES、SS中的一个段名为用伪操作SEGMENT定义过的段名例ASSUMECS:CC,DS:AA▲ASSUME伪操作的作用指示汇编程序指令中用到的标号、过程及变量所在的段。其中对标号、过程必须用CS段寄存器指示对变量可用CS、DS、ES、SS段寄存器指示18▲若未用ASSUME语句指示指令中用到的标号、过程和变量所在的段,汇编程序将给出错误信息。▲ASSUME语句只起指示作用,并无实际的操作。在程序中引用定义的变量做内存操作数时,需按寻址方式用传送指令(如MOV)给相应的段寄存器赋值。19例用程序实现1234H+5678HdataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;给DS赋值MOVDS,AXMOVAX,value;取数ADDAX,value+2;两数相加MOVresult,AX;保存结果MOVAH,4CH;返回DOSINT21HcodeENDSENDstart12H34H78H56Hvalueresult20五、过程定义伪操作格式过程名PROC类型、、、过程名ENDP▲过程定义由伪操作PROC开始、ENDP结束。其中:PROC和ENDP必须成对出现,且语句前必须有过程名,过程名必须相同。▲PROC和ENDP语句之间为子程的指令序列。▲程序中可以定义多个过程。▲程序经汇编、连接及装入内存后,过程名为一具体的内存地址,指示子程入口。21▲过程名常用作CALL调用指令的操作数,子程的最后安排RET返回指令,使执行完子程后能返回调用处。▲过程有两种类型:NEAR和FAR无类型项时,默认为NEAR类型。当过程与调用指令不在同一段时,应将过程定义为FAR类型。过程类型决定子程中RET的返回类型22例1displayPROC、、、、、、RET;NEAR属性的过程对应段内返回displayENDP例2displayPROCFAR、、、、、、RET;FAR属性的过程对应段间返回displayENDP23六、模块定义和程序结束伪操作1.NAME和TITLE伪操作格式NAME模块名格式TITLE模块名▲在源程序开始可用NAME或TITLE为模块命名,模块名的作用是指示给连接程序进行连接用。▲源程序中可无模块定义,此时源文件名作为模块名。242.END伪操作格式END启动地址▲作用是指示源程序到此结束。汇编程序对END之后的语句不进行处理。程序中所有有效语句应放在END语句之前。▲源程序中必须有END结束语句。汇编程序对无END语句的源程序不进行处理,只给出无END语句错误信息。25七、数值回送操作符:(自学)课前5分钟TYPE,LENGTH,SIEE,OFFSET,SEG5种。把一些特征或存贮器地址的一部分作为数值回送。·TYPE格式:TYPEvariable变量则回送该变量的以字节数表示的类型(DB为1,DW为2,DD为4,DQ为8,DT为10)或label标号回送标号类型数值(NEAR为-1,FAR为-2)例:ARRAYDW1,2,3ADDSI,TYPEARRAY汇编程序其形式:ADDSI,226·LENGTH格式:LENGTHvariable对于变量中使用DUP汇编回送分配给变量单元数,其他情况回送1。例:FESSDW100DUP(0)对于MOVCX,LENGTHFEES汇编程序将其形式:MOVCX,100其他情况27例:ARRAYDW1,2,3对于指令MOVCX,LENGTHARRAY汇编程序将使其形式为:MOVCX,1例:TABLEDB‘ABCD’对于指令MOVCX,LENGTHTABLE汇编程序使其形式为:MOVCX,128·SIEE格式:SIEEvariable回送分配给该变量的字节数LENGTH*TYPE例:FEESDW100DUP(0)MOVCX,SIZEARRAY将形成:MOVCX,20029例:TABLEDB‘ABCD’MOVCX,SIEETABLE将形成MOVCX,1例:ARRAYDW1,2,3MOVCX,SIEEARRAY形式MOVCX,2LENGTH*TYPE=230其中:TYPE变量的返回值是类型的字节数:DB为1,DW为2,DD为4,DQ为8,DT为10;TYPE标号的返回值是:NEAR为-1,FAR为-2。LENGTH变量返回DUP分配的单元数,对于其他情况则返回1。SIZE返回值是:LENGTH和TYPE值的乘积,即变量的字节数。31八.数值返回操作符(SEG、OFFSET)SEG取符号地址的段地址例MOVAX,SEGyyOFFSET取符号地址的偏移地址例MOVBX,OFFSETyy32注意:SEG、OFFSET只能对符号地址操作MOVAX,SEG[BX]MOVBX,OFFSET[SI]
本文标题:微机原理与接口技术第七章
链接地址:https://www.777doc.com/doc-4012318 .html