




已阅读5页,还剩234页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020/6/6,上海交通大学,1,面向21世纪课程教材普通高等教育“十一五”国家级规划教材,微型计算机技术WeixinJisunjiJishu(第3版)孙德文编著,2020/6/6,上海交通大学,2,第3章8086的汇编语言程序设计,2020/6/6,上海交通大学,3,8086的汇编语言程序设计,3.18086的指令系统3.2汇编语言的基本语法3.3汇编语言程序设计基础,2020/6/6,上海交通大学,4,3.18086的指令系统,3.1.18086指令的寻址方式3.1.28086指令简析,2020/6/6,上海交通大学,5,3.1.18086指令的寻址方式,所谓指令的寻址方式(AddressingMode)是指在指令中操作数的表示方式。由于程序编写上的需要,大多数情况下,指令中并不直接给出操作数的数值,而是给出操作数存放的地址寄存器的地址或存储单元的地址。同时,在许多情况下,操作数的地址也不直接给出,而是给出计算操作数地址的方法。计算机执行程序时,根据指令给出的寻址方式,计算出操作数的地址,然后从该地址中取出操作数进行指令操作码指定的操作,把操作结果送入指定的目的操作数中。一般来说,计算机的寻址方式越丰富,指令系统的功能就越强,工作的灵活性也越大。,2020/6/6,上海交通大学,6,8086指令的寻址方式,立即寻址、寄存器寻址、存储器寻址、串操作寻址、外设IO端口寻址以及程序转移操作寻址。其中,变化最多的是存储器寻址,这种寻址方式又分为:直接寻址、寄存器间接寻址、基址寻址、变址寻址以及基址变址寻址。注意:根据寻址方式计算而得的地址只是有效地址EA段内偏移地址,这一地址还需与所在段的段基值组合后才能形成位的物理地址。,2020/6/6,上海交通大学,7,立即寻址(ImmediateAddressing),立即寻址(的指令直接给出操作数的数值,即指令机器码的最后个或个字节就是操作数立即数。立即数只能作为源操作数,在汇编码指令中,可用十六进制数(以H结尾)、二进制数(以B结尾)和十进制数(不需加特殊符号)表示,也可以使用撇号“”括起来的ASCII码表达的字符和字符串。注意,如果十六进制数以字母AF打头,则必须在前面加上一个“”,这是汇编程序的要求。由于立即数是直接从指令中取得的,所以取数速度较快,这种寻址方式常用来给寄存器或存储器赋初值。,2020/6/6,上海交通大学,8,寄存器寻址(RegisterAddressing),操作数在寄存器中,即寄存器的内容就是操作数的数值。在汇编码指令中,操作数用寄存器的符号来表示。例如,INCAX,其功能为AXAX。这类寻址方式的指令的机器码字节最短,因为个通用寄存器只要用个代码即可区分。另外,由于寄存器是在微处理器芯片的内部,整个操作都在微处理器内部进行,不必执行访问内存的总线周期,因此其执行速度最快。的寄存器寻址中,可用的寄存器有通用寄存器和段寄存器,寄存器可作为源寄存器或与目的寄存器。例如“MOVDS,AX”。,2020/6/6,上海交通大学,9,存储器寻址(MemoryAddressing),对于存储器寻址的指令,操作数在存储器中,在指令操作中,存储器操作数出入微处理器都需经过总线。当EU读或写一个存储器操作数时,必须将一个偏移地址(OffsetAddress)传送给BIU,BIU经过地址运算后产生一个位的物理地址,然后执行存取该操作数所需的总线周期。EU为一个存储器操作数而计算出来的偏移量称为操作数的有效地址EA,这是一个位无符号数,表示该操作数所在存储单元与所在段起始地址的距离(以字节为单位)。,2020/6/6,上海交通大学,10,存储器寻址,一条存储器寻址的指令能访问由基址寄存器内容或与变址寄存器内容或与DISP值组合而得的有效地址EA所决定的存储单元。其中,DISP(Displacement)为位移量,是一个位或位数,DISP包含在指令中,根据程序中操作数名称(变量或标号)的位置推算而得,程序员可修改或规定此值。,2020/6/6,上海交通大学,11,按其有效地址EA的形成方法可分为如下几种,)直接寻址2)寄存器间接寻址)基址寻址)变址寻址)基址变址寻址,2020/6/6,上海交通大学,12,)直接寻址(DirectAddressing),由指令直接给出操作数的偏移地址,它紧跟在操作码之后。例如,INCBYTEPTRAH指令中,存储器操作数的偏移地址为AH。直接寻址指令的另一种表示形式为INCADDR,指令中存储器操作数的地址用符号地址(变量,Variable)ADDR表示。,2020/6/6,上海交通大学,13,2)寄存器间接寻址(RegisterIndirectAddressing),存储器操作数的有效地址直接取自一个基址寄存器(BX)或变址寄存器(SI或DI)。例如INCBYTEPTRBX。,2020/6/6,上海交通大学,14,)基址寻址(BasedAddressing),以基址寄存器BX或BP的内容为基准地址,指令中再给出一个地址位移量D(D或D),它们组合而得存储器操作数的有效地址。汇编码指令中有效地址的表示方法有如下几种:BX(或BP)D,其中,D为常量,例如INCBYTEPTRBP。DBX(或BP),其中,D为变量或常量,例如INCADDRBX。当使用BP作基址寻址时,若无指定段替换,则内定在堆栈段内寻址。若D为常量,则以有符号的二进制数表示,可为位或位值。当D为位值时,有效地址计算中,位移量必须进行符号扩展。,2020/6/6,上海交通大学,15,)变址寻址(IndexedAddressing),指令中给出一个位移量D作为基准地址,再同变址寄存器SI(或DI)的内容相加作为存储器操作数的有效地址。汇编码指令中的有效地址有SI(或DI)D以及DSI(或DI)两种表示,式中D的含义与基址寻址的相同。基址寻址和变址寻址又称为寄存器相对寻址。,2020/6/6,上海交通大学,16,)基址变址寻址(BasedIndexedAddressing),基址寄存器BX(或BP)中存放基准地址,变址寄存器SI(或DI)存放变址值,指令中再给出一个位移量D,三者相加构成存储器操作数的有效地址。其中,D可为位数或位数,也可以无此项。若为位数,在计算中应进行符号扩展。,2020/6/6,上海交通大学,17,基址变址寻址,汇编码指令中的有效地址有两种表示:1、BX(或BP)SI(或DI)D,例如,INCBYTEPTRBXDI;2、DBX(或BP)SI(或DI),例如,INCADDRBXSI。采用BP作为基址时,规定在当前堆栈内寻址。含有D项的基址变址方式又称为相对基址变址寻址方式。,2020/6/6,上海交通大学,18,程序转移寻址,指令在顺序执行时,下一条指令的偏移地址总是由指令指针IP自动递增而得,当程序在本段内发生转移时,需要给出即将转移去执行的那条指令的偏移地址,并用它去取代IP中的原有内容。如果即将转移去执行的指令与原来执行的指令不在同一段中,则还需用新的代码段的段基值去取代CS中的原有内容,此时,操作数作为转移地址使用,分别送到IP和CS。,2020/6/6,上海交通大学,19,程序转移寻址,程序转移寻址方式用于条件转移指令、无条件转移指令、循环指令和转子指令(调用指令)。程序转移寻址方式按目的地址的形式可分为如下几种。,2020/6/6,上海交通大学,20,)相对寻址,以IP的内容为基准地址,加上紧跟指令操作码后的相对位移量D,得到转移地址的偏移地址。转移地址的偏移地址为IPD,D是带符号的二进制数。当D为8位数时,转移范围为128128;当D为16位数时,转移范围为3276832767(注意:不能越段)。例如,条件转移指令JEA和无条件转移指令JMPADDR,指令中的A、ADDR为转移地址的标号。这种寻址方式又称为段内直接转移。,2020/6/6,上海交通大学,21,)段内寄存器寻址,以寄存器的内容为转移地址的偏移地址。例如,“JMPBX”,BX中的内容即偏移地址。,2020/6/6,上海交通大学,22,)段内间接转移寻址,包括前述的存储器操作数中的寄存器间接寻址、变址寻址、基址寻址以及基址变址寻址等几种寻址方式,这些寻址方式求得的操作数即为转移地址的偏移地址。例如,JMPWORDPTRBX,JMPVARBXSI,JMPWORDPTREA(EA为有效地址)。指令中的BX及VARBXSI都表示段内间接转移地址为偏移地址。,2020/6/6,上海交通大学,23,)段间直接转移寻址,程序从一个代码段转移到另一个代码段称为段间转移,实现段间转移不仅要求改变IP中的指令偏移地址,还要改变CS中的段基值。这种寻址方式的转移指令中带有两个位地址,第一个地址为转移地址的偏移值,第二个地址为转移地址的段基值。,2020/6/6,上海交通大学,24,)段间间接转移寻址,在这种寻址方式的转移指令中,要实现段间转移所需的两个位地址,可以用任何数据存储器的间接寻址方式求得,汇编码指令形式为:JMPDWORDPTREA。,2020/6/6,上海交通大学,25,3.28086指令简析,8086的汇编码指令(即汇编语言指令)有多条(以助记符计算),按功能可分为数据传送指令、算术运算指令、位处理指令、串操作指令、程序转移指令和处理器控制指令共大类,,2020/6/6,上海交通大学,26,1.数据传送指令(共14条),2020/6/6,上海交通大学,27,数据传送指令(共14条),src/s源,dest/d目的reg/r寄存器,mem/m存储器(内存)sreg段寄存器,B字节,W字,2020/6/6,上海交通大学,28,数据传送指令(续),1)MOVdest,src(B/W);ds2)PUSHsrc(W);SPSP-2(SP+1)(SP)srcPOPdest(W);dest(SP+1)(SP)SPSP+23)XCHGdest,src(B/W);destsrc,2020/6/6,上海交通大学,29,数据传送指令(续),4.XLAT(B)XLAT变量名/表格首地址(B)ALBX+AL5.LEAreg16,mem(W);reg16EAsrc(loadeffectiveaddress)6.传送是复制(COPY),除XCHG,XLAT外都不改变src.7.除POPF,SAHF外,不影响FR.,2020/6/6,上海交通大学,30,2.算术运算指令(20条),2020/6/6,上海交通大学,31,2020/6/6,上海交通大学,32,算术运算指令(续),1)加法指令ADDdest,src;B/WADCdest,src;B/WDest和src可以是带符号数,也可以是无符号数。INCdest;B/Wdestdest+1INC指令不影响CF。,2020/6/6,上海交通大学,33,算术运算指令(续),2)减法指令SUBdest,src;B/WSBBdest,src;B/WCMPdest,src;B/WDECdest;B/Wdest-1destNEGdest;B/WDEC指令不影响CF。,2020/6/6,上海交通大学,34,NEG指令的三种理解:l)dest求补(全部位取反加l);2)dest变负;3)零减dest。,2020/6/6,上海交通大学,35,算术运算指令(续),3)修正指令DAA,DAS当BCD码进行加或减法运算时,在加法指令和减法指令后,必须加上一条DAA指令(加法)或DAS(减法)指令。,2020/6/6,上海交通大学,36,算术运算指令(续),4)乘除法指令(乘法)MUL,DIVMULr/m(B/W)当r/m为8位时,指令操作为AL*r/m送AX当r/m为16位时,指令操作为AX*r/m送DX_AX(DX_AX表示以DX和AX构成的一个32位寄存器),2020/6/6,上海交通大学,37,算术运算指令(续),乘除法指令(除法)DIVr/m(B/W)当r/m为8位时,指令操作为:AX/(r/m)B,结果商送AL,余数送AH;当r/m为l6位时,指令操作为:DX_AX/(r/m)w,结果商送AX,余数送DX。,2020/6/6,上海交通大学,38,算术运算指令(续),5)扩展指令CBW;AL转换为AX,且AX=ALCWD;AX转换为DXAX,且DX_AX=AX都为符号扩展。,2020/6/6,上海交通大学,39,3.位处理指令(14条),2020/6/6,上海交通大学,40,位处理指令(续),1)逻辑运算指令AND、OR、XOR、TEST、NOT前三条指令执行后,同时使CF=0TEST指令实现”与”操作,但不改变目的操作数,将运算结果的特性反映在标志寄存器中NOT指令不影响标志位。,2020/6/6,上海交通大学,41,位处理指令(续),2)移位指令SHL/SAL(逻辑左移/算术左移),实现相同操作;功能:,2020/6/6,上海交通大学,42,位处理指令(续),移位指令SHR逻辑右移,2020/6/6,上海交通大学,43,位处理指令(续),SAR算术右移,实现带符号数被2除,朝小取整。SHshift,Aarithmetic,2020/6/6,上海交通大学,44,位处理指令(续),3)循环移位指令ROL小循环左移,2020/6/6,上海交通大学,45,位处理指令(续),ROR小循环右移,2020/6/6,上海交通大学,46,位处理指令(续),RCL带进位位左移(大循环左移),2020/6/6,上海交通大学,47,位处理指令(续),RCR带进位位右移(大循环右移),2020/6/6,上海交通大学,48,位处理指令(续),注意:移位和循环移位后移出位都送标志位CF指令格式:SHL/RORreg/mem,countcount=1(移位次数为1时)count=CL(移位次数大于1时),2020/6/6,上海交通大学,49,位处理指令(续),例如:AL逻辑右移4次的指令为:MOVCL,4SHRAL,CL,2020/6/6,上海交通大学,50,4.串操作指令(共5条),2020/6/6,上海交通大学,51,2020/6/6,上海交通大学,52,2020/6/6,上海交通大学,53,串操作指令(续),1)MOVSB;DS:SIBES:DIB,SI/DI+/-1CMPSB;DS:SIBES:DIB,SI/DI+/-1STOSB;ALES:DIB,DI+/-1LODSB;DS:SIBAL,SI+/-1SCASB;ALES:DIB,DI+/-1(教材P50中CMPSB;DS:SIBES:DIB有误),2020/6/6,上海交通大学,54,串操作指令(续),2)若MOVSB改为MOVSW,则改为字操作DS:SIB和ES:DIB改为DS:SIW和ES:DIWCMPSW同MOVSW,STOSW、LODSW和SCASW指令中将原来的AL改为AX而SI/DI+/-1改为SI/DI+/-2,2020/6/6,上海交通大学,55,串操作指令(续),3)若五条串操作指令中来标明B或W,则指令格式为:MOVSdest,srcCMPSsrc,destSTOSdestLODSsrcSCASdest,2020/6/6,上海交通大学,56,串操作指令(续),式中dest和src都为变量名,变量定义时所定义的类型属性决定串操作中的操作类型。,2020/6/6,上海交通大学,57,串操作指令(续),4)5条重复前缀指令例题:要求把内存区中2000H:5000H开始的100个字节数传送到3000H:4000H中,用串操作指令实现之。注意,MOVSB指令每执行一次只能传送一个字节,所以必须编写一段循环程序,,2020/6/6,上海交通大学,58,串操作指令(续),解:MOVAX,2000HMOVDS,AXMOVAX,3000HMOVES,AXMOVSI,5000HMOVDI,4000HMOVCX,100LOP:MOVSBDECCXJNZLOP,2020/6/6,上海交通大学,59,串操作指令(续),若采用重复前缀REP,则最后三条指令可改为:REPMOVSBREP的功能是:重复执行右边的串操作指令CX次,2020/6/6,上海交通大学,60,串操作指令(续),另有4条重复前缀指令:REPZ若CX0,且ZF=1,则重复执行右边的串操作指令若CX=0,或ZF=0,则结束串操作REPNZ若CX0,且ZF=0,则重复执行右边的串操作指令若CX=0,或ZF=1,则结束串操作,2020/6/6,上海交通大学,61,串操作指令(续),REPE与REPZ功能一样,REPNE与REPNZ功能一样。通常REP前缀用于MOVS/MOVSB/MOVSW和STOS/SORSB/STOSW而REPZ/REPE/REPNZ/REPNE前缓用于CMPS/CMPSB/CMPSW和SCAS/SCASB/SCASW。,2020/6/6,上海交通大学,62,5.程序转移指令,2020/6/6,上海交通大学,63,2020/6/6,上海交通大学,64,程序转移指令(续),1)无条件跳转(1)JMP标号/reg/mem标号(label)是代码段中一条指令的符号地址,它可以作为程序转移指令的操作数使用。,2020/6/6,上海交通大学,65,无条件跳转,标号有三属性段属性(段基值)偏移量属性(偏移地址)类型属性(NEAR或FAR),2020/6/6,上海交通大学,66,无条件跳转(续),标号的类型属性为FAR,则实现段间转移,指令为5字节长;标号的类型属性为NEAR,则实现段内转移,指令为3字节长;标号的类型属性为NEAR中的SHORT,则实现段内短转移,指令为2字节长。,2020/6/6,上海交通大学,67,无条件跳转(续),段间跳转时机器指令中的地址为绝对地址,是二个16位地址,偏移地址在前,段基值在后;段内跳转时机器指令中的地址为相对地址,是偏移地址的差值(16位);段内短跳转时机器指令中的地址为相对地址,是偏移地址的差值(8位),2020/6/6,上海交通大学,68,无条件跳转(续),JMPBX;NEAR,功能为:IPBX,2020/6/6,上海交通大学,69,无条件跳转(续),JMPBXBX必须写明:是WORDPTRBX,还是DWORDPTRBX若为WORDPTRBX,则为段内跳转,功能是用BXW送IP;若为DWORDPTRBX,则为段间跳转,功能是用BXDW送CS:IP。,2020/6/6,上海交通大学,70,JMP指令的汇编表示,2020/6/6,上海交通大学,71,无条件跳转(续),(2)CALL标号/reg/mem调用指令,用来调用一个子程序(过程),又称为转子指令。CALL指令的格式同JMP指令,区别在于CALL指令必须保存断点(CS:IP),这是由硬件来实现的。,2020/6/6,上海交通大学,72,无条件跳转(续),(3)RET返回指令,从子程序返回主程序。,2020/6/6,上海交通大学,73,2)条件转移指令,(1)JC/JZ/JS/JO/JP当CF/ZF/SF/OF/PF=1时跳转;JNC/JNZ/JNS/JNO/JNP当CF/ZF/SF/OF/PF=0时跳转JP与JPE等价,JNP与JPO等价;JZ与JE等价,JNZ与JNE等价。,2020/6/6,上海交通大学,74,条件跳转(续),(2)JAaboveJBbelowJLlessJA和JB用于无符号数,JG和JL用于带符号数。JA与JNBE等价,2020/6/6,上海交通大学,75,条件跳转(续),(3)JCXZ当CX=0时跳转所有的条件转移指令都为短跳转,操作数为标号。,2020/6/6,上海交通大学,76,3)重复控制指令,LOOP标号当CX-10时跳到标号处。LOOPZ/LOOPE当CX-10且ZF=1时跳转LOOPNZ/LOOPNE当CX-10且ZF=0时跳转LOOP标号与DECCXJNZ标号等价。,2020/6/6,上海交通大学,77,4)中断指令,INTN;指令中断,N为0255间的正整数INT3;断点中断、单字节中断指令INTO;溢出中断IRET;中断返回,2020/6/6,上海交通大学,78,6.处理器控制指令,2020/6/6,上海交通大学,79,处理器控制指令(续),六条对标志位置l和清0的指令:STISTDSTCCLICLDCLCCF取反指令CMC暂停指令HLT三条控制CPU工作的指令:WAIT(等待),ESC(交权),LOCK(封锁指令)。,2020/6/6,上海交通大学,80,3.2汇编语言的基本语法,3.2.1汇编语言源程序的格式3.2.2常量、标识符和表达式3.2.3指示性语句3.2.4指令性语句3.2.5宏指令,2020/6/6,上海交通大学,81,3.2.1汇编语言源程序的格式,程序是为实现某一特定目的(例如,对数据进行某种处理等)而编写的一组指令的有序集合。汇编语言程序就是用汇编语言编写的源程序。汇编语言是一种面向机器的语言。它是与计算机硬件密切关联的,因而熟悉计算机硬件是汇编语言程序员必须具备的条件。与用高级语言编写程序相比较,汇编语言程序具有更高的效率,它的程序执行时间短且占用内存少,这在计算机实时控制和实时处理中是十分重要的,因而在实时领域中得到广泛的应用。,2020/6/6,上海交通大学,82,汇编语言与汇编程序,用汇编语言编写的源程序必须用汇编程序(一种系统软件)进行汇编,将它转换成用机器语言表示的目标程序后,才能由CPU识别执行。因此编制程序时必须遵循规定的格式和语法。不同型号的CPU和不同版本的汇编程序,其汇编语言是不同的。对于同一系列的CPU,则是向上兼容的,2020/6/6,上海交通大学,83,例3-1对10个字节数据a1a10求和。,DATASEGMENTAT2000HARRAYDBa1,a2,a3,a10COUNTEQUARRAYSUMDW?DATAENDSSTACKSEGMENTPARASTACK餐STACK餐STAKDB10DUP(?)TOPEQULENGTHSTAKSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,2020/6/6,上海交通大学,84,例3-1,START:MOVAX,DATAMOVDS,AXMOVAX,0MOVDI,OFFSETSUMMOVBX,OFFSETARRAYMOVCX,COUNTLOP:ADDAL,BXADCAH,0INCBXLOOPLOPMOVDI,AXMOVAH,CHINT21HCODEENDSENDSTART,2020/6/6,上海交通大学,85,汇编语言的两个组成特点,分段结构和语句行.分段结构的程序是分段的,由此可知程序最多可由种段组成,并分别将段寄存器CS、DS、ES和SS的内容作为段基值,每段所占内存容量可达KB。上例程序共有段,它们分别是数据段(段名DATA)、堆栈段(段名STACK)和代码段(段名CODE),各段由命令SEGMENT开始,并由命令ENDS结束。,2020/6/6,上海交通大学,86,语句行,.语句行上例程序共有行,即共有个语句行。汇编语言程序的语句有两类:指令性语句和指示性语句。,2020/6/6,上海交通大学,87,语句行,指令性语句是主要由指令构成的语句,其格式为标号:操作码操作数;注释其中操作码和操作数是用助记符表示的指令的两个部分,操作数可以是个、个或几个,也可以无操作数(或是默认的)。,2020/6/6,上海交通大学,88,1)指令性语句,其中带方括号的有三项:标号、操作数和注释。带有方括号表示该项是任选项,即根据具体编程需要该项可有可无,在实际语句中该项的方括号是不写出来的。标号具有该语句指令所在内存地址的属性,通常在转移指令中用做目的地址。注意,标号必须用冒号“:”结尾,这是语法的规定。用分号“;”开始的注释用来说明该语句在程序中的作用,以方便程序的阅读和修改,这项也是任选的。,2020/6/6,上海交通大学,89,)指示性语句,指示性语句是主要由命令(也称伪指令)构成的语句,用来指示汇编程序进行汇编操作,其格式为名字变量命令参数;注释其中,“命令”指示汇编程序进行某种汇编操作,“参数”是有关的数据,带方括号的项是任选项。,2020/6/6,上海交通大学,90,3.2.2常量、标识符和表达式,1.常量2.标识符3.表达式,2020/6/6,上海交通大学,91,1.常量,常量是其值在程序中不能改变的量,在汇编语言源程序中的常量有:数字常量、字符常量和符号常量(1)数字常量可以是二进制数、八进制数、十进制数或十六进制数表示(2)字符常量是用单引号括起来的ASCII字符其值是该字符的ASCII代码值(3)符号常量是用符号定义的常量。例如,采用符号定义语句PORTAEQU80H,则指令MOVAL,PORTA与指令MOVAL,80H等价。,2020/6/6,上海交通大学,92,2.标识符,在编程时建立的有特定意义的字符序列,标识符可用作符号常量、名字、变量和标号等。组成标识符有如下规定:(1)组成标识符的字符有:英文大写字母:AZ;英文小写字母:a-z;数字09;字符?、_、$;(2)字符长度不超过3l个;(3)首字符不能是数字;(4)?不能单独作为一个标识符;(5)不能把保留字用作标识符,保留字包括助记符、寄存器名等。,2020/6/6,上海交通大学,93,3.表达式,表达式由操作数和运算符组成。操作数可以是常量、名字、变量和标号等。运算符包括算术运算符、逻辑运算符、关系运算符、分析运算符和合成运算符等。,2020/6/6,上海交通大学,94,表达式中的运算符,2020/6/6,上海交通大学,95,3.2.3指示性语句,1.程序开始和结束语句2.段定义语句3.过程定义语句4.数据定义语句5.符号定义语句,2020/6/6,上海交通大学,96,1.程序开始和结束语句,(1)NAME命令给程序模块命名格式:NAME名字(2)TITLE命令格式:TITLE名字名字作为每页标题打印出来,标题名字符不大于60个,2020/6/6,上海交通大学,97,程序开始和结束语句,(3)END命令格式:END标号主模块结束必须写上标号,标号是程序中第一句指令性语句的标号。,2020/6/6,上海交通大学,98,2.段定义语句,用来定义一个段(1)SEGMENT/ENDS命令格式:段名SEGMENT参数.段名ENDS,2020/6/6,上海交通大学,99,段定义语句,段名由程序员定义,汇编时由系统为该段分配一个段基值,并将该值赋于段名。SEGMENT语句中的参数为:定位类型组合类型类别用来设定该段在内存中的位置和在汇编、连接时,当该段与其它段组合在一起时该段同其它段的连接关系。都是任选项。,2020/6/6,上海交通大学,100,定位类型(aligntype),定位类型用来指定该段段基值的边界条件,定位类型有以下四种:a.BYTE-该段可从任何地址开始,即段基址=XXXX,XXXX,XXXX,XXXX,XXXXB,其中X表示任意值,即1/0。b.WORD-该段必须从字的边界开始,即段基址=XXXX,XXXX,XXXX,XXXX,XXX0B。,2020/6/6,上海交通大学,101,定位类型,c.PARA该段必须从小节的边界开始,即段基址=XXXX,XXXX,XXXX,XXXX,0000B。d.PAGE该段必须从页的边界开始,即段基值=XXXX,XXXX,XXXX,0000,0000B。注意:当定位类型缺省(即不写)时,隐含值为PARA。,2020/6/6,上海交通大学,102,组合类型(combine-type),在汇编和连接时,当该段与其他段组合在一起时,组合类型用来设定该段与其他段的连接关系,组合类型有以下六种。,2020/6/6,上海交通大学,103,组合类型,a.PUBLIC该段连接时将与其他同名段依次连接起来,其连接次序由连接程序确定.b.COMMON该段连接时将与其他同名段有相同的段基值,即共享相同的存储空间,亦即各段会产生覆盖,但可节省内存容量。c.ATexp使段基值等于按表达式exp计算所得的16位数,必须指出,对于代码段不能用ATexp来设定段基值。,2020/6/6,上海交通大学,104,组合类型,d.STACK仅用于堆栈段,使同名段都连接成一个连续段,且系统自动对SS和SP初始化。e.MEMORY指定该段在同名段的最后,即该段在同名段中位于最高的地址空间,若连接时有几个组合类型为MEMORY的段,则只有最前面(最先遇到)的段按组合类型MEMORY处理,其他段句按组合类型PUBLIC处理。f.NONE表示本段与其他段逻辑上不发生关系,各段都有自己的段基值。注意:当组合类型缺省(即不写)时,隐含值为NONE。,2020/6/6,上海交通大学,105,段定义语句,(2)ORG命令偏移地址定位语句指定某一语句在段内的偏移地址格式:ORGexpexp为能计算出16位立即数的表达式,2020/6/6,上海交通大学,106,段定义语句,(3)ASSUME命令ASSUME命令紧跟在代码段的SEGMENT语句之后,用于指示下述程序中段寄存器同指定段名的对应关系格式:ASSUMECS:段名1,DS:段名2,SS:段名3,ES:段名4,2020/6/6,上海交通大学,107,段定义语句,注意:ASSUME语句仅指出段寄存器同段名的对应关系,并未对段寄存器赋值,在程序中未用到的段寄存器不必指示。,2020/6/6,上海交通大学,108,3.过程定义语句,应用PROC/ENDP命令定义过程(procedure),过程即子程序,是程序的一部分,程序中用CALL指令调用过程,过程结束用RET指令返回程序。,2020/6/6,上海交通大学,109,过程定义语句,格式:过程名PROC类型过程名ENDP类型为FAR/NEAR,2020/6/6,上海交通大学,110,4.数据定义语句,用来为数据分配内存单元。格式:变量命令参数1,参数2,;注释变量是内存中一组数的名字,由程序员在编程时用标识符定义,变量可以作为内存操作数来使用。,2020/6/6,上海交通大学,111,数据定义语句,数据定义语句中的命令可以是:DB定义字节数据(8位)DW定义字数据(16位)DD定义双字数据(32位)DQ定义8字节数据(64位)DT定义10字节数据(80位),2020/6/6,上海交通大学,112,数据定义语句,参数是相应内存单元中的数据,可以是:数字常量用各种规定的数制表示;字符常量用单引号括起来的ASCII字符;符号常量用EQU语句定义。,2020/6/6,上海交通大学,113,数据定义语句,?保留一个存储单位,以备程序执行过程中存入结果数据;?保留4个存储单位;ARYDB4DUP(43H)表示定义一个变量ARY,在内存中开辟一个数组,存放4个43H。,2020/6/6,上海交通大学,114,数据定义语句,DUP为复制符格式:复制次数DUP(数据),2020/6/6,上海交通大学,115,数据定义语句(例),DATA1SEGMENTAT2000HORG3000HARY1DB12H,34H,56H,78HARY2DW1234H,5678HARY3DBA,B,C,D,ABCDARY4DWABARY5DDABARY6DWAYT2ARY7DDARY2,2020/6/6,上海交通大学,116,数据定义语句(例),在定义ARY6的语句中,参数为已定义的变量ARY2,其值为ARY2的偏移地址3004H;在定义ARY7的语句中,参数为已定义的变量ARY2,其值为ARY2的偏移地址3004H和段基值2000H。,2020/6/6,上海交通大学,117,5.符号定义语句,(1)EQU命令等值命令格式:名字/变量EQUexp(2)=命令等号命令格式:名字=exp(3)PURGE命令用来撤消已定义的符号常量格式:PUREG名字可同时撤消几个己定义的名字,2020/6/6,上海交通大学,118,6.名字与变量,1)名字名字包括文件名、标题名、段名、过程名和符号常量名等,是程序员在编程中按标识符规定命名的,目的是方便编程和读程。,2020/6/6,上海交通大学,119,名字,(1)段名在段定义语句中命名取定,定义后的段名可以作为段基值来使用,用来对段寄存器赋值,例如:MOVAX,DATA1MOVDS,AX,2020/6/6,上海交通大学,120,名字,(2)过程名在过程定义语句中定义,指向过程中第一条指令所在的内存单元的地址,即过程的入口地址,有NEAR和FAR之分。(3)符号常量由符号定义语句EQU、=来定义,对符号常量给以赋值。,2020/6/6,上海交通大学,121,2.变量,(1)变量的定义和属性变量由数据定义语句DB/DW/DD/DQ/DT来定义。变量有三属性:,2020/6/6,上海交通大学,122,变量,变量有三属性:段属性说明该变量在哪个存储段中;偏移地址属性说明该变量的段内偏移量;类型属性说明该变量所在内存数据的类型(字节、字、双字、8字节还是10字节)。,2020/6/6,上海交通大学,123,变量,(2)分析运算符(Analyticoperator)用于把变量的三个属性分别取出来作为操作数。有SEG、OFFSET.、TYPE、LENGTH和SIZE。SEG变量名-取出变量的段基值OFFSET变量名-取出变量的偏移地址TYPE变量名-取出变量的类型值,字节数据为1、字数据为2、双字数据为4、8字节数据为8、10字节数据为10。,2020/6/6,上海交通大学,124,变量,LENGTH变量名:表示变量所在数组的元素个数。注意:只有当数据用DUP定义时,才适用,否则恒为1。SIZE变量名:表示变量所在数组的字节数。注意:同LENGTH,SIZE变量=LENGTH变量*TYPE变量,2020/6/6,上海交通大学,125,变量,(3)合成运算符(a)PTR运算符类型PTRexp其中类型是BYTE、WORD、DWORD(变量)FAR、NEAR(标号)exp为表达式,是存储器操作数,,2020/6/6,上海交通大学,126,PTR运算符,用于临时改变变量或标号的类型属性例如:BUFWDW1234H,5678HMOVAX,BUFWMOVAL,BYTEPTRBUFW也可用来指定内存操作数的类型例如:INCBYTEPTRBXINCWORDPTRBX,2020/6/6,上海交通大学,127,PTR运算符,也可用EQU和PTR定义一个新的变量例如:BUFWDW1234H,5678HBUFBEQUBYTEPTRBUFW则MOVAX,BUFW和MOVAL,BUFB都是合法的。,2020/6/6,上海交通大学,128,(b)THIS类型类似于PTR运算符,THIS与EQU一起用来定义一个新变量名。例如:BUFBEQUTHISBYTEBUFWDW1234H,5678HEQU语句必须紧跟在DW语句(已定义的变量名之前),THIS运算符,2020/6/6,上海交通大学,129,LABEL命令,(c)LABEL命令格式:变量/标号LABEL类型用来定义语句中的变量(或标号)例如:BUFBLABELBYTEBUFWDW1234H,5678HLABEL语句必须紧跟在DW语句(已定义的变量名之前)。,2020/6/6,上海交通大学,130,3.2.4指令性语句,格式:标号:操作码操作数,操作数;注释一、标号标号是一条指令在内存中的符号地址.标号可以用作内存操作数。,2020/6/6,上海交通大学,131,1.标号,标号有三属性(l)段属性:表示标号所在段的段基值;(2)偏移量属性:表示标号所在位置的偏移地址;(3)类型属性:表示标号所在指令是允许段内跳转还是段间跳转。,2020/6/6,上海交通大学,132,标号,用PTR重新指定标号类型设已定义标号METER则段内转移用JMPMETER;段间转移用JMPFARPTRMETER,2020/6/6,上海交通大学,133,标号,用EQU和PTR定义新标号:METER:.KILOMTEQUFARPTRMETER用EQU和THIS定义新标号:KILOMTEQUTHISFARMETER:.,2020/6/6,上海交通大学,134,标号,用LABEL定义新标号:KILOMTLABELFARMETER:.,2020/6/6,上海交通大学,135,2.操作数,操作数可以用段名、符号常量、变量、属性表达式、过程名和标号等。例如:MOVAX,DATA;DATA是段名MOVCX,COUNT;COUNT是符号常量MOVBL,BUFFER;BUFFER是变量MOVSI,OFFSETARRAY;OFFSETARRAY是属;性表达式CALLSBRT1;SBRT1是过程名JMPDONE;DONE是标号,2020/6/6,上海交通大学,136,3.3汇编语言程序设计基础,3.3.1概述3.3.2顺序程序3.3.3分支程序3.3.4循环程序3.3.5子程序3.3.6汇编语言程序举例3.3.7系统功能调用,2020/6/6,上海交通大学,137,3.3.1概述,程序(PROGRAM)是完成特定功能的一组指令的有序集合程序设计的步骤是:分析课题确定算法画流程图编写程序上机调试、修改,2020/6/6,上海交通大学,138,3.3.2顺序程序,*指令顺序执行,无分支、无转移、无循环。*硬件支持是IP自动加1,从内存取出一个指令字节,IP自动加1。,2020/6/6,上海交通大学,139,例3-17查表求平方值,DATASEGMENTTABLESQDB0,1,4,9,16,25,36,49,DB64,81,100,121,144,169,196,225XXDBX;X为015的正整数YYDB?DATAENDSSTACKSEGMENTPARASTACKSTACKDB50DUP(?)STACKENDS,2020/6/6,上海交通大学,140,查表求平方值(续),CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVBX,OFFSETTABLESQMOVAH,0MOVAL,XXADDBX,AXMOVAL,BXMOVYY,ALMOVAH,4CHINT21H,2020/6/6,上海交通大学,141,查表求平方值(续),注意几个问题1.程序结束方法1)设计为一个“过程”(PROCEDURE)2)以MOVAH,4CHINT21H即4CH号功能调用结束。2.MOVAH,0;AH置0的必要性。3.MOV,ADD指令中d和s必需是相同类型。,2020/6/6,上海交通大学,142,例3.18非压缩的BCD码转换为压缩的BCD码,MOVAX,DAT1;AX=0109MOVCL,4;CL=4SALAH,CL;AH=10HROLAX,CL;AX=0091ROLAL,CL;AL=19HMOVBYTEPTRDATA,ALDAT1DW0109H,2020/6/6,上海交通大学,143,3.3.3分支程序,1.分支程序二要素具有判断和转移功能的程序。(1)判断:运算结果的状态标志CF,PF,ZF,SF,OF;(2)转移:主要是条件转移指令Jcc,cc为条件。单标志位判断JC,JZ,JO,JP,JS,JAE等;多标志位判断JA,JG,JGE等。,2020/6/6,上海交通大学,144,分支程序,2.采用比较指令和转移指令实现分支CMPd,s;dsJcc标号,2020/6/6,上海交通大学,145,例3-19符号函数处理,有一符号函数Y=f(X)1;X0Y=0;X=01;X0,2020/6/6,上海交通大学,146,符号函数处理,MOVAL,XXCMPAL,0JGEBIGRMOVAL,0FFHMOVYY,AL;X0时,1送入YY单元HLTEQUL:MOVYY,AL;X0时,0送入YY单元HLT注意:JGE是用于帶符号数的指令MOVAL,0FFH;AL1,2020/6/6,上海交通大学,148,例3-20数据块传送程序,DATASEGMENTSTRGDB1000DUP(?)STG1EQUSTRG+7STG2EQUSTRG+25STRSEEQU50DATAENDSSTACKSEGMENTPARASTACKSTACKSTARNDB100DUP(?)STACKENDS,2020/6/6,上海交通大学,149,数据块传送程序,COSEGSEGMENTASSUMECS:COSEG,DS:DATA,ES:DATA,SS:STACKMOVAX,DATAMOVDS,AXMOVES,AXMOVCX,STRSEMOVSI,OFFSETSTG1MOVDI,OFFSETSTG2CLD,2020/6/6,上海交通大学,150,数据块传送程序,PUSHSIADDSI,STRSE1CMPSI,DIPOPSIJBOKSTD;减量方式传送ADDDI,STRSE1;指向数据块底部ADDSI,STRSE1OK:REPMOVSB;重复传送50个数据MOVAH,4CHINT21H,2020/6/6,上海交通大学,151,数据块传送程序,变量为STRG、STGl,STG2符号常量为STRSEMOVSB的功能为DS:SIBES:DIBDS=ES=DATA注意CLD和STD的作用。,2020/6/6,上海交通大学,152,数据块传送程序,如何判断源数据块与目的数据块是否有交叠:由源数据块末地址同目的数据块首地址的关系决定两数据块不交叠的条件是:源数据块末地址目的数据块首地址即指令段ADDSI,STRSE1CMPSI,DIJBOK,2020/6/6,上海交通大学,153,3.利用跳转表实现分支,内存中连续存放的一系列跳转地址、跳转指令或关键字组成一个决定程序分支的跳转表。主要问题是计算表地址表地址=表基地址+偏移量,2020/6/6,上海交通大学,154,跳转地址组成的跳转表,2020/6/6,上海交通大学,155,例3-21跳转表中存放跳转地址,DATASEGMENTBASEDWSBR0,SBR1,SBR2,SBR3DWSBR4,SBR5,SBR6,SBR7BNDBX;X为07之间的正整数DATAENDSSTACKSEGEMNTPARASTACKSTACKDB100DUP(?)COSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACKMOVAX,DATAMOVDS,AXMOVAL,BN,2020/6/6,上海交通大学,156,跳转表中存放跳转地址,MOVAH,0ADDAL,ALMOVBX,FOFS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省九江市少年宫科学动力机械课程(教学设计)-飞轮车
- 本章综合与测试教学设计-2025-2026学年高中信息技术粤教版2019选修4 人工智能初步-粤教版2019
- 2025年中考物理试题分类汇编(全国)声现象(第1期)原卷版
- 第二课 蒸茄子教学设计-2025-2026学年小学劳动粤教版劳动技术五年级上册-粤教版(劳动技术)
- 蓄电池讲解课件
- 蓄电池知识培训收获总结
- 2025年招聘洗碗工面试题及答案
- 2025年汽车驾驶员(技师)职业技能考试题及答案
- 2025年新疆社工考试题库及答案
- 葡萄酒类科普知识培训课件
- 工程地质岩芯描述细则及范例
- 大学宿管部部长竞选稿
- 2023-2024苏教版小学四年级数学上册(全册)教案设计
- 烟草行业应急预案编制与管理培训
- 2024事业单位食堂考试题及答案
- 酒店定位分析报告
- 光学设计 第3讲 色度学
- 《艺术概论》课件-第二章 艺术的功能
- 吴《园林植物配置技术》课件
- 技术文档编制管理规定
- 集成电路芯片测试技术PPT全套完整教学课件
评论
0/150
提交评论