安徽大学汇编语言程序设计.ppt

上传人:tia****nde 文档编号:12788696 上传时间:2020-05-24 格式:PPT 页数:469 大小:934.56KB
返回 下载 相关 举报
安徽大学汇编语言程序设计.ppt_第1页
第1页 / 共469页
安徽大学汇编语言程序设计.ppt_第2页
第2页 / 共469页
安徽大学汇编语言程序设计.ppt_第3页
第3页 / 共469页
点击查看更多>>
资源描述
汇编语言程序设计,引言,课程介绍课程的任务、目的和基本要求主要教学内容和学时教学要求主要参考书作业、实验和考试,课程介绍,专业基础课软件开发的一个组成部分一种低级语言的程序设计,课程的任务、目的和基本要求,了解微型计算机的基本结构了解和掌握微型计算机的基本工作原理掌握汇编语言及其应用能独立完成简单的汇编语言程序设计认真完成作业和上机任务,主要教学内容和学时,主要内容1-8章学时:上课54学时上机36学时,教学要求,课堂上注意听讲、重要的是理解部分补充内容需要记笔记课堂外一定要看书复习或预习、完成作业充分利用上机时间、多编程练习,主要参考书,80X86汇编语言程序设计教程,杨季文等著,清华大学出版社。汇编语言程序设计,钱晓捷著,电子工业出版社。IBMPC汇编语言程序设计,沈美明著,清华大学出版。,作业、实验和考试,考勤:15%作业(15%):1次/12周考试(70%):闭卷考试实验(单独考试):9次,第一章汇编语言基础知识,1.1汇编语言简介1.2计算机中数据的表示1.3计算机组织,1.1汇编语言简介,1.1.1什么是汇编语言1.1.2为什么要学习汇编语言,1.1.1什么是汇编语言,机器指令:cpu能直接识别并遵照执行的指令,用二进制编码表示,由操作码,操作数组成,编码只含二进制0或1。机器语言:用二进制编码组成的机器指令的集合和一组使用机器指令的规则。汇编语言:对机器指令中的操作码用英文单词的缩写描述(助记符),对操作数用标号、变量、常量描述。,用汇编语言编写的程序称为汇编源程序。汇编语言是一种符号语言,比机器语言容易理解和掌握,也容易调试和维护。但是,汇编语言源程序要翻译成机器语言程序才可以由计算机执行。这个翻译的过程称为“汇编”,这种把汇编源程序翻译成目标程序的语言加工程序称为汇编程序。,1.1.2为什么要学习汇编语言,汇编语言程序是用符号指令写成的,本质上是机器语言。与具体机器的机型的硬件密切相关,可以直接有效地控制计算机硬件,程序运行速度快,程序短小精悍,占用内存少,在某些特殊应用场合更能发挥作用。如:智能化仪表家用电器实时控制系统单片机控制病毒研究等。使用汇编语言能从根本上认识和理解计算机的工作过程,它可直接而精确地控制计算机硬件的操作。学习汇编语言对从事计算机的研究和开发有着重要的意义。所以,它作为一门计算机专业基础课,并对计算机专业今后课程的学习是非常重要的。,1.1.3汇编语言的特点,与机器有关:移植性差,但可直接控制硬件。程序效率高。编写汇编语言源程序比编写高级语言源程序烦琐。调试困难。,1.2计算机中数据的表示,1.2.1不同进位计数制及其相互转换1.2.2二进制数和十六进制数的运算1.2.3带符号数的表示1.2.4补码的加法和减法1.2.5无符号数的表示1.2.6字符的表示1.2.7基本逻辑运算,1.2.1不同进位计数制及其相互转换,1.进位计数制对于任意一个进位计数制,如果用R表示基数,那么任何一个数S均可用如下多项式表示:S=knRn+kn-1Rn-1+k0R0+k-1R-1+k-2R-2+k-mR-m,十进制数:123.6(D)=1102+2101+3100+610(-1)各位权值10k二进制数:101101(B)=125+123+122+120=45(D)各位权值2k十六进制数:5F(H)=5161+15160(D)各位权值16k,在书写不同进位计数制数时,常常在尾部用一个字母来表示该数是什么进位计数制的数。结尾用B(2进制数)、O(8进制数)、D(10进制数)、H(16进制数)。缺省为十进制数。例如712O、9198D、10010B、BE49H等等。,2.各种数制间的相互转换例如:13.8125D=1101.1101B=D.DH,二进制数转换为十进制数方法:各位二进制数码乘以对应的权之和例:1.1十六进制数转换为十进制数方法:各位十六进制数码乘以对应的权之和例:1.2,十进制数转换为二进制数(1)降幂法:先写出小于此数的各位二进制权值,然后再求和。(适用于数值不大的数)例:1.3(2)除法:不断除以2,计下余数,直到商为0为止。(仅适用于整数部分)例:1.4,对于十进制数的小数部分除了可以使用降幂法也可采用乘法,即不断乘2,并计下整数,而小数部分再乘2,直到结果为0为止。并非所有的十进制小数都能用二进制完全表示,可按需要取一定精度即可。例:1.5,十进制数转换为十六进制数(1)降幂法:先写出小于此数的各位十六进制权值,然后再求和。(适用于数值不大的数)例:1.6(2)除法:不断除以16,计下余数,直到商为0为止。(仅适用于整数部分)例:1.7,对于十进制数的小数部分除了可以使用降幂法也可采用乘法,即不断乘16,并计下整数,而小数部分再乘16,直到结果为0为止。并非所有的十进制小数都能用十六进制完全表示,可按需要取一定精度即可。,二进制数和十六进制数的相互转换直接转换,每四位一组,整数从低位开始,小数从高位开始,不足位补0。例:1.8,1.2.2二进制数和十六进制数运算,二进制运算加法规则:0+0=01+0=10+1=11+1=0(进位1)乘法规则:00=010=001=011=1十六进制数运算原则:逢十六进一例1.9,1.10,1.11,1.2.3带符号数的表示,带符号数最高位是符号位。正数的符号位为0,负数的符号位为1。表示方法:原码、补码、反码。,数的补码表示定义:(X=0时)X补=符号+|X|-(1)(X0时)X补=2n-|X|=(2n-1-|X|)+1-(2)即XMDMASM建立MASM目录CD显示或改变当前目录E:CD显示当前目录E:CDMASM进入MASM目录E:MASMCD.退到上一目录E:MASMCD退到根目录E:,RD删除目录E:RDMASM删除MASM目录DIR显示目录或文件E:DIR列出当前目录下的子目录和文件E:DIR*.ASM列出所有扩展名为ASM的文件,*为通配符E:DIRHELLO.*列出所有名为HELLO而扩展名不限的文件E:DIRHE*.?列出所有名前两个字符为HE,而扩展名为三个字符的文件,REN改变文件名E:RENH1.TXTH2.TXTCOPY复制文件E:COPYH1.TXTH2.TXTE:COPYA+BC.TXT,TYPE显示文本文件的内容E:TYPYH1.TXTCLS清屏SETPATH设置或显示可执行文件的搜索路径E:PATH显示可执行文件的搜索路径E:SETPATH显示可执行文件的搜索路径,HELP显示命令格式和用法E:HELP显示所有命令的格式E:HELPDIR显示DIR命令的用法输出的重定向E:DIRC.TXT把DIR显示结果输出到文件C.TXT,2.5几个常用的DOS系统功能调用,21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能。汇编语言程序设计需要采用系统的各种功能程序。,功能调用的格式,通常按照如下4个步骤进行:在AH寄存器中设置系统功能调用号在指定寄存器中设置入口参数执行指令INT21H,实现中断服务程序的功能调用根据出口参数分析功能调用执行情况,1.键盘输入一个字符并回显,DOS功能调用INT21H功能号:AH01H出口参数:AL输入字符的ASCII码功能:等待从键盘输入一个字符,该字符的ASCII码送AL,并送屏幕显示。调用此功能时,若无输入,则会一直等待,直到输入后才继续。,movah,01h;功能号:ah01hint21h;功能调用cmpal,Y;处理出口参数aljeyeskey;是“Y”cmpal,Njenokey;是“N”yeskey:.nokey:.,2.显示一个字符,DOS功能调用INT21H功能号:AH02H入口参数:DL输出字符功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。,在当前显示器光标位置显示一个问号movah,02h;设置功能号:ah02hmovdl,?;提供入口参数:dl?int21h;DOS功能调用:显示问号,3.显示字符串,DOS功能调用INT21H功能号:AH09H入口参数:DS:DX欲显示字符串在主存中的首地址;字符串应以$(24H)结束功能:显示由DS:DX指定的字符串,stringdbHello,Everybody!$;在数据段定义要显示的字符串.movah,09h;设置功能号ah09hmovdx,offsetstring;提供入口参数dx字符串的偏移地址int21h;DOS功能调用字符串显示,4.键盘输入到缓冲区,DOS功能调用INT21H功能号:AH0AH入口参数:DS:DX缓冲区首地址(DS:DX)缓冲区字节数功能:输入到缓冲区,缓冲区的定义,第1字节事先填入最多欲接收的字符个数(包括回车字符,可以是1255)第2字节将存放实际输入的字符个数(不包括回车符)第3字节开始将存放输入的字符串实际输入的字符数多于定义数时,多出的字符丢掉,且响铃,bufferdb81;定义缓冲区;第1个字节填入可能输入的最大字符数db?;存放实际输入的字符数db81dup(?);存放输入的字符串.movdx,segbuffer;伪指令seg取得buffer的段地址movds,dx;设置数据段DSmovdx,offsetbuffermovah,0ahint21h,5.写文件或设备,DOS功能调用INT21H功能号:AH40H入口参数:DS:DX数据区首地址BX=文件代号CX=写入的字节数功能:把数据区内容输出到文件或设备,MOVAH,40H;设置功能号AH40HLEADX,STR;设置数据区首地址MOVBX,1;文件代号1表示标准设备显示器MOVCX,9;输出9个字节INT21H;,6.结束程序返回DOS,DOS功能调用INT21H功能号:AH4CH入口参数:AL返回码功能:结束程序返回DOSMOVAH,4CHINT21H,第三章指令系统和寻址方式,3.1寻址方式3.2指令系统3.380386后继机型的新增扩展指令和寻址方式,3.1寻址方式,3.1.1指令结构3.1.2操作数的寻址方式,计算机中的指令由操作码和操作数组成。操作数字段可以有一个、两个或三个,通常称为一地址、二地址或三地址指令。二地址指令中两个操作数分别称为源操作数和目的操作数。所谓寻址方式就是指令中寻找操作数的方式。,3.1.1指令结构,80 x86汇编语言指令的一般格式位:标号:指令助记符操作数;注释中的内容位可选项。,标号:符号地址,表示指令在内存中的位置。标号后应加冒号:。指令助记符:指令名称,是指令功能的英文缩写。操作数:指令要操作的数据或数据所在的地址。寄存器,常量,变量,表达式。注释:每行以分号“;”开头,汇编程序不处理。,3.1.2操作数的寻址方式,立即寻址方式操作数就在指令中,紧跟在操作码之后,操作数作为指令的一部分存放在代码段。例MOVAL,5H执行完此条指令后(AL)=05HMOVAX,3064H,注意:,执行时无需去内存取数,因此称为立即数。主要用于寄存器赋初值。立即数只能作为源操作数,并且长度与目的操作数一致。,寄存器寻址方式操作数就是寄存器中的值。指令中给出寄存器名。例MOVAL,BLMOVAX,BXMOVAL,BX错MOVAX,BL错,注意:,以上两种寻址方式都与存储器无关。以下各种寻址方式的操作数都在存储器中。偏移地址也称为有效地址(EA)。,直接寻址方式操作数的有效地址EA就在指令中。机器默认段地址在DS中。,例3.4例3.5例3.6,寄存器间接寻址方式操作数的有效地址在寄存器中,只允许使用BX、BP、SI和DI寄存器。物理地址=16dx(DS)+(BX)物理地址=16dx(DS)+(SI)物理地址=16dx(DS)+(DI)物理地址=16dx(SS)+(BP),例3.7,寄存器相对寻址方式操作数的有效地址是寄存器和位移量之和。位移量可以是8位/16位的常量,也可以是16位的符号地址。只允许使用BX、BP、SI和DI寄存器。默认搭配和寄存器间接寻址方式一样。例3.8,MOVAX,COUNTSIMOVAX,COUNT+SI当COUNT为16位位移量的符号地址时:如DS=3000H,SI=2000H,COUNT=4000H;(36000H)=34H,(36001H)=12H物理地址=16dx(段值)+EA=30000H+2000H+4000H=36000H,基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器内容之和。物理地址=16dx(DS)+(BX)+(SI)物理地址=16dx(DS)+(BX)+(DI)物理地址=16dx(SS)+(BP)+(SI)物理地址=16dx(SS)+(BP)+(DI),相对基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器以及一个位移量之和。基址寄存器BX和BP,变址寄存器SI和DI。默认段寄存器搭配和寄存器间接寻址方式一样。例3.10,注意,双操作数指令的两个操作数中,只能有一个使用存储器寻址方式。双操作数指令的两个操作数,长度须匹配。操作数的有效地址前可以加段跨越前缀,但在以下三种情况下不允许:串处理指令的目的串必须用ES段PUSH指令的目的和POP指令的源必须用SS段指令必须存放在CS段,3.2指令系统,3.2.1数据传送指令3.2.2类型扩展指令3.2.3算术运算指令3.2.4逻辑指令3.2.5移位指令3.2.6串操作指令3.2.7程序转移指令3.2.8处理器控制指令,8086指令系统可以分为八组:(1)数据传送指令(2)类型扩展指令(3)算术运算指令(4)逻辑指令(5)移位指令(6)串操作指令(7)程序转移指令(8)处理机控制指令,3.2.1数据传送指令,通用数据传送指令累加器专用传送指令地址传送指令标志寄存器传送,1.通用数据传送指令,MOV传送PUSH进栈POP出栈XCHG交换,(1)MOV传送指令,格式:MOVDST,SRC操作:(DST)(SRC)DST表示目的操作数,SRC表示源操作数。功能:将源操作数传送到目的操作数。,双操作数指令的规定,源操作数与目的操作数的长度必须一致。源操作数与目的操作数不能同时为存储器。目的操作数不能为CS和IP,因为CS:IP是程序当前地址。,例3.11例3.12例3.13例3.14例3.15例3.16,(2)PUSH进栈指令,格式:PUSHSRC操作:(SP)(SP)-2(SP)+1,(SP)(SRC)堆栈:后进先出内存区,以字为单位传送,SS:SP总是指向栈顶。例3.17,(3)POP出栈指令,格式:POPDST操作:(DST)(SP)+1,(SP)(SP)(SP)+2例3.18,(4)XCHG交换指令,格式:XCHGOPR1,OPR2操作:(OPR1)(OPR2)功能:把两个操作数互换位置。遵循双操作数指令的规定,但操作数不能为立即数。例3.19,2.累加器专用传送指令,IN;从I/O端口输入OUT;向I/O端口输出XLAT;换码其中I/O端口是CPU与外设传送数据的接口,单独编址,不属于内存,端口地址范围0000FFFFH.这组指令只限于AX,AL累加器。,(1)IN输入指令,长格式:INAL,PORT(字节);00FFHINAX,PORT(字)操作:AL(PORT)AX(PORT)功能:把端口PORT的数据输入到累加器。,短格式:INAL,DX(字节);PORT放入DXINAX,DX(字)操作:AL(DX)AX(DX)功能:把DX指向的端口的数据输入到累加器。,例3.20例3.21,(2)OUT输出指令,长格式:OUTPORT,AL(字节);00-FFHOUTPORT,AX(字)操作:PORTALPORTAX功能:把累加器的数据输出到端口PORT。,短格式:OUTDX,AL(字节);0000-FFFFHOUTDX,AX(字)操作:(DX)AL(DX)AX功能:把累加器的数据输出到DX指向的端口。例3.22,(3)XLAT换码指令,格式:XLAT操作:AL(BX+AL)功能:把BX+AL的值作为有效地址,取出其中的一个字节送AL。例3.23,3.地址传送指令,LEA有效地址送寄存器LDS指针送寄存器和DSLES指针送寄存器和ES,(1)LEA有效地址送寄存器指令,格式:LEAREG,SRC操作:REGSRC功能:把源操作数的有效地址EA送到指定的寄存器。例3.24例3.25,(2)LDS指针送寄存器和DS指令,格式:LDSREG,SRC操作:REG(SRC)DS(SRC+2)功能:把源操作数SRC所指向的内存单元中的两个字送到指定的寄存器REG和DS。例3.26,(3)LES指针送寄存器和ES指令,格式:LESREG,SRC操作:REG(SRC)ES(SRC+2)功能:把源操作数SRC所指向的内存单元中的两个字送到指定的寄存器REG和ES。例如LESDI,10HDS=C000H,(C0010H)=0180H,(C0012H)=2000H结果DI=0180H,ES=2000H,4.标志寄存器传送指令,LAHF标志寄存器FLAGS的低字节送AHSAHFAH送FLAGS的低字节PUSHF标志进栈POPF标志出栈以上传送类指令均不影响标志位,除SAHF,POPF外.,3.2.2类型扩展指令,CBW:AL扩展为AXCWD:AX扩展为DX,AX扩展方法为符号扩展。例3.28例3.29,3.2.3算术运算指令,加法指令减法指令乘法指令除法指令,1.加法指令,ADD加法ADC带进位加法INC加1,(1)ADD加法指令,格式:ADDDST,SRC操作:(DST)(DST)+(SRC)例3.30,溢出判断,以8位二进制数为例,综上所述,CF=1为无符号数的溢出,OF=1为有符号数的溢出.OF位:若两个操作数的符号相同,而结果的符号与之相反时OF=1,否则OF=0。CF位:有进位/借位时CF=1,否则CF=0。,(2)ADC带进位加法指令,格式:ADCDST,SRC操作:(DST)(DST)+(SRC)+CF例3.31,(3)INC加1指令,格式:INCOPR操作:(OPR)(OPR)+1,除INC不影响CF,它们都影响条件标志位.条件标志位(条件码)最主要有:进位CF,零ZF,符号SF,溢出OF,2.减法指令,SUB减法SBB带借位减法DEC减1NEG求补CMP比较,(1)SUB减法指令,格式:SUBDST,SRC操作:(DST)(DST)-(SRC),(2)SBB带借位减法指令,格式:SBBDST,SRC操作:(DST)(DST)-(SRC)-CF,(3)DEC减1指令,格式:DECOPR操作:(OPR)(OPR)-1,(4)NEG求补指令,格式:NEGOPR操作:(OPR)-(OPR)功能:对OPR求补,求-OPR,即反码+1.只有OPR为0时,CF=0。,(5)CMP比较指令,格式:CMPOPR1,OPR2操作:(OPR1)-(OPR2)不回送结果,只产生标志位。,CF=1为无符号数溢出,OF=1为有符号数溢出.例3.32例3.33例3.34例3.35,3.乘法指令,MUL无符号数乘法IMUL有符号数乘法,(1)MUL无符号数乘法指令,格式:MULSRC操作:操作数为字节时:(AX)(AL)X(SRC)操作数为字时:(DX,AX)(AX)X(SRC),(2)IMUL带符号数乘法指令,格式:IMULSRC操作:操作数为字节时:(AX)(AL)X(SRC)操作数为字时:(DX,AX)(AX)X(SRC),两个相乘的数必须长度相同。SRC不能是立即数。例3.36,4.除法指令,DIV无符号数除法IDIV有符号数除法,(1)DIV无符号数除法指令,(2)IDIV带符号数除法指令,格式:IDIVSRC操作与DIV相同余数和被除数同符号。被除数长度应为除数长度的两倍。SRC不能是立即数。例3.37例3.38,算术运算综合举例,例3.39,5.十进制调整指令,前面提到的所有算术运算指令都是二进制数的运算,为便于十进制计算,计算机提供了十进制调整指令,在二进制数计算的基础上,给予十进制调整,直接得到十进制结果。,BCD码(BinaryCodedDecimal):用二进制编码表示十进制数.四位二进制数表示一位十进制数,由于四位二进制数的权分别为8,4,2,1,所以又称为8421码.,压缩的BCD码4位二进制数表示一位十进制数。非压缩的BCD码8位二进制数表示一位十进制数,低4位为8421码,高4位无意义。,(1)压缩BCD码调整指令,DAA;加法十进制调整指令DAS;减法十进制调整指令,DAA;加法十进制调整指令格式:DAA操作:IFCF=1orAL高4位是AFTHENAL+60H.IFAF=1orAL低4位是AFTHENAL+6,例ADDAL,BL000010019DAA+0000010040000110113+011000010011BCD码9+4的结果是(10011)BCD即13,?DAA使AL自动+6IF每位BCD码值9THEN该位值加6例3.40BCD1=1834,BCD2=2789求:BCD331H,2-32H,3-33H,A-41H4.BX循环左移4位。,例5.5从键盘输入一个四位的十六进制数(其中字母为大写),并将其转换为二进制数显示输出。算法分析1.输入为数字09(ASCII码3039H),减30H,为大写字母AF(ASCII码4146H),减37H,将四次的输入拼装成四位十六进制数存放在BX中;2.循环利用16次移位从左到右显示BX寄存器中的二进制数。,例5.6从键盘接收八个英文字母,根据逻辑尺设立的标志显示输出相邻字符,标志为0显示其前驱字符,标志为1显示其后继字符。算法分析1.循环次数已知,但每次循环所做的操作不同;2.设置标志字,循环中依据标志字中的标志位选择操作。,5.2.3条件循环程序,例5.7从键盘输入一个单个字符,显示该字符的ASCII码(十六进制),回车键退出循环,终止程序。算法分析1.从键盘输入一个单个字符,该字符的ASCII码在AL中,为两位十六进制数;2.把每位十六进制数转换成ASCII码,用2号功能输出,高位为数字,低位为数字或AF。3.回车键退出循环。,5.2.4条件计数循环程序,例5.8设置键盘缓冲区为16个字节,从键盘输入一串字符,然后再从键盘输入一个单个字符,查找这个字符是否在字符串中出现,如果找到,显示该字符串,否则显示NOTFOUND。,5.2.5多重循环程序,例5.9显示输出20H7EH的ASCII码字符表,每行16个字符。例5.10有一个首地址为A的5个字的数组,请编程使该数组中的数从大到小排序.,冒泡排序算法:KK=N-1DOWHILEKK0;kkDI共比较遍数K=KKI=0DOWHILEK0;KCX每遍比较次数IFAI=0)。递归定义:0!=1N!=N*(N-1)!计算N!的C语言递归程序:jc(intn)intc;if(n=0)c=1;elsec=n*jc(n-1);return(c);,第七章高级汇编语言技术,宏汇编语言提供了类似于高级语言的某些复杂功能,如宏汇编、重复汇编与条件汇编,提高了使用汇编语言进行程序设计的质量和效率。,7.1宏汇编,宏是源程序中一段有独立功能的程序代码。它只需要在源程序中定义一次,就可以多次调用,调用时只需要用一个宏指令语句就可以了。宏功能既可以实现程序复用,又能方便的传递多个参数。,子程序优点:省存储空间优化程序结构便于调试和修改子程序缺点:调用、返回、保存、恢复需花开销参数传递复杂因此,在程序较短,或需要传送的参数较多的情况下,用宏汇编更加有利。,7.1.1宏定义、宏调用和宏展开,宏定义:宏指令名MACRO形参1,形参2,ENDM宏定义体是一组有独立功能的程序代码。宏指令名给出宏定义的名称,调用时就使用宏指令名来调用宏定义。第一个符号必须是字符。哑元表给出了宏定义中所用到的形式参数,每个哑元之间用逗号隔开。,宏调用:宏指令名实参1,实参2,宏指令被定义后,在源程序中就可以直接调用,称为宏调用。一般说来,实参的个数应和形参的个数相等,但汇编程序并不要求它们必须相等。若实参个数大于形参个数,则多余的实参不予考虑,若实参个数小于形参个数,则多余的形参取空值。例:multiply240,BX,SAVE,宏展开:在对源程序的汇编阶段,汇编程序对源程序中的每个宏调用都进行了宏展开,即用宏定义体取代源程序中宏指令名,用实参取代形参。应该注意,用实参取代形参后,所得到的语句应该是有效的,否则汇编程序将会指示出错。,例:1pushdx1pushax1movax,2401imulBX1movSAVE,ax1movSAVE+2,dx1popax1popdx表示这些指令是由宏展开而得到的(早期用+),例7.1用宏指令实现两个八位有符号数的乘法。宏定义:imultiplyMACROx,y,resultpushaxmoval,ximulymovresult,axpopaxENDM,宏展开:1pushax1moval,cl1imuldl1movbx,ax1popax1pushax1moval,ary1imulvar1movsave,ax1popax,宏调用:imultiplycl,dl,bximultiplyary,var,save,例7.2某工厂工人的周工资由计时工资和计件工资组成,计时工资按每小时工资率RATE乘以工作小时数计算;计件工资按超定额部分乘以SUP计算(超定额=实际完成的工件数MADE-定额工件数PART),工资总额放在WAGE中。宏定义如下:wagesmacrorate,hout,made,part,supwage=rate*hout+(made-part)*supendmrate=5part=100sup=4,宏调用:wagesrate,40,120,part,sup宏展开为:wage=rate*40+(120-part)*sup,从以上两个例子可以看出,子程序和宏指令具有类似的功能,但又有以下区别:空间的区别:宏指令并不节省目标程序的空间,而子程序在目标程序中只有一段;时间的区别:宏指令在运行时不需要其他额外的CPU开销,而子程序的调用、返回和保护现场、恢复现场需要占用时间;参数的区别:宏调用可实现多个参数的直接代换,方式简单灵活,而子程序参数传递麻烦。,宏调用和子程序调用工作方式的区别,7.1.2宏定义的嵌套,这种嵌套结构的特点是外层宏定义的宏体中又有宏定义,只有调用外层宏定义一次后,才能调用内层宏指令。例7.3用嵌套的宏定义实现两个八位数的算术运算。,宏定义:mathMACROmathname,action,nummathnameMACROx,y,resulepushaxmovnum,xactionymovresultaxpopaxENDMENDM,宏调用:mathimultiply,imul,al宏展开:imultiplyMACROx,y,resultpushaxmoval,ximulymovresult,axpopaxENDM,宏调用:mathdivide,div,ax宏展开:divideMACROx,y,resultpushaxmovax,xdivymovresult,axpopaxENDM,接下来可使用宏调用:divideary,var,save则宏展开如下:1pushax1movax,ary1divvar1movsave,ax1popax,7.1.3宏定义中使用宏调用,宏定义中使用的宏调用必须已经定义。例7.4用嵌套的宏定义实现字符显示。宏定义:INT21MACROFUNCTNMOVAH,FUNCTNINT21HENDMDISPCMACROCHARMOVDL,CHARINT212ENDM,宏调用:DISPCA宏展开:1MOVDL,A2MOVAH,22INT21H这里的2表示第二层展开结果。,7.1.4带间隔符的实参,在宏调用中,有时实参使用的是字符串(不是单引号括起来的),而是字符串中包含间隔符(如空格、逗号等),为使间隔符成为实参的一部分,则要用尖括号将字符串括起来作为一个实参的整体来替换形参。例7.5在数据段中定义40个字节的存储空间。defdbmacrobuf,xbufxendmdatasegmentdefdbarray,dataends宏展开为:1arraydb40dup(?),7.1.5连接操作符否则对进行汇编。,条件汇编伪指令有八条:IF表达式;表达式不为0,则满足条件IFE表达式;表达式为0,则满足条件IFDEF符号;符号已定义或被说明为EXTRN,则满足条件IFNDEF符号;符号未定义或未说明为EXTRN,则满足条件IFB;变量为空,则满足条件IFNB;变量不为空,则满足条件IFIDN,;两串相等,则满足条件IFNIDN,;两串不等,则满足条件,表达式可以是用关系操作符EQ,NE,LT,LE,GT,GE和逻辑运算符AND,OR连接的布尔表达式。例7.16例7.17例7.18,例7.16用宏指令MAX把三个变元中最大值放在AX中。变元个数不同产生的程序段也不同。maxmacrok,a,b,clocalnext,out1movax,aif(kge2)and(kle3)ifkeq3cmpc,axjlenextmovax,cendifnext:cmpb,axjleout1movax,bendifout1:endm,宏调用:max1,xmax2,x,ymax3,x,y,z宏展开:max1,x1movax,x1?0001:max2,x,y1movax,x1?0002:1cmpy,ax1jle?00031movax,y1?0003:,max3,x,y,z1movax,x1cmpz,ax1jle?00041movax,z1?0004:1cmpy,ax1jle?00051movax,y1?0005:,例7.17求K的阶乘,结果放在AX中。宏定义和子程序一样,也可以递归调用。用条件伪操作可结束宏递归。powmacrokpopaxmovbl,kmulblpushaxk=k-1ifkge1powkendifendm,宏调用:movax,1pushaxn=4pown,宏展开:1popax1movbl,n1mulbl1pushax1n=n-12popdx2movbl,n2mulbl2pushax2n=n-1,3popax3movbl,n3mulbl3pushax3n=n-14popax4movbl,n4mulbl4pushax4n=n-1,例7.18比较两个字符串是否相等,若相等则STR=1,否则STR=2。datasegmentstr1dbabcdefghstr2dbamkdefghifidn,str=1elsestr=2endifdataends经汇编后产生的LST列表文件可以看出STR=2,据此可以显示“不相等”,第八章输入输出和中断,8.1I/O方式,程序直接控制I/O中断DMA(直接内存访问)汇编使用系统提供的标准I/O程序,用dos系统功能调用int21h,8.1.1I/O端口,cpu与I/O设备通信有三种信息:控制,状态,数据(1)控制信息:从cpu输出到I/O接口,用来控制设备动作(2)状态信息:从I/O输入到cpu,表示设备当前状态(3)数据信息:输入I/Ocpu,输出cpuI/O,三种寄存器I/O接口部件有三种寄存器:数据,状态,控制命令包含在主机cpu中,通过访问这些寄存器与外部设备交换数据,把这些寄存器称为端口port。,端口编址0000ffffh其中00ffh可直接指定,100hffffh须由dx间接寻址。,8.1.2I/O指令,(1)输入(2)输出,8.1.3I/O的数据传送控制方式,无条件传送外设的数据传送随时可以进行,而不需要cpu查询外设的状态,用IN/OUT指令实现cpu与指定的外设寄存器之间的信息传送。,查询传送cpu不断测试外设状态,等待与外设同步,当多个设备要求传送时,依次查询,顺序即为优先级。,中断传送,直接存储器传送DMA成批交互,DMA控制器8237A过程见P175。,8.2中断,8.2.1中断的概念中断与中断源中断:由于某种事件的发生,使得cpu停止(中断)正在执行的程序,转而去执行处理该事件的程序,结束后,再继续执行先前被中断的程序。中断源:引起中断的事件,中断源的分类:1.内部中断:软件中断,不需要外部硬件的支持,不受中断标志IF的限制。(1)中断指令INT(2)cpu错误(3)为调试程序而设置的中断:断点,2.外部中断:来自cpu外部,硬件中断(1)不可屏蔽中断源NMI:硬件故障(2)可屏蔽中断源INTR:允许程序员确定是否处理。,中断类型号:INTn-是中断类型号中断优先级和中断嵌套:从高到低内中断不可屏蔽可屏蔽单步中断(调试),8.2.2中断向量表,中断向量:中断程序的入口地址cs:ip中断向量表:所有中断处理程序的入口地址表,8.2.3中断过程,分为四步:请求,响应,处理,返回1.请求:中断源满足一定条件,向cpu发出请求2.中断响应:,8.3中断处理程序设计,分为主程序设计和中断子程序设计,总复习1-7章,第一章基础知识,常用的ascii码表回车:0dh换行:0ah空格:20h09:30h39hAZ:41h5ahaz:61h7ah,Cpu寄存器:1.数据:ax,bx,cx,dx2.指针:sp,bp3.变址寄存器:si,di4.段寄存器:cs,ds,ss,es5.控制寄存器:ip,flags(of,cf,zf,sf),存储器1.编址:按字节编址2.字:高字节在高地址,低字节在低地址3.存储器分段:20位地址物理地址=16d*段地址+偏移地址,外设接口:一组寄存器-状态,控制,数据编址:端口号大于0ffh,放入dx寄存器,第二章上机操作,工作环境编辑程序EDIT.EXE汇编程序MASM.EXE连接程序LINK.EXE调试程序DEBUG.EXE,DEBUG主要命令-u-d-g-t-r,常用dos功能调用P31,第三章PC机的指令系统和寻址方式,寻址方式1.立即寻址2.寄存器寻址3.直接寻址4.寄存器间接寻址5.寄存器相对寻址6.基址变址寻址7.相对基址变址寻址,指令,第四章伪指令与源程序格式,常用的伪指令1.数据定义:db,dw,dd,dq,dt,dup,ptr,label2.equ,=3.段定义:segment.Endsassume,过程定义procendpnear/far程序结束end$和org,表达式中常用的操作符1.算术:+,-,/,*,mod2.逻辑:AND,OR,XOR,NOT3.关系:EQ,NE,LT,GT,LE,GE4.数据回送:TYPE,LENGTH,SIZE,OFFSET,SEG,汇编语言的一般格式返回控制台的方法:pushdsmovah,4chsubax,axint21hpushaxret,第五章循环,分支,跳转指令循环指令,第六章子程序设计,格式调用和递归,第七章高级汇编技术,宏定义格式macroendm宏调用local,%,&,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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