计算机原理与汇编汇编语言基础.ppt

上传人:zhu****ei 文档编号:3590452 上传时间:2019-12-18 格式:PPT 页数:76 大小:504.50KB
返回 下载 相关 举报
计算机原理与汇编汇编语言基础.ppt_第1页
第1页 / 共76页
计算机原理与汇编汇编语言基础.ppt_第2页
第2页 / 共76页
计算机原理与汇编汇编语言基础.ppt_第3页
第3页 / 共76页
点击查看更多>>
资源描述
汇编语言概述,一、概述1.高级语言与汇编语言比较,高级语言:语句变量说明/定义inty,a=25,b=3,c=76;给变量赋值y=2(a+b)-c,汇编语言:指令分配寄存器分配存储单元数据传递,2.汇编程序结构数据段堆栈段代码段,;设置数据段DATASEGMENTADB25;数据ABDB3;数据BCDB76;数据CYDB?;存放结果DATAENDS;设置堆栈段STACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDS,示例:,y=2(a+b)-c,;设置代码段COSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1START:MOVAX,DATA;装填段寄存器DSMOVDS,AXMOVAL,A;取数据AADDAL,B;计算(A+B)SALAL,1;计算2(A+B)SUBAL,C;计算2(A+B)-CMOVY,AL;存结果MOVAH,4CH;结束用户程序,返回操作系统INT21HCOSEGENDSENDSTART,示例:,汇编语言:是汇编格式指令,伪指令的集合及其表示,使用这些指令的一组规则。机器语言:用二进制编码的机器指令的集合及一组使用规则,它是CPU能直接识别的唯一语言。MOVDS,AX汇编语言8ED8机器语言(目标代码),汇编语言与机器语言,汇编语言与目标代码的对应,与机器语言相关效率高编写源程序繁琐调试困难,汇编语言特点,(1)程序执行占用较短的时间,或者占用较小存储容量的场合。(2)程序与计算机硬件密切相关,程序直接控制硬件的场合。(3)需提高大型软件性能的场合。(4)没有合适的高级语言的场合。,汇编语言的主要应用场合:,二、汇编语言语句种类,语句种类指令语句:又叫可执行语句,在汇编时产生一个目标代码,对应机器的一种操作。伪指令语句:又叫命令语句。用于指示汇编程序如何汇编源程序,没有目标代码与之对应。宏指令语句:由用户自定义的指令。(指令的扩展),格式:名字操作符操作数;注释指令语句:标号:助记符操作数,操作数;注释伪指令语句:名字定义符参数,.,参数;注释命名规则:可以用?,_,数字和英文字符。名字的第一个字符不能是数字。名字的长度不受限制,但只有前31个字符有效。不允许用保留字作名字(指令,伪指令,寄存器名等)。,二、汇编语言语句格式,指令语句:标号:助记符操作数,操作数;注释,1标号:标号是机器指令语句存放地址的符号表示,代表该指令目标代码的第一个字节地址,后面必须紧跟冒号“:”。2指令助记符:指令助记符为语句的核心成分,表示了该语句的操作类型。“MOV”3操作数:操作数表示指令助记符的操作对象。4注释:注释均以分号开始,它可占一行或多行,一般放在一条语句的后面。,伪指令语句:名字定义符参数,.,参数;注释,1名字(符号名):伪指令语句的一个可选项,空格表示结束,不得使用冒号。2定义符(伪指令符):指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪指令SEGMENT,假定伪指令ASSUME等。3参数(操作数):伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔。4注释:伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。,三、符号定义语句,1.等值语句格式:符号EQU表达式表达式:常数或数值表达式地址表达式变量或标号CONSTEQU10ADR1EQUDS:BP+14HADR2EQUCONST+10COUNEQUVAR同一符号不能用EQU重新定义。汇编时,作为替代符号用,不产生目标代码,不占用存储单元。,2.等号语句格式:符号=表达式CONT=5NUM=10HNUM=NUM+20H表达式形式同上,但可多次重新定义同一符号。,三、符号定义语句,例:DATASEGMENTDA1DB9AHDA2DW5678HDA3DD12345678HDATAENDS,变量的属性:段属性SEG偏移属性OFFSET类型属性TYPE,四、数据定义语句,格式:变量名DB/DW/DD表达式1,表达式2,.保留存储空间,并可以完成数据的初始化。,格式:变量名DB/DW/DD表达式1,表达式2,.表达式:(1)数值(2)字符/字符串(3)?表达式:分配相应数量的存储单元,但不初始化。(4)带DUP的表达式:使用重复数据操作符DUP,能方便地定义连续的存储单元。格式:变量名DB/DW/DD表达式1,DUP(表达式2)次数内容操作符DUP可以嵌套使用:DA_B3DB10HDUP(4DUP(3),8),四、数据定义语句,DA_BYTE1DB50HDA_BYTE2DB10H,20H,30H,40HDA_WORD1DW0A34HDA_WORD2DW1234H,5678H,9ABCHDA_DWORDDD12345678H,9ABCDEFH,数值表达式,STRING1DBSTRINGSTRING2DWST,RI,NGSTRING3DDST,RI,NG,字符串表达式,DA_BYTE3DB?,?DA_WORD3DW?,?,?表达式,DA_B1DB10HDUP(?)DA_B2DB20HDUP(ABCD)DA_W1DW10DUP(4)DA_W2DW10DUP(-1,1),带DUP表达式,格式:变量名DB/DW/DD表达式1,DUP(表达式2)操作符DUP可以嵌套使用DB10HDUP(4DUP(3),8);3,3,3,3,8重复10H次,次数,内容,数据类型,字节BYTE1字WORD2双字DWORD4四字QWORD8十字节TBYTE10,DBDWDDDQDT,1.常数数值常数:二、八、十、十六进制B,O,D,H字符串常数2.变量用数据定义语句定义并预置初值后,变量代表存储单元的数据,并作为该单元的符号地址。变量引用:(1)在指令语句的操作数字段中,引用的变量名作为地址表达式的组成部分之一。地址表达式的值:存放操作数的存储单元偏移量。地址表达式的类型:同变量名的类型。(2)在用DW或DD的数据定义语句中,若操作数字段引用了变量名,则在分配的存储单元中,预置被引用的变量名的地址部分偏移量(DW;DD,前两个字节)段基值(DD,后两个字节),五、汇编语言数据与运算符,3.标号:一条指令的符号地址。段属性偏移属性类型属性NEAR/FAR类型属性设置:(1)隐含方式:NEXT:MOVAX,3000(2)用LABEL伪指令设置类型属性:标号伪指令LABEL格式:名字LABEL类型与指令语句配合使用:名字(新标号)LABEL类型(NEAR/FAR)SUB1_FARLABELFARSUB1:MOVAX,1234H与数据定义语句配合使用:名字(新变量名)LABEL类型(BYTE/WORD/DWORD)DATA_BYTELABELBYTEDATA_WORDDW20HDUP(563H),运算符,+*/MODSHRSHL,运算格式,运算功能,+表达式表达式表达式1+表达式2表达式1表达式2表达式1*表达式2表达式1/表达式2表达式1MOD表达式2表达式1SHR次数表达式1SHL次数,正数(单项运算符)负数(单项运算符)加法减法乘法除法(取商)模除(取余数)右移左移,(1)算术运算符,4.运算符,只有减法运算可以用同一段内的两个变量相减,SHR、SHL不能对某寄存器或存储单元内容进行移位运算。,示例NUM=11011011BDATA1DWNUMSHL3,NUMSHR2.MOVAX,NUMSHL3MOVBX,NUMSHR2MOVCX,NUMSHL8MOVCX,NUMSHL16MOVDX,NUMSHR8MOVDX,NUMSHR16DATA1DW6D8H,36H.MOVAX,011011011000BMOVBX,00110110BMOVCX,1101101100000000BMOVCX,0MOVDX,0MOVDX,0,算术运算符,移位运算符不能对寄存器或存储单元进行移位运算MOVAX,CXSHL5MOVDX,DATA1SHR3,逻辑运算符只能对一个具体数据进行逻辑运算,不能对一个寄存器操作数或存储器操作数进行逻辑运算。,示例MOVAL,NOT0F0HMOVDX,NOT0F0HMOVBL,55HOR0F0HANDBH,55HAND0F0HXORCX,55HXOR50H,MOVAL,0FHMOVDX,0FF0FHMOVBL,0F5HANDBH,50HXORCX,5,全1为真,全0为假比较时,若为常数按无符号数比较;如果是变量,按偏移量比较,示例DATASEGMENTORG10HNUM1=1234NUM2=1234HDA_BYTEDB10HDUP(0)DA_WORDDW10HDUP(0)DA_VAR1DWNUM2+DA_BYTEGTNUM1+DA_WORDDA_VAR2DBNUM1LENUM2DATAENDS.MOVAX,NUM1LTNUM2MOVBL,NUM1GENUM2MOVCX,DA_WORDGTDA_BYTE.,.DA_VAR1DW0FFFFHDA_VAR2DB0FFH.MOVAX,0FFFFHMOVBL,0MOVCX,0FFFFH.,可以对两个常数进行比较,不能用常数与偏移量进行比较,格式:运算对象是存储器操作数,由变量名或标号组成地址表达式SEG:返回变量所在的段值OFFSET:返回变量所在偏移TYPE:返回变量的类型LENGTH:返回数组变量的元素个数SIZE:返回数组变量所占的总字节数SIZE=TYPE*LENGTH,(4)数值返回运算符,示例假设DATA的段基址是7A4EHDATASEGMENTORG30HDA1DB20HDUP(12H)DA2DWDA1.DATAENDS.MOVAX,SEGDA1MOVBX,SEGDA2MOVSI,OFFSETDA1MOVCX,DA2MOVDI,OFFSETDA2MOVDX,OFFSETDA1+4,MOVAX,7A4EHMOVBX,7A4EHMOVSI,30HMOVCX,DA2MOVDI,50HMOVDX,34H,用数字形式表示变量和标号的类型属性,示例DA_BYTEDB12HDA_WORDDW3456HDA_DWORDDD789AH.MOVAL,TYPEDA_BYTEMOVBL,TYPEDA_WORDMOVCL,TYPEDA_DWORD.MOVAL,1MOVBL,2MOVCL,4,LENGTH与SIZE运算符,LENGTH运算符返回数组变量的元素个数如果变量用DUP定义,Length为外层DUP的值如果没有DUP定义,结果为1SIZE运算符数组变量所占的总字节数SIZE是LENGTH和TYPE的乘积,示例DATASEGMENTVAR1DB10HDUP(0)VAR2DB10H,20H,30H,40HVAR3DW10HDUP(A,4DUP(3)VAR4DBCOMPUTER.DATAENDS.MOVAL,LENGTHVAR1;MOVAH,SIZEVAR1;MOVBL,LENGTHVAR2;MOVBH,SIZEVAR2;MOVCL,LENGTHVAR3;MOVCH,SIZEVAR3;MOVDL,LENGTHVAR4;MOVDH,SIZEVAR4;,(AL)=10H(AH)=10H(BL)=1(BH)=1(CL)=10H(CH)=20H(DL)=1(DH)=1,例:求数组ARRAY的各数据项的累加和,从数组最后一个数据项开始进行累加。ARRAYDW20HDUP(4).XORAX,AXMOVSI,OFFSETARRAYADDSI,SIZEARRAY-TYPEARRAYMOVCX,LENGTHARRAYLOP:ADDAX,SISUBSI,TYPEARRAYLOOPLOP,(5)属性运算符PTR:类型PTR地址表达式类型可以是:BYTE,WORD,DWORD或NEARFAR仅在当前语句中有效,是一种临时设置。DA_BYTEDB20HDUP(0)DA_WORDDW10HDUP(0)MOVWORDPTRDA_BYTE10,AXADDBYTEPTRDA_WORDDI,BLINCBYTEPTRSISUBWORDPTRBX,30HJMPFARPTRSUB1,THIS:THIS类型THIS常与等值语句EQU一起用,形成新变量名或标号,使它们具有THIS后所指的类型,而段基值和偏移量与紧接的变量名或标号相同。例:DATA_BYTEEQUTHISBYTEDATA_WORDDW20HDUP(0)JUMP_FAREQUTHISFARJUMP_NEAR:XORAX,AX,(6)分离字节运算符HIGH表达式LOW表达式分离运算对象的高字节和低字节部分表达式必须具有常量值,如常数、地址表达式的偏移量,不能是存储器操作数或寄存器内容.,示例DATASEGMENTORG20HCONSTEQU0ABCDHDATA1DB10HDUP(?)DATA2DW20HDUP(?).DATAENDS.MOVAH,HIGHCONSTMOVAL,LOWCONSTMOVBH,HIGH(OFFSETDATA1)MOVBL,LOW(OFFSETDATA2)MOVCL,LOW(CONSTSHL3),MOVAH,0ABHMOVAL,0CDHMOVBH,0MOVBL,30HMOVCL,68H,错误:MOVCH,HIGHDATA1MOVCL,LOWDATA1MOVDH,HIGHBPMOVDL,LOWAX,存储器,寄存器,六、段结构伪指令,1.段定义伪指令段名SEGMENT定位类型组合类型类别名.段名ENDS定位类型(AlignType):PAGE(页):本段从一个页的边界开始,起始地址能被256整除。PARA(节):本段从一个节的边界开始,起始地址能被16整除。WORD(字):本段从偶字节地址开始。BYTE(字节):本段从任意地址开始。,组合类型(CombineType):表示段与段之间的连接:None:本段与其它段无连接关系,是独立的。PUBLIC:本段与其它同段名同类型的段相连接在一起,然后为所有这些段指定一个共同的段基地址,形成一个新的逻辑段。COMMON:本段与其它同段名同类型的段设置相同的段基址,共享相同的存储区,段长度由同名段中最大的段确定。(覆盖段),组合类型(CombineType):,STACK:与PUBLIC段相似,但此段为堆栈段,系统自动对SS寄存器和SP指针初始化。AT表达式:本段的起始单元可以定位在表达式所示的节边界上。MEMORY:本段定位在所有其它段的最高地址,有多个段,只把第一个遇到的当作此段。类别名(Class):用户给定,在链接时把相同的段存储在连续的存储区。,2.段寻址伪指令ASSUME段寄存器名:段名,段寄存器名:段名,.DS_DATASEGMENTVAR1DB12HDS_DATAENDSES_DATASEGMENTVAR2DB34HES_DATAENDSCODESEGMENTVAR3DB56H,ASSUMECS:CODE,DS:DS_DATASTART:.INCVAR1INCVAR2INCVAR3.CODEENDSENDSTART,可用关键字NOTHING取消前面的某些设置。例:ASSUMEDS:NOTHING;取消对DS的设置ASSUMENOTHING;取消全部4个段R的设置,,ES:ES_DATA,3.段寄存器的装入DS,ES的装入DATA_DSSEGMENTDB1DB10HDUP(?)DATA_DSENDSDATA_ESSEGMENTDB2DB20HDUP(?)DATA_ESENDSCODESEGMENTASSUMECS:CODE,DS:DATA_DS,ES:DATA_ESSTART:MOVAX,DATA_DS;设置DSMOVDS,AXMOVAX,DATA_ES;设置ESMOVES,AX.CODEENDS,SS的装入(1)STACK1SEGMENTPARASTACKDW20HDUP(?)STACK1ENDS(2)STACK2SEGMENTDW30HDUP(?)TOPLABELWORDSTACK2ENDS.CODESEGMENT.MOVAX,STACK2;设置SSMOVSS,AXMOVSP,OFFSETTOP;修改SP,自动装入,执行程序装入,CS的装入(1)结束伪指令.CODESEGMENTASSUMECS:CODE,.START:.CODEENDSENDSTART(2)CALL,RET;JMP;IRET,七、过程定义伪指令过程名PROCNEAR/FAR.RET过程名ENDP有三个属性一个过程内,至少有一条返回指令RET调用过程使用CALL过程名段内返回与段间返回,八、其它伪指令,1.ORG,$ORG表达式将表达式的值赋给位置计数器$存放位置计数器的当前值,DATASEGMENTORG30H;$=30HDB1DB12H,34H;$=32HORG$+20H;$=52HSTRINGDBSTRING.DATAENDS-,ORG,$举例,CODESEGMENT.ORG50HMOVAX,OFFSET$MOVBX,OFFSET$.CODEENDS,MOVAX,0050HMOVBX,0053H,DATASEGMENTDA1DB10HDUP(?)DA2DB12H,34HDA3DW56H,$+10H,78H,$+20H.DATAENDS,;$=10H,;$=12H,;$=1AH,八、其它伪指令,2.EVEN伪指令定位偶地址3.INCLUDE伪指令INCLUDE文件名INCLUDE文件名例:INCLUDEFILE.MACINCLUDEB:MASMABC.ASM,4.PUBLICPUBLIC符号1,符号2,.,PUBLICNUM1,STRING,SUB1,LOOP1DATA1SEGMENTNUM1EQU1234H.STRINGDBCHARACTERSTRING.DATA1ENDS.CODE1SEGMENT.SUB1PROCFAR.SUB1ENDPLOOP1:.CODE1ENDSEND,5.EXTRN伪指令EXTRN符号1:类型,符号2:类型,.例:,EXTRNNUM1:ABS,STRING:BYTEEXTRNSUB1:FAR,LOOP1:NEAR:CODE2SEGMENT:MOVAX,NUM1LEABX,STRING:CALLSUB1:JMPFARPTRLOOP1:CODE2ENDSEND,八、其它伪指令,5.TITLE(标题)伪指令,指定一个标题格式:TITLE文本字符不超过80个例:TITLEEXAMPLEPROGRAM,九、宏指令,例:MULTAX10MACROPUSHBXSALAX,1MOVBX,AXSALAX,1SALAX,1ADDAX,BXPOPBXENDM,九、宏指令1.宏定义宏名MACRO形参1,形参2,.ENDM,EXCHANGEMACROMEM1,MEM2,REGMOVREG,MEM1XCHGREG,MEM2MOVMEM1,REGENDM,2.宏调用宏名实参1,实参2,.EXCHANGEDA_BY1,DA_BY2,AL3.宏展开,;宏定义MULTAX10MACROPUSHBXSALAX,1MOVBX,AXSALAX,1SALAX,1ADDAX,BXPOPBXENDM;-EXCHANGEMACROMEM1,MEM2,REGMOVREG,MEM1XCHGREG,MEM2MOVMEM1,REGENDM,;设置数据段DATASEGMENTDA_W01DW1234HDA_W02DW5678HDATAENDS;设置堆栈段STACK1SEGMENTPARASTACKDW20HDUP(?)STACK1ENDS;设置代码段COSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AX.MULTAX10;宏指令语句+PUSHBX+SALAX,1,+MOVBX,AX+SALAX,1+SALAX,1+ADDAX,BX+POPBX.EXCHANGEDA_W01,DA_W02,CX:宏指令语句+MOVCX,DA_W01+XCHGCX,DA_W02+MOVDA_W01,CX.COSEGENDSENDSTART,4.宏操作符连接操作符宏展开SHIF1AX,HL,2+MOVCL,2+SHLAX,CLSHIF1BL,AR,3+MOVCL,3+SARBL,CL,文本操作符EXCHANGE,AL宏展开MOVAL,BYTEPTRDA_WORD1XCHGAL,BYTEPTRDA_WORD2MOVBYTEPTRWORD1,AL字符操作符!格式:!字符宏定义:PROMPTMACRONUM,TEXTPROMP,5.LOCAL伪指令,LOCAL在汇编过程中,宏定义中的内容会在每一次宏调用处展开。因此当多次调用一个宏时,宏定义中的标号会造成标号重复定义。在宏定义中使用LOCAL伪指令可以使标号被局部化,从而避免重复定义。LOCAL伪指令只能用在宏定义中,并且它必须是宏定义中紧跟在MACRO伪指令之后的第一个语句。,用连续相加的办法实现无符号数乘法运算MULTIPMACROMULT1,MULT2,MULT3LOCALLOP,EXIT0MOVDX,MULT1MOVCX,MULT2XORBX,BXXORAX,AXJCXZEXIT0LOP:ADDBX,DXADCAX,0LOOPLOPEXIT0:MOVMULT3,BXMOVMULT3+2,AXENDM,设数据段有如下定义的变量:DA1DW1234H,5678HDA2DW120H,210HDA3DW4DUP(?),宏展开:.MULTIPDA1,DA2,DA3+MOVDX,DA1+MOVCX,DA2+XORBX,BX+XORAX,AX+JCXZ?0001+?0000:ADDBX,DX+ADCAX,0+LOOP?0000+?0001:MOVDA3,BX,+MOVDA3+2,AX.MULTIPDA1+2,DA2+2,DA3+4+MOVDX,DA1+2+MOVCX,DA2+2+XORBX,BX+XORAX,AX+JCXZ?0003+?0002:ADDBX,DX+ADCAX,0+LOOP?0002+?0003:MOVDA3+4,BX+MOVDA3+6,AX.,6.宏嵌套宏定义嵌套嵌套的宏定义:JUMPMACROCONDJ&COND&SMACRODESTLOCALNEXT,EXITJ&CONDNEXTJMPEXITNEXT:JMPDESTEXIT:ENDMENDM,外层宏调用为:JUMPEJUMPNEJUMPGJUMPGE内层宏调用为::JESSUB1;等于0转移:JGESSUB2;大于或等于转移:,当宏汇编程序对内层宏展开后,可得到如下结果:JE?0000JMP?0001?0000:JMPSUB1?0001:JGE?0002JMP?0003?0002:JMPSUB2?0003:,两个宏定义:对32位数左移一位SHIFTMACRONUM1,NUM2SALNUM2,1RCLNUM1,1ENDM对32位数乘以12MULT12MACROM_R1,M_R2,REG1,REG2PUSHFPUSHREG1PUSHREG2SHIFTM_R1,M_R2SHIFTM_R1,M_R2MOVREG1,M_R1MOVREG2,M_R2,宏定义内嵌套宏调用,SHIFTM_R1,M_R2ADDM_R2,REG2ADCM_R1,REG1POPREG2POPREG1POPFENDM某数据段已定义变量:在程序中可以编写宏指令语句::MULT12DA_WORD+2,DA_WORD,AX,BX:MULT12AX,BX,CX,DX:7.宏库,P2051,3P2065,7,9P20814,作业,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!