汇编语言:第5章 寻址方式

举报
资源描述
寻址方式寻址方式本章结构本章结构5.4子程序设计5.3循环程序设计5.1顺序程序设计5.2分支程序设计寻址方式寻址方式主要内容主要内容3、转移指令、循环指令和子程序伪指令1、顺序、分支、循环结构程序设计2、子程序设计寻址方式寻址方式教学要求教学要求3、转移指令、循环指令和子程序伪指令1、顺序、分支、循环结构程序设计2、子程序设计掌握了解 转移表法和地址表法多分支程序的设计原理;多重循环程序的结构形式,内层循环与外层循环遵守的层次结构规则,参数修改对各层的相互影响;汇编递归程序方法。汇编语言程序设计汇编语言程序设计(2)根据算法,确定程序流程或画出程序框图。(4)上机调试程序。(1)分析题意,确定算法。编制一个汇编语言程序的步骤(3)根据流程或框图编写程序。5.1顺序程序设计顺序程序设计n顺序结构是最简单的程序结构,程序的执行顺序就是指令的编写顺序,所以,安排指令的先后次序就显得至关重要。5.1顺序程序设计顺序程序设计【例例】设置光标到屏幕左上角设置光标到屏幕左上角SET_CURPROCMOVAH,2;设置光标位置功能MOVBH,0;页号MOVDX,0;行DH,列DLINT10H;BIOS输出字符中断RETSET_CURENDP这个程序段是顺序执行的,一条指令执行后顺序执行紧接其后的另一条指令。5.1顺序程序设计顺序程序设计【例例】设在设在X X单元中存放一个单元中存放一个0 07 7之间的整数,用查表法之间的整数,用查表法求出其平方值,并将结果存入求出其平方值,并将结果存入Y Y单元。单元。n分析:根据题意,首先将07所对应的平方值存入连续的8个单元中,构成一张平方值表,其首地址为SQTAB。n由表的存放规律可知:表首址SQTAB与X单元中的数i之和,正是i2所在单元的地址。5.1顺序程序设计顺序程序设计DATA SEGMENT;DATA SEGMENT;数据段定义数据段定义SQTAB DB 0,1,4,9,16,25,36,49 ;SQTAB DB 0,1,4,9,16,25,36,49 ;平方值表平方值表X DB 5X DB 5Y DB?Y DB?DATA ENDSDATA ENDSSTACK SEGMENT PARA STACK STACKSTACK SEGMENT PARA STACK STACKTAPN DB 100 DUP(?)TAPN DB 100 DUP(?)TOP EQU LENGTH TAPNTOP EQU LENGTH TAPNSTACK ENDSSTACK ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKASSUME CS:CODE,DS:DATA,SS:STACK5.1顺序程序设计顺序程序设计SQRTSUB PROC FARPUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AL,X ;取数iMOV AH,0MOV BX,OFFSET SQTAB ;BX表首址ADD BX,AXMOV AL,BX ;取i2并保存MOV Y,ALRETSQRTSUB ENDPCODE ENDSEND SQRTSUB5.2分支程序设计分支程序设计5.2.1 转移指令转移指令5.2.2 分支程序的结构分支程序的结构5.2.3 分支程序设计举例分支程序设计举例5.2分支程序设计分支程序设计l由于汇编语言需要用转移指令来实现分支结构,而转移指令肯定会破坏程序的结构,所以,编写清晰的分支结构是掌握该结构的重点。n计算机可根据不同条件进行逻辑判断,从而选择不同的程序流向。程序的流向是由CS和IP值决定的,当程序的转移仅在同一段内进行时,只需修改偏移地址IP的值;如果程序的转移是在不同段之间进行的,则段基址CS和偏移地址IP的值均需要修改。l分支结构是一种非常重要的程序结构,也是实现程序功能选择所必要的程序结构。5.2分支程序设计分支程序设计5.2.1 转移指令转移指令l转移指令是汇编程序员经常要用到的一组指令。在高级语言中,时常有“尽量不要使用转移指令语句”的劝告。但是,在汇编语言程序中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令。n转移指令分为无条件转移指令和有条件转移指令。5.2分支程序设计分支程序设计5.2.1 转移指令转移指令l无条件转移指令JMP指令是从程序当前执行的地方无条件地转移到另一个地方执行。指令格式JMP 地址表达式指令功能无条件地转移到由地址表达式所确定的目标单元,本指令对标志位无影响4种方式段内直接转移段内间接转移段间直接转移段间间接转移说 明这是一种相对寻址方式。它转移的目标地址是当前IP内容加上一个8位相对位移量(DISP),DISP是汇编程序在汇编源程序时,根据目标地址和当前IP之间的距离自动生成的它转移的目标地址可通过寄存器或存储单元来寻址 当一条无条件转移指令中的地址表达式是一个段间(FAR)标号或段间标号加减一常量(必须在该标号所在段内)时,则该指令被汇编成一个段间直接转移指令代码它转移的目标地址由存储器寻址方式指定的内存中的连续两个字来决定,低地址的字取代IP,高地址的字取代CS功能IP=IP+DISPIP=Reg16 或 P=Mem16无条件转移指令无条件转移指令JMPJMP 5.2分支程序设计分支程序设计5.2.1 转移指令转移指令nJMP指令转移可以是短(short)转移(偏移量在-128B,127B之内)、近(near)转移(偏移量在-32KB,32KB之内)、远(far)转移(在不同的代码段之间转移)。n短转移和近转移都是段内转移,JMP指令只将目标指令位置处的偏移量赋值给指令指针寄存器IP,从而实现转移功能n远转移属于段间转移,JMP指令不仅会把目标指令位置处的偏移量赋值给指令指针寄存器,同时还会把目标指令所处的代码段的段地址赋值给当前代码段寄存器CS。无条件转移指令无条件转移指令JMPJMP5.2分支程序设计分支程序设计5.2.1 转移指令转移指令n有条件转移指令是一组及其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段。有条件转移指令有条件转移指令5.2分支程序设计分支程序设计5.2.1 转移指令转移指令有条件转移指令有条件转移指令指令格式 指令说明当满足条件而发生转移的指令,称为条件转移指令。它们以某些标志位或这些标志位的逻辑运算作为依据,若满足指令所规定条件,则程序转移,否则顺序执行根据单个标志位的条件转移指令用于无符号数的条件转移指令用于带符号数的条件转移指令(1)有进位转移(JC)或无进位转移(JNC)(2)等于/为零转移(JE/JZ)或不等于/非零转移(JNZ)(3)负数转移(JS)或正数转移(JNS)(4)溢出转移(JO)或不溢出转移(JNO)(5)偶校验转移(JP/JPE)或奇校验转移(JNP/JPO)(6)寄存器CX为零转移(JCXZ)(1)高于转移(JA)/不低于且不等于转移(JNBE)(2)高于或等于转移(JAE)/不低于转移(JNB)(3)低于转移(JB)/不高于且不等于转移(JNAE)(4)低于或等于转移(JBE)/不高于转移(JNA)(1)大于转移(JG)/不小于且不等于转移(JNLE)(2)大于或等于转移(JGE)/不小于转移(JNL)(3)小于转移(JL)/不大于且不等于转移(JNGE)(4)低于或等于转移(JLE)/不高于转移(JNG)5.2分支程序设计分支程序设计5.2.2 分支程序的结构分支程序的结构分支程序结构有两种形式:双分支结构和多分支结构。5.2分支程序设计分支程序设计5.2.2 分支程序的结构分支程序的结构分支程序设计要点n(1 1)首先根据处理的问题用比较、测试、算术运算、逻辑运算等方)首先根据处理的问题用比较、测试、算术运算、逻辑运算等方式,使标志寄存器产生相应的标志位。例如,比较两个单元地址的式,使标志寄存器产生相应的标志位。例如,比较两个单元地址的高低、两个数的大小,测试某个数据是正还是负,测试数据的某位高低、两个数的大小,测试某个数据是正还是负,测试数据的某位是是“0 0”还是还是“1 1”等,将处理的结果反映在标志寄存器的等,将处理的结果反映在标志寄存器的CFCF、ZFZF、SFSF、DFDF和和OFOF位上。位上。n(2 2)根据转移条件选择适当的转移指令。通常一条条件转移指令只)根据转移条件选择适当的转移指令。通常一条条件转移指令只能产生两路分支,因此要产生能产生两路分支,因此要产生n n路分支需路分支需n n-1-1条条件转移指令。条条件转移指令。n(3 3)各分支之间不能产生干扰,如果产生干扰,可用无条件转移语)各分支之间不能产生干扰,如果产生干扰,可用无条件转移语句进行隔离。句进行隔离。5.2分支程序设计分支程序设计5.2.3 分支程序设计举例分支程序设计举例【例例】设有单字节无符号数设有单字节无符号数X、Y、Z,若,若X+Y255,求,求X+Z;否则求;否则求X-Z,运算结果放在运算结果放在F1中(中(X、Y、Z、F1均为字节变量名)。均为字节变量名)。n分析:这是一个双分支结构。因为X、Y均为无符号数,当X+Y255时会产生进位即CF=1,所以可以用进位标志来判断5.2分支程序设计分支程序设计5.2.3 分支程序设计举例分支程序设计举例MOV AL,XMOV AL,XMOV BL,ALMOV BL,ALADD AL,YADD AL,YJNC LET ;JNC LET ;若无进位若无进位 则转则转LETLETADD BL,Z ADD BL,Z DONE:MOV F1,BLDONE:MOV F1,BLHLT HLT LET:SUB BL,Z LET:SUB BL,Z JMP DONEJMP DONE5.2分支程序设计分支程序设计5.2.3 分支程序设计举例分支程序设计举例【例】已知符号函数,假设任意给定x值,存放在内存RS1单元中,求出函数y的值,存放在内存RS2单元中。5.2分支程序设计分支程序设计5.2.3 分支程序设计举例分支程序设计举例nDATASEGMENTnRS1DBX;存放自变量XnRS2DB?;函数Y值的存储单元nDATAENDSnCODESEGMENTnASSUMECS:CODE,DS:DATAnSTART:MOVAX,DATAnMOVDS,AXnMOVAL,RS1;ALXnCMPAL,0;将X与0比较nJGEBIG;若X0BIGnMOVRS2,0FFH;若X0,(RS2)-1补0FFHnJMPDONEnBIG:JEEQUL;若X0EQULnMOVRS2,1;若X0,(RS2)1nJMPDONEnEQUL:MOVRS2,0;若X0,(RS2)0nDONE:MOVAH,4CHnINT21HnCODEENDSnENDSTART5.3循环程序设计循环程序设计 在实际工作中,有时要求对某一问题进行多次重复处理,而仅仅只是初始条件不同,这种计算过程称为具有循环特征的,而循环程序设计是解决这类问题的一种行之有效的方法。循环程序是采用重复执行某一段程序来实现要求完成计算的编程方法。5.3循环程序设计循环程序设计5.3.1 循环指令循环指令5.3.2 循环程序的结构循环程序的结构5.3.3 循环程序设计举例循环程序设计举例5.3循环程序设计循环程序设计5.3.1 循环指令循环指令 循环语句当然可以用条件转移指令来实现,除此之外,在80 x86系统中还有专门的循环控制指令来简化循环程序的设计。循环控制指令包括重复控制指令和串操作指令。5.3循环程序设计循环程序设计5.3.1 循环指令循环指令 重复循环控制指令重复循环控制指令 指令名称指令名称指令功能指令功能LOOP指令将CX内容减1,若CX不等于0,则循环至目标地址处(即IP+DISP),否则顺序执行后续指令LOOPZ/LOOPE指令将CX内容减1,若CX不等于0,且标志位ZF=1时,才循环至目标地址处,
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 中学教育 > 初中教育


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号