收藏 分销(赏)

II-汇编语言程序设计.ppt

上传人:二*** 文档编号:12517392 上传时间:2025-10-23 格式:PPT 页数:77 大小:586KB 下载积分:5 金币
下载 相关 举报
II-汇编语言程序设计.ppt_第1页
第1页 / 共77页
本文档共77页,全文阅读请下载到手机保存,查看更方便
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,可整理ppt,*,汇编语言程序设计,黄景涛,河南科技大学,电子信息工程学院,Email:,hjt.haust,Q&A:自动化教研室(西苑10-316);,周四晚7:008:00.,1,可整理ppt,汇编语言程序设计,汇编语言源程序格式及其开发过程,指令格式及寻址方式,8086汇编语言的基本语法,顺序、分支、循环结构程序设计,子程序设计,宏汇编简介,2,可整理ppt,汇编语言基本概念,基本概念,汇编语言,:是一种面向机器的程序设计语言,它是机器语言的符号化描述。,特点:代码短、空间省、效率高,汇编语言源程序,:用汇编语言编写的程序,目标程序,:汇编语言经翻译程序翻译成的代码程序(即机器语言的程序)。,汇编程序,:把源程序转变为相应目标程序的,翻译程序,3,可整理ppt,汇编语言基本概念,宏汇编,:不仅包含一般汇编语言的功能,而且采用了高级语言使用的数据结构,是一种接近高级语言的汇编语言。,汇编语言程序的开发过程,编写源程序:EDIT(DOS),TextPad(Windows),将源程序保存为 XXXX.asm 文件,使用MASM生成目标程序 XXXX.OBJ,使用LINK生成可执行程序 XXXX.EXE,源程序,XXXX.asm,目标程序,XXXX.obj,可执行程序,XXXX.exe,设计编辑,用MASM,汇编,用LINK,连接,执行,4,可整理ppt,汇编语言基本概念,汇编程序设计过程:,分析问题;,确定算法;,编写程序;,检验程序;,编写说明文件。,源程序的编辑、调试,用文本编辑器进行源代码的编写,文件保存后缀为,ASM,C:*,masm,masm,example.asm,C:*,masm,link,example.obj,C:*,masm,example,5,可整理ppt,汇编语言基本概念,基本汇编语言程序实例,(1)DATA SEGMENT,(2)String DB program ASM,$,(3)DATA ENDS,(4)CODE SEGMENT,(5)ASSUME CS:CODE,DS:DATA,SS:STACK,(6)START:MOV AX,DATA,(7)MOV DS,AX,(8)MOV DX,OFFSET String,(9)MOV AH,9,(10)INT 21H,(11)MOV AX,4C00H,(12)INT 21H,(13)CODE ENDS,(14)STACK SEGMENT STACK,(15)DB 256 DUP(?),(16)STACK ENDS,(17)END START,AH=9,功能:显示字符串,DS:DX=串地址,字符串以“$”结尾,AH=4C,功能:带返回码终止,AL=返回码,6,可整理ppt,汇编语言中的语句,指令性语句,源程序经汇编后生成机器码,指示性语句,汇编过程中不产生机器码,在汇编过程中起解释说明作用,宏语句,由宏汇编定义的宏引用语句,7,可整理ppt,汇编语言中的语句,指令性语句,指令性语句格式,标号:前缀 指令助记符 操作数,操作数;注释,标号:代表“:”后面语句的存储地址,供转移指令(JMP)、转子指令(CALL)、循环指令(LOOP)等使用。,由字母、数字组成串(第一个字符非数字),前缀:是与串操作运算(MOVS、CMPS、SCAS、LODS、STOS)以及总线封锁指令(LOCK)配合使用的部分。它们是REP、REPZ、REPE、REPNZ、REPNE等等。,LOOP1:REP MOVS DEST,SOURCE,操作数的数目可以为0,1或2,用“,,,”隔开,8,可整理ppt,数据传送指令(14条),传送,MOV,堆栈操作,PUSH,POP,交换,XCHG,输入、输出,IN,OUT,转换,XLAT,地址传送,LEA,LDS,LES,标志传送,PUSHF,POPF,LAHF,SAHF,汇编语言中的语句,9,可整理ppt,算术运算指令(20条),加法,ADD,ADC,AAA,DAA,加“1”,INC,减法,SUB,SBB,AAS,DAS,减“1”,DEC,比较,CMP,求补,NEG,乘法,MUL,IMUL,AAM,除法,DIV,IDIV,AAD,符号扩展,CBW,CWD,汇编语言中的语句,10,可整理ppt,求反,NOT,逻辑与,AND,逻辑或,OR,异或,XOR,测试,TEST,左/右移位,SHL,SHR,SAL,SAR,左/右循环移位,ROL,ROR,RCL,RCR,-逻辑运算指令(13条),汇编语言中的语句,11,可整理ppt,串操作指令(10条),传送串,MOVS,MOVSB/MOVSW,串比较,CMPS,CMPSB/CMPSW,串扫描,SCAS,SCASB/SCASW,取字符串,LODS,LODSB/LODSW,存字符串,STOS,STOSB/STOSW,重复前缀,REP,REPZ,REPNZ,汇编语言中的语句,12,可整理ppt,子程序调用,CALL,子程序返回,RET,无条件转移,JMP,条件转移,JZ,JNZ,JC,JNC,JO,JNO,JS,JNS,JP,JNP,JA,JAE,JB,JBE,JG,JGE,JL,JLE,循环,LOOP,条件循环,LOOPNE,LOOPE,寄存器CX=0转移,JCXZ,中断,INT,INTO,中断返回,IRET,控制转移指令(28条),汇编语言中的语句,13,可整理ppt,处理器控制指令(12条),清除CF标志,CLC,进位有效位CF求反,CMC,置CF标志,STC,置DF标志,STD,清除DF标志,CLD,置IF标志,STI,清除IF标志,CLI,处理机暂停,HLT,等待状态,WAIT,将数据传送给协处理器(提供到数据/地址线上),ESC,总线封锁,LOCK,空操作,NOP,汇编语言中的语句,14,可整理ppt,指示性语句,功能:对程序的起止信息、分段情况、变量说明、内存结构等进行说明。,格式:,名字 伪操作指令 参数,参数;注释,PC宏汇编的伪指令,段定义伪指令:SEGMENT,ENDS,ASSUME,ORG等,符号定义伪指令:EQU,=,数据定义伪指令:DB,DW,DD,DQ,DT,过程定义伪指令:,PROC,,,ENDP,宏处理伪指令:MACRO,REPT,IRPC,条件汇编伪指令:IF,ENDIF,IFDIF,IFDEF,汇编语言中的语句,15,可整理ppt,每个语句由14个部分组成,其格式是:,标号 指令助记符 操作数 ;注释,标识符:,给指令或某一存储单元地址所起的名字。,可由下列字符组成:字母:,A z,;数字:,0 9,;特殊字符:,?,、,、一、,$,。,数字不能作标识符的第一个字符,而圆点仅能用作第一个字符;,标识符最长为,31,个字符;,当标识符后跟冒号时,表示是标号。它代表该行指令的起始地址;,当标识符后不带冒号时,表示变量;,伪指令前的标识符不加冒号。,指令助记符:,表示不同操作的指令,,可以是,8086,的指令助记符,也可以是伪指令。,操作数:,指令执行的对象。,依指令的要求,可能有一个、两个或者没有。,注释:,该项可有可无,是为源程序所加的注解,用于提高程序的可读性。,汇编语言语句格式及组成,16,可整理ppt,常量与数值表达式,常量,在汇编时已经确定的值。在指令中作为直接操作数,或者给变量赋初值,类型,数值常量,:以数值的形式直接写在语句中,符号常量:预先为它定义一个名字,然后在语句中用名字来表示该常量(提高程序的可读性),用,EQU,或,=,来定义,例:PORT EQU 83H,ALPHT=35*21,汇编语言语句格式及组成,17,可整理ppt,数据形式,格 式,X取值范围,例子,注释,二进制,X X X X X X X X B,0,1,01110101B,八进制,X X X X O,X X X X Q,0 7,0 7,735O,421Q,十进制,X X X X,X X X X D,0 9,0 9,3756,2358D,缺省形式,十六进制,X X X X H,0 F,0FB23H,最前面的一个字符必须是09,ASCII,X X,“X X”,ASCII字符,128个,OK,“Pass”,十进制实数,X X.X X E X X,0 9,23.456E-7,各种形式常量的格式,汇编语言语句格式及组成,18,可整理ppt,标号,标号,是为一组机器指令所起的名字,用于程序转移指令、调用指令和循环指令的操作数(转向地址),一般在CS段内定义和使用。,标号的属性:,段属性、偏移属性和类型,标号所处的代码段的段基址,称为该标号的,段属性,标号所处的位指向对于段首地址的相对地址,称为该标号的,偏移属性,形式一:标号,形式二:OFFSET 标号,LC1:MOV AL,20H,JMP LC1,MOV BX,OFFSET LB1,汇编语言语句格式及组成,19,可整理ppt,汇编语言语句格式及组成,标号:,标号有,FAR,(远标号)和,NEAR,(近标号)两种类型,近标号:该标号的定义,在,本段;在机器指令助记符之前,加一标号名字,后面紧跟一个冒号“,:,”,LC1:MOV AL,20H,JMP LC1,远标号:该标号的定义,在其它段;,过程定义时,为过程起的名字也是标号,可作为转子指令的操作数,这类标号的类型在定义子过程时确定,PROP,PROC,FAR,PROP,ENDP,20,可整理ppt,注:标号在使用时注意事项,(1)循环指令、条件转移指令只能引用NEAR型,并且定义标号语句和使用标号语句的相对距离只能在 128 +127 字节范围内,(2)无条件转移指令、调用(转子)指令可引用 NEAR 和 FAR 两种类型的标号,(3)如果同一段内,无条件转移指令语句到定义该标号语句的距离在 128 +127 字节范围内,则可在使用的标号前指定为短标号:记为 SHORT 标号,汇编语言语句格式及组成,21,可整理ppt,变量变量的定义及格式,变量,是内存中一个数据区的名字,可以作为指令的存储器操作数来引用,变量定义的格式:,变量名,变量类型定义符 表达式,,,变量名:由用户定义(符合标识符定义的规范),变量类型:,DB:,1个字节,DW:,2个字节,即1个字,DD:,4个字节,即2个字,DQ:,8个字节,即4个字,DT:,10个字节,即5个字,汇编语言语句格式及组成,22,可整理ppt,表达式,操作数和运算符组成的式子,算术运算符:,+,,,-,,*,,/,逻辑运算符:,NOT,AND,OR,XOR,关系运算符:,EQ-,相等,NE-,不相等,LT-,小于,GT-,大于,LE-,小于或等于,GE-,大于或等于,汇编语言语句格式及组成,23,可整理ppt,例:ARRAY DW 1,2,3,ADD SI,TYPE ARRAY,汇编的结果为 ADD SI,2,分析运算符,TYPE,LENGTH,SIZE,SEG,OFFSET,TYPE,格式:,TYPE,变量或标号,说明:,变量:则汇编程序将回送该变量类型包含的字节数,标号:则汇编程序将回送代表该标号类型的数值。,NEAR,(,-1,)、,FAR,(,-2,),汇编语言语句格式及组成,24,可整理ppt,例:FEES DW 100 DUP(0),MOV CX,LENGTH FEES,则汇编结果为:MOV CX,100,例:ARRAY DW 1,2,MOV CX,LENGTH ARRAY,则汇编结果为:MOV CX,1,LENGTH,格式:,LENGTH,变量,说明:,回送分配给该变量的单元数,表达式中带,DUP,时有效,非,DUP,时,回送,1,汇编语言语句格式及组成,例:ARRAY DW 1,2,3,MOV CX,SIZE ARRAY,则汇编结果为:MOV CX,2,SIZE,格式:,SIZE,变量,说明:,回送分配给该变量的字节数,此值是,LENGTH,值和,TYPE,值的乘积,25,可整理ppt,例:MOV BX,OFFSET OPR,则汇编程序将OPR的,偏移,地址回送给指令,在执行时,将该偏移地址装入BX寄存器中,OFFSET,格式:,OFFSET,变量或标号,说明:,回送该变量或标号的偏移地址值,汇编语言语句格式及组成,例:MOV BX,SEG OPR,则汇编程序将OPR所在的段基址送入BX寄存器,SEG,格式:,SEG,变量或标号,说明:,回送该变量或标号的段地址,26,可整理ppt,汇编语言语句格式及组成,属性操作符PTR,THIS,I.PTR,格式:,类型 PTR 表达式,类型:BYTE,WORD,DWORD,FAR,NEAR,表达式:是存储器操作数,说明:,用来给已分配的存储地址赋予另一种属性,使该地址具有另一种类型,例:,MOV BX,5,MOV BYTE PTR BX,5,MOV WORD PTR BX,5,例:VARW DW 2030H,4080H;VARW由DW定义为字类型,MOVAL,BYTE PTR VARW;该指令由PTR改变VARW属性,27,可整理ppt,汇编语言语句格式及组成,THIS,指定属性操作符,格式:THIS 类型(BYTE,WORD,DWORD,FAR,NEAR),功能:用于指定存储器操作数或地址的类型属性。,说明:,该操作符对应的语句放在数据变量定义伪指令或标号定义之前;,规定一个新变量,(,标号,),的属性;,由,THIS,定义的新变量,(,标号,),的段地址和偏移地址与紧跟其后定义的变量,(,标号,),的段地址和偏移地址相同,即指向同一个存储单元,但数据类型可以不同,一般通过,EQU,伪指令为符号命名赋予一个由,THIS,指定的类型,例:,FIRST_BYTEEQUTHISBYTE,WORD_TABLEDW3275H,08ABH,例:,TABEQUTHISFAR,MOVAX,1234H,;,定义标号,TAB,,属性为,FAR,,指向,MOV AX,,,1234H,28,可整理ppt,指示性语句(说明性语句),存储分配(数据定义)语句,数值表达式,如 3*20,?保留存储空间但不存入数据,例:ABC DB 0,?,?,0,DEF DW?,52,存储空间分配如图所示,ASCII字符串,例:MESSAGE DB HELLO,存储空间分配如图所示,00,-,-,00,-,-,34,00,ABC,DEF,48,45,4C,4C,4F,MESSAGE,伪指令,29,可整理ppt,N DUP(?),重复因子,n,为正整数,表示数据项重复,n,次,例:,ARRAY1 DB 2,DUP,(0,1,2,?),ARRAY2 DB 100,DUP,(?),内存分配如图所示,N DUP(,表达式,表达式,,),例:,ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3),00,01,02,-,00,01,02,-,-,ARRAY1,ARRAY2,-,100个字节,汇编语言语句格式及组成,30,可整理ppt,定义数据伪指令,DATA1DB20H,DATA2DW0240H,1000H,DATA3DB(-1*3),(15/5),DATA4DD12345H,DATA5DB0123,DATA6DWAB,C,D,DATA7DB?,DATA8DD?,DATA9DB5DUP(00),DATA10DW3DUP(?),31,可整理ppt,伪指令,EQU符号定义伪指令,格式:符号EQU表达式,或新符号EQU旧符号,EQU伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替,如:,COUNTEQU100;COUNT代替常数100,CONSTEQUCOUNT,SUMEQU30*25;SUM代替数值表达式,CEQUCX;C代替寄存器CX,MEQUMOV;M代替指令助记符MOV,注意!,一个符号一经,EQU,伪指令赋值后,在整个程序中,不允许再对同一符号重新赋值。,如果要定义由,EQU,定义过的变量,则需使用,PURGE,解除对该变量的定义。格式为:,PURGE,符号,32,可整理ppt,汇编语言程序设计,段定义伪指令,段定义伪指令的用途是在汇编语言程序中定义逻辑段;,指定段的名称和范围,并指明段的定位类型、组合类型及类别;,段定义伪指令为,SEGMENT,和,ENDS,。,格式:,段名,SEGMENT,定位类型 组合类型 类别 (段内语句系列),段名,ENDS,33,可整理ppt,伪指令,DATA1 SEGMENT,DATA1 ENDS,STACK1 SEGMENT STACK,STACK1 ENDS,CODE1 SEGMENT,ASSUME CS:CODE1,DS:DATA1,SS:STACK1,MOV AX,DATA,MOV DS,AX,MOV AX,STACK,MOV SS,AX,CODE1 ENDS,段定义伪指令例子:,34,可整理ppt,汇编语言程序设计伪指令,设定段寄存器伪指令,通知汇编程序哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。,段定义伪指令为,ASSUME,。,格式:,ASSUME,段寄存器:段名,,段寄存器:段名,,注意,!,由于,ASSUME,伪指令只指明某一个段地址应存于哪一个段寄存器中,并没有包含将段地址送入该寄存器的操作。,要将真实段地址装入段寄存器还需用汇编指令来实现,这一步是不可缺少的。,35,可整理ppt,汇编语言程序设计伪指令,定义过程伪指令,在程序设计中,可将具有一定功能的程序段看成为一个过程(相当于一个子程序),它可以被别的程序调用。,一个过程由伪指令PROC和ENDP来定义。,格式:,过程名 PROC 类型,过程体,RET,过程名 ENDP,其中过程名是为过程所起的名称,不能省略,;,过程的类型由,FAR,(远过程,为段间调用)和,NEAR,(近过程,在本段内调用)来确定,如果缺省类型,则该过程就默认为近过程,;,ENDP,表示过程结束,;,过程体内至少应有一条,RET,指令,以便返回被调用处,;,过程可以嵌套,也可以递归使用。,36,可整理ppt,汇编语言程序设计伪指令,过程定义伪指令举例:,DELAY,PROC,MOVBL,10,DELY:MOVCX,2801,WAIT:LOOPWAIT,DECBL,JNZDELY,RET,DELAY,ENDP,37,可整理ppt,汇编语言程序设计伪指令,宏指令,在汇编语言书写的源程序中,若有的程序段要多次使用,为了简化程序书写,该程序段可以用一条宏指令来代替;,汇编程序汇编到该宏指令时,仍会产生源程序所需的代码。,格式:,宏指令名MACRO 形式参量表,宏体,ENDM,例如:,SHIFT MACRO,MOV CL,4,SAL AL,Cl,ENDM,38,可整理ppt,汇编语言程序设计伪指令,ORG伪指令,ORG伪指令规定了在某一段内,程序或数据代码存放的起始偏移地址。,格式:,ORG ,例如:,DATASEGMENT,BUFF1DB23,56H,EOF,ORG2000H,BUFF2DBSTRING,DATAENDS,39,可整理ppt,汇编语言程序设计伪指令,汇编结束伪指令END,该伪指令表示源程序的结束;,通知汇编程序停止汇编;,任何一个完整的源程序均应有END指令。,格式:,END 表达式,其中表达式表示该汇编程序的启动地址。,例如:,END START,;表明该程序的启动地址为,START,。,40,可整理ppt,汇编语言程序设计过程,汇编语言程序设计概述,41,可整理ppt,汇编语言程序设计,顺序程序设计,对于一些简单的数据处理,只要把完成处理的各个步骤用汇编语言描述清楚,让计算机按指令编写的次序从头到尾一条条执行即可,这样的程序结构称为顺序结构。,42,可整理ppt,顺序程序设计,DATASEGMENT,XDB 15,YDB 34,ZDW?,DATAENDS,CODESEGMENT,ASSUMECS:CODE,DS:DATA,START:MOV AX,DATA,MOV DS,AX;初始化数据段,MOVAL,X;X中的内容送AL,MULAL;计算X,X,MOVBX,AX;X,X乘积送BX,MOV AL,Y;Y中的内容送AL,MULAL;计算Y,Y,ADDAX,BX;计算X,2,Y,2,SHRAX,1;计算(X,2,Y,2,)/2,MOV Z,AX;结果送Z单元,MOV AH,4CH,INT21H;返回DOS,CODEENDS,END,START;汇编结束,【例】已知X和Y是数据段中的两个无符号字节单元,用程序完成表达式Z=(X,2,Y,2,)/2的计算。,43,可整理ppt,CODESEGMENT,ASSUMECS:CODE,MAIN:MOV AH,1,INT21H;读第1个数字,MOVBL,AL;保存在BL中,MOVAH,2,MOVDL,13,INT21H;回车,MOVDL,10,INT 21H;换行,MOVAH,1,INT21H;读入第2个数字,SUBAL,30H;第2个数字转换成十进制数,SUBBL,30H;第1个数字转换成十进制数,MULBL;两个数相乘,积在AX中,MOVBL,10;,DIVBL;积除以10商送AL,余数在AH,ADDAX,3030H;转换成相应的ASC码,MOVBX,AX;保存在BX中,MOVAH,2,MOVDL,13,INT21H;回车,MOVDL,10,INT21H;换行,MOV DL,BL,MOVAH,2,INT21H;输出十位数,MOVDL,BH,INT21H;输出个位数,MOVAH,4CH,INT21H;返回DOS,CODEENDS,ENDMAIN;程序结束,例:从键盘读入两个1位数,计算其成绩并将结果显示在屏幕上。,44,可整理ppt,分支程序设计,选择程序是利用条件转移指令,使程序执行到某一指令后,根据条件是否满足,来改变程序执行的次序。,在程序设计中经常会遇到各种判断和比较,例如“相等”和“不相等”;“正”和“负”;“大于”和“小于”;“满足条件”和“不满足条件”等等,这些判断和比较在程序中都可以组成各种不同的逻辑框,并产生相应的分支程序。,45,可整理ppt,分支程序设计,【例】符号函数,设任意给定的X存放在XX单元,计算出函数Y值要求存放在YY单元。,46,可整理ppt,分支程序设计,DATA,SEGMENT,XXDB0F0H,YYDB?,DATAENDS,CODESEGMENT,ASSUME CS:CODE,DS:DATA,STARTPROCFAR,PUSHDS,SUBAX,AX,PUSHAX,MOVAX,DATA,MOVDS,AX,MOVAL,XX,CMPAL,0,JGEBIGR,MOVAL,0FFH,MOVYY,AL,RET,BIGR:JEEQUL,MOVAL,1,EQUL:MOVYY,AL,RET,STARTENDP,CODEENDS,ENDSTART,47,可整理ppt,循环程序设计,循环程序是强制CPU重复执行某一指令系列的一种程序结构形式;,可以使许多重复工作的程序大为简化,而且减少内存空间;,被重复执行的部分称作循环体,要想把循环体多次执行,就必须在循环体的前后有相应的指令实现循环控制;,循环程序一般由4部分组成:初始化、循环体、循环控制和循环结束处理。,48,可整理ppt,循环程序设计示例,【例】现将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中去。,DATASEGMENT,AREA1DB100 DUP(?),AREA2DB100 DUP(00),DATAENDS,CODESEGMENT,ASSUME CS:CODE,DS:DATA,START:MOVAX,DATA,MOVDS,AX,MOVSI,OFFSET AREA1,MOVDI,OFFSET AREA2,MOVCX,100,AGAIN:MOVAL,SI,MOVDI,AL,INCSI,INCDI,DECCX,JNZAGAIN,MOVAH,4CH,INT21H,CODEENDS,ENDSTART,49,可整理ppt,循环程序设计示例,【例】若有一串无符号数,放在NUM开始的单元中,要求编制汇编语言程序,将其中的最大值找出来,且放到存储单元MAX中,这串数的长度已存放在COUNT单元。,DATASEGMENT,COUNTDW20,NUM DW 7,9,12,14,1,3,28,55,121,44,15,45,34,67,87,90,32,43,59,60,MAXDW?,DATAENDS,STACKSEGMENT PARA STACK STACK,DB20 DUP(?),STACKENDS,CODESEGMENT,ASSUMECS:CODE,DS:DATA,SS:STACK,MAINPROCFAR,MOVAX,DATA,MOVDS,AX,MOVBX,OFFSET NUM,MOVCX,COUNT,MOVAX,BX,INCBX,INCBX,LOOP1:CMPAX,BX,JAELOOP2,MOVAX,BX,LOOP2:INCBX,INCBX,DECCX,JNZLOOP1,MOVMAX,AX,RET,MAINENDP,CODEENDS,ENDMAIN,50,可整理ppt,循环程序设计示例,【例】设计一个100ms的软件延时程序。采用多重循环程序,内循环完成10ms的延时,外层循环10次即可。,CODESENGMET,ASSUMECS:CODE,START:MOVDL,10,DELAY1:MOVCX,2800H,DELAY2:LOOPDELAY2,DECDL,JNZDELAY1,MOVAH,4CH,INT21H,CODEENDS,ENDSTART,51,可整理ppt,子程序设计,格式,子程序名 PROC 类型,指令序列,子程序名 ENDP,调用,子程序调用与子程序返回由CALL和RET指令实现;,子程序调用方式有近程调用、远程调用、直接调用和间接调用。,52,可整理ppt,子程序设计,保护现场和恢复现场,利用指令PUSH保护现场,利用指令POP恢复现场。,例如:,SUB1 PROC NEAR,PUSH AX,保护现场 PUSH BX,PUSH CX,PUSH DX,POP DX,恢复现场 POP CX,POP BX,POP AX,RET,SUB1ENDP,53,可整理ppt,子程序设计参数传递方法,利用寄存器,利用存储单元,利用堆栈,54,可整理ppt,子程序(过程)设计示例,【例】编制程序两个6字节数相加。将一个字节相加的程序段设计为子程序。主程序分3次调用该子程序,但每次调用的参数不同。,DATASEGMENT,MYADD1DB 0FEH,86H,7CH,35H,68H,77H,MYADD2DB 45H,0BCH,7DH,6AH,87H,90H,SUMDB 6 DUP(0),COUNTDB 6,DATAENDS,STACKSEGMENT,DB 100 DUP(?),STACKENDS,CODESEGMENT,ASSUME CS:CODE,DS:DATA,SS:STACK,MADD:MOVAX,DATA,MOVDS,AX,MOVAX,STACK,MOVSS,AX,MOVSI,OFFSET MYADD1,MOVDI,OFFSET MYADD2,MOVBX,OFFSET SUM,MOVCX,COUNT ;循环初值为6,CLC,AGAIN:,CALLSUBADD,;调用子程序,LOOP AGAIN ;循环调用6次,MOVAX,4C00H,INT21H,;子程序入口参数:SI,DI,BX 出口参数:SI,DI,BX,SUBADDPROC,;完成一个字节相加,PUSHAX ;保护AX的值,MOVAL,SI ;SI是一个源操作数指针,ADCAL,DI ;DI是另一个源操作数指针,MOVBX,AL ;BX是结果操作数指针,INCSI,INCDI,INCBX,POPAX ;恢复AX的值,RET,SUBADDENDP,CODEENDS,END MADD,55,可整理ppt,DOS系统功能调用,调用过程为:,DOS,功能调用号,送,AH,寄存器;,如果需要,按要求给定,输入参数,(有的不需要输入参数);,执行中断调用指令,INT 21H,。,调用结束,按功能使用其,输出参数,。,56,可整理ppt,DOS系统功能调用,1、单字符输入1号功能调用,功 能:从键盘输入1个字符,输入参数:无,输出参数:AL=输入字符的ASCII码,例:,从键盘输入10个数字,并将其存放在DS:0100H开始的单元内。,MOVDI,0100H,MOVCX,10,NEXT:,MOVAH,1,INT21H,SUBAL,30H,MOVDI,AL,INCDI,LOOPNEXT,57,可整理ppt,DOS系统功能调用,2、单字符输出2号功能调用,功 能:在屏幕上显示1个字符(ASCII码),输入参数:DL=要输出字符的ASCII码,输出参数:无,例:从键盘输入两个1位十进制数,求两数之和并在屏幕上显示结果。,MOV AH,1 ;DOS调用输入第一个数,INT 21H,MOV BL,AL ;保存输入的第一个数,MOV AH,1,INT 21H,ADD AL,BL ;两个ASCII码相加,AAA ;调整加法结果为非压缩BCD数,MOV DL,AL,ADD DL,30H ;加法结果转换成ASCII码,MOV AH,2 ;DOS调用输出到屏幕,INT 21H,58,可整理ppt,DOS系统功能调用,3、字符串输出9号功能调用,功 能:多个字符输出到屏幕显示,字符串必须以”$”结束,输入参数:DS:DX=输出字符缓冲区首地址,输出参数:无,例:在屏幕上显示一串字符,DATA SEGMENT,BUFF DB How do you do?,0DH,0AH,$,DATA ENDS,CODE SEGMENT,ASSUME DS:DATA,CS:CODE,START:MOV AX,DATA,MOV DS,AX,LEA DX,BUFF,MOV AH,9,INT 21H,59,可整理ppt,DOS系统功能调用,4、直接控制台输入输出(单字符输入/输出)6号功能,6号DOS功能实际上是1号和2号功能的组合;,当DL寄存器的内容为0FFH时,6号功能与1号功能同,即从键盘输入单个字符;,而当DL寄存器中放入字符的ASCII值,它就是2号功能。,用法:,MOVAH,6,MOVDL,XX,INT21H,60,可整理ppt,DOS系统功能调用,5、过程终止4CH号,该调用的功能是结束当前程序,并返回调用它的程序,如在,DEBUG,状态下运行,则返回,DEBUG,;如果在,DOS,下运行,则返回,DOS,。,在汇编语言程序结束处放上,MOV AX,4C00H,和,INT 21H,两条指令,以利于程序执行完毕,返回操作系统控制。,用法:,MOV AX,4C00H,INT 21H,61,可整理ppt,DOS系统功能调用,6、字符串输入0AH号调用,功能:字符串输入,直到回车键为止调用:,DS:DX指向缓冲区首地址MOVAH,0AHINT 21H,说明:,该功能完成从键盘接收字符串存到指定区域,直到按下回车键;,缓冲区第一个字节为指定缓冲区的长度,第二个字节保留供,DOS,系统填入实际输入的字符个数,从第三个字节开始依次存放输入的字符,若实际输入字符个数少于定义的字节数,则多余字节填,0,若实际输入字符个数多余定义的字节数,则多余字符丢弃。,62,可整理ppt,宏汇编简介,宏,:源程序中一段有独立功能的程序代码。,宏指令,:,用户自定义的指令。在编程时,将多次,使用的功能用一条宏指令来代替。,汇编语言程序,指令,伪指令(伪操作),宏指令,63,可整理ppt,宏定义与宏调用,1、宏定义,宏指令名 MACRO ,ENDM,2、宏调用,宏指令名 ,64,可整理ppt,宏展开:,汇编程序把宏调用展开,宏定义体 复制到宏指令位置,实参代虚参,LOCAL中的标号?0000?ffff,宏定义:,macro_name,MACRO,形参表,;,形参/虚参,LOCAL 标号表,;,宏定义体,ENDM,宏调用:,(必须先定义后调用),macro_name 实参表,;,实参,宏定义与宏调用,65,可整理ppt,宏定义与宏调用,例,:,MULTY,MACRO,OPR1,OPR2,RESULT,;宏定义,PUSH AX,MOV AL,OPR1,MOV AH,OPR2,IMUL OPR2,MOV RESULT,AX,POP AX,ENDM,DATA SEGMENT,XX DB 12,YY DB 34,ZZDW?,MULTY XX,YY,ZZ,;宏调用,实参替代虚参,66,可整理ppt,优:模块化,省内存,缺:开销大,宏定义:,Q macro x,y,endm,主程序:,Q a,b,Q c,d,Q e,f,目标程序:,优:,参数传送简单,执行效率高,缺:,占用内存空间大,主程序:,CALL -,CALL -,CALL -,子程序:,RET,子程序的调用,宏的定义与调用,67,可整理ppt,符号1&符号2,宏展开时,合并前后两个符号形成一个符号。,;注释,宏展开时,,;,后面的注释不予展开。,%,表达式,汇编程序将,%,后面的表达式转换为数字,并在展开期间用这个数取代形参。,宏汇编操作符:%,68,可整理ppt,重复伪操作,REPT,REPT,表达式,;重复块,ENDM,重复汇编,用于连续产生完全相同或基本相同的一组代码。,不定,重复伪操作,IRP,/,IRPC,IRP,形参,,;重复块,ENDM,IRPC,形参,字符串,;重复块,ENDM,69,可整理ppt,例:,把字符A到Z的ASCII码填入数组TABLE,CHAR=A,TABLE LABEL BYTE,REPT,26,DB CHAR,CHAR=CHAR+1,ENDM,1 DB 41H,1 DB 42H,1 DB 43H,1 DB 5AH,汇编后:,70,可整理ppt,条件汇编,根据,条件,把一段源程序包括在汇编语言程序内或者排除在外。,IF,自变量,;为条件,;自变量满足条件则汇编此块,ELSE,;,自变量不满足条件则汇编此块,ENDIF,一般,格式:,71,可整理ppt,IF 表达式,;,表达式,0,则汇编,IFE,表达式,;表达式0,则汇编,IF1,;在第一遍扫视期间满足条件,IF2,;在第二遍扫视期间满足条件,IFDEF 符号,;符号已定义,则汇编,IFNDEF,符号,;符号未定义,则汇编,IFB ,;自变量为空,则汇编,IFNB ,;自变量不为空,则汇编,IFIDN ,;串1与串2相同,IFDIF ,;串1与串2不同,IFXX具体形式,72,可整理ppt,例:求最大值放入AX,宏定义,:,MAX MACRO K,A,B,C,LOCAL NEXT,OUT,MOV AX,A,IF K-1,IF K-2,CMP C,AX,JLE NEXT,MOV AX,C,ENDIF,NEXT:CMP B,AX,JLE OUT,MOV AX,B,ENDIF,OUT:,ENDM,1 MOV AX,P,1?0002:CMP Q,AX,1 JLE?0003,1 MOV AX,Q,1?0003:,宏展开,:,1 MOV AX,P,1?0001:,1 MOV AX,P,1 CMP R,AX,1 JLE?0004,1 MOV AX,R,1?0004:CMP Q,AX,1 JLE?0005,1 MOV AX,Q,1?0005:,宏调用,:,MAX 1,P,MAX 2,P,Q,MAX 3,P,Q,R,73,可整理ppt,习题与思考,下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。,VAR1 DB10,,,2,VAR2DW5 DUP(?),0,VAR3DBHOW ARE YOU?,$,VAR4DD-1,1,0,假定,VAR1,和,VAR2,为字变量,,LAB,为标号,试指出下列指令的错误之处。,(,1,),ADDVAR1,,,VAR2,(,2,),SUB
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服