第4章汇编程序设计2_第1页
第4章汇编程序设计2_第2页
第4章汇编程序设计2_第3页
第4章汇编程序设计2_第4页
第4章汇编程序设计2_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4章章 汇编语言程序设计汇编语言程序设计4.4 汇编语言程序设计方法 汇编语言程序的常用结构与设计方法汇编语言程序的常用结构与设计方法从组织结构看: 一个汇编语言源程序可由多个“模块模块”组成, 每个模块则由一个或多个“段段”构成。u 模块和段:模块和段:一个汇编“模块”可以包含一个或几个长度小于64KB的“段”u 8086允许同时使用允许同时使用4个段:个段: 代码段(CS)、堆栈段(SS)、数据段(DS)和附加数据段(ES) 对应4个段寄存器(CS、DS、SS和和ES)u 使用汇编语言编程时需同时使用指令指令和伪指令伪指令汇编语言源程序有顺序、分支、循环、子程序等基本结构形式汇编语言源

2、程序有顺序、分支、循环、子程序等基本结构形式 第第4章章 汇编语言程序设计汇编语言程序设计4.4.1 程序设计的基本过程程序设计的一般步骤程序设计的一般步骤:(1)分析问题并抽象出数学模型,确定最佳算法。(2)程序结构框图和流程图。(3)合理分配内存工作单元和寄存器,并了解I/O端口地址。(4)编程并调试。(5)整理文档。评价程序质量的标准评价程序质量的标准:(1)合理组织数据,发挥MEM/Reg的作用。(2)程序逻辑结构好,便于二次开发。 (3)可读性强。 (4)高可靠性和可维护性。 (5)效率高(代码少)。第第4章章 汇编语言程序设计汇编语言程序设计u 汇编语言程序从编制到能够运行需要经过

3、: 编辑、汇编、链接、调试编辑、汇编、链接、调试 等。第第4章章 汇编语言程序设计汇编语言程序设计u 顺序结构 对应简单程序,顺序执行,无转移、无循环。 指令指针指令指针IPIP值线性增加。值线性增加。u 分支结构 依据不同条件分支(双分支或多分支)到各程序段。 IP值受标志位的影响而跳变。值受标志位的影响而跳变。程序的基本结构程序的基本结构YN 南京航空航天大学 电子信息工程学院第第4章章 汇编语言程序设计汇编语言程序设计u 循环结构 实现那些需要重复做的工作。 IP值因计数器值因计数器CX中的值不为零而循环。中的值不为零而循环。当型循环(当条件成立进入循环)循环初始设置循环体循环条件判断?

4、YNYN循环初始设置循环体循环条件判断?直到型循环(直到条件成立退出循环)第第4章章 汇编语言程序设计汇编语言程序设计例:将某段中的字符串“Hello!”传送到另一段中(内存数据块 的传送)。开始建立传送方向 DS: SI 源串首地址 ES: DI 目的串首地址CX 串长度串传送返回DOS利用变量定义字符串和缓冲区利用变量定义字符串和缓冲区4.4.2 顺序结构程序设计 按事件发展的先后,选择合适的指令有序地加以组合。按事件发展的先后,选择合适的指令有序地加以组合。AA SEGMENT;数据段;数据段1XX DB Hello!;定义源串;定义源串AA ENDSBB SEGMENT;数据段;数据段

5、2YY DB 6 DUP(?) ; 定义目的缓冲区定义目的缓冲区BB ENDSCC SEGMENT;代码段;代码段 ASSUME CS:CC, DS:AA, ES:BB;指示指令中标号、变量所在段;指示指令中标号、变量所在段START: CLD;设置传送方向;设置传送方向(地址指针低到高地址指针低到高) MOV AX , AA;DS: SI 源串首地址源串首地址 MOV DS , AX LEA SI , XXMOV AX , SEG YY;ES:DI 目的首地址目的首地址 MOV ES , AX MOV DI , OFFSET YY MOV CX , 6 ;CX 串的长度串的长度 REP MO

6、VSB;串传送;串传送(P59) MOV AH , 4CH;调用调用4CH系统功能,返回系统功能,返回DOS INT 21H CC ENDS END START;指示程序结束和程序入口;指示程序结束和程序入口第第4章章 汇编语言程序设计汇编语言程序设计4.4.3 分支结构程序设计例:编程实现下列函数的功能,其中X、Y为无符号字节数。 用比较指令CMP、或数据操作ADD/SUB/TEST等 指令来改变FR标志位OF/SF/ZF/PF/CF的值; 选用合适的条件转移指令Jcc,测试标志位的状态 来实现分支转移。设计分支程序的关键: 设定分支条件设定分支条件分支结构的实现方法:YXYXYXZ101第

7、第4章章 汇编语言程序设计汇编语言程序设计流程图AL XBL Y开开 始始AL = BL ?Z 0YZ 1Y AL BL ?NZ -1N结结 束束第第4章章 汇编语言程序设计汇编语言程序设计程程 序序;- 数据段定义数据段定义 -DATSEGMENTXDB242YDB67ZDB?DATENDS ;- 代码段定义代码段定义 -CODSEGMENTASSUME DS: DAT, CS: COD MOVAX, DATMOVDS, AX; 初始化DS;-第第4章章 汇编语言程序设计汇编语言程序设计MOVAL, XMOVBL, YCMPAL, BLJEC1 ; ALBL 则跳转至C1,否则继续执行JAC

8、2 ; AL BL 则跳转至C2,否则继续执行MOVAL, -1EXT: MOVZ, ALMOV AH,4CH; 返回DOS INT 21HC1:MOVAL, 0JMPEXTC2:MOVAL, 1JMPEXT;-CODENDSENDMAIN第第4章章 汇编语言程序设计汇编语言程序设计4.4.4 循环结构程序设计循环程序是在满足某些条件时对一段程序的重复执行。循环程序是在满足某些条件时对一段程序的重复执行。 一般由4部分组成:(1)参数初始化 为循环做准备,设置循环计数值,设置变量初值(2)循环体 核心部分,包括循环的全部执行指令(3)参数修改 修改操作数地址,为下次循环做准备(4)循环控制 修

9、改计数器值,判断循环控制条件,决定是否跳出循环第第4章章 汇编语言程序设计汇编语言程序设计先判断后执行例:AX寄存器中有一个16位的二进制数,编程统计其中1的个 数,结果存放在CX寄存器中。 MOV CX,0;置结果计数器初值LP: AND AX,AX;AX=0否 JZ EXIT1;是, ZF=1,退出循环 SAL AX,1;否,AX最高位移至CF,空位补0 JNC ZERO;CF0,转ZERO继续循环 INC CX;CF1,结果计数器加1ZERO: JMP LPEXIT1: HLT控制循环体的条件:当当AX内容为全内容为全0,不必再继续统计。,不必再继续统计。第第4章章 汇编语言程序设计汇编

10、语言程序设计方法二:方法二: MOV CX, 0LOP: TESTAX,0FFFFH JZSTOP JNSSHIFT ;SF=0则跳转则跳转 INCCXSHIFT: SHLAX,1 JMPLOP STOP:HLT常用循环控制方法: 计数控制循环次数已知。 条件/状态控制循环次数未知。多重循环(复杂的循环结构)多重循环(复杂的循环结构)注意:(1)各重循环的初始控制条件及程序实现(2)防止出现死循环,即不能让循环回到初始条件,引起死循环例:存储器数据段从例:存储器数据段从BUFBUF开始存放一个字数组,数组中第一个字中存放该数开始存放一个字数组,数组中第一个字中存放该数组的长度组的长度N N,编

11、程使数组中数据从小到大排列。,编程使数组中数据从小到大排列。方法一:冒泡排序。从第一个数据开始相邻的数比较,若次序不对,两数交换位置。第一遍比较N-1次后,最大的数已到了数组尾,第二遍仅需比较N-2次,共比较N-1遍完成排序,共两重循环。开始开始初始化;数组起始地址初始化;数组起始地址SISI;内循环次数;内循环次数N-1N-1CX;外循环次数;外循环次数N-1 DXi=0地址地址+2数数i=数数i+1?YN两数位置交换两数位置交换内循环计数内循环计数CX-1CX=0?NY外循环计数外循环计数DX-1DX=0?NY结束结束DATA SEGMENT BUF DW 15,36,8600,3768H

12、,3412H,125EH,76HDATA ENDSSTACK SEGMENT STACK STACK SA DB 100 DUP(?) TOP LABEL WORDSTACK ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKMAIN PROC FARSTART: MOV AX, STACK MOV SS, AX MOV SP, OFFSET TOP PUSH DS SUB AX, AX PUSH AX MOV AX, DATA MOV DS, AX MOV BX, 0 MOV CX, BUFBX ;设置计数器设置计数器CX,内循环次数内循环次

13、数 DEC CXL1: MOV DX, CX ;设计数器设计数器DX,外循环次数外循环次数L2: ADD BX, 2 MOV AX, BUFBX ;取取BUFI与与BUFI+2 CMP AX, BUFBX+2 ;若若BUFI=BUFI+2转转 JBE CONTI XCHG AX, BUFBX+2 ;否则两数交换否则两数交换 MOV BUFBX, AXCONTI: LOOP L2 ;内循环内循环 MOV CX, DX ;外循环次数赋给外循环次数赋给CX MOV BX, 0 ;地址返回第一个数据地址返回第一个数据 LOOP L1 ;外循环外循环 RETMAIN ENDPCODE ENDS END

14、START第第4章章 汇编语言程序设计汇编语言程序设计4.4.5 子程序设计与调用技术两种子程序: 重复使用的程序段或具有通用性便于共享的程序段 (键盘处理、代码转换等); 中断服务程序 (中断随机产生,对它的处理只能采用子程序的形式。)1. 子程序的调用与返回u 子程序在代码段中以过程的形式存在。调用方式有4种: 段内或段间的直接调用,段内或段间的间接调用。段内或段间的直接调用,段内或段间的间接调用。u 对普通子程序 CALL:断点保护,转子程序。 RET: 断点恢复 。u 对中断服务程序 INT指令或外部事件外部事件触发 IRET:断点恢复 。合理使用子程序是实现模块化程序设计的重要方法。

15、合理使用子程序是实现模块化程序设计的重要方法。第第4章章 汇编语言程序设计汇编语言程序设计2. 子程序设计与应用中的问题(1)现场的保护与恢复 u “现场” 转向子过程执行时转向子过程执行时主过程的状态主过程的状态,包括: 所有寄存器及指令指针的内容。为避免主、子过程各自的数据信息与工作状态相互干扰, 程序设计时尽量使主、子过程有属于自己的工作空间。形式二: PUSH BX PUSH CX CALL 子程序 POP CX POP BX常用方法:将常用方法:将PUSH与与POP指令成对地安排在子程序的开始和结束指令成对地安排在子程序的开始和结束(对中断服务程序必须用这种方法)(对中断服务程序必须

16、用这种方法)形式一: DTOB PROC . PUSH BX . PUSH CX CALL DTOB . POP CX . POP BX . RET DTOB ENDP第第4章章 汇编语言程序设计汇编语言程序设计u 参数传递常用方法(利用一些公共区域 ): 使用约定的寄存器传递; 使用约定的存储单元(参数表、变量)传递 使用堆栈传递(2)参数传递(3)子程序说明(对子程序的注释,方便调用者使用)入、出口参数入、出口参数:传给子程序的参数及从子程序返回的参数。参数可以是数据本身,也可以是数据的存储地址。参数可以是数据本身,也可以是数据的存储地址。 功能描述(子程序名称、功能、性能等)。 入口、出

17、口参数。 所用寄存器和存储单元。 子程序中又调用的其它子程序。 调用实例(可有可无)。 主过程主过程子过程子过程1CALL 子过程子过程1断点断点1子过程嵌套示意图子过程嵌套示意图子过程子过程2RETRETCALL 子过程子过程2断点断点2第第4章章 汇编语言程序设计汇编语言程序设计(4)调用子程序的若干技术 子程序嵌套调用:子程序中调用其它子程序称为嵌套。 只要堆栈空间允许,嵌套层次不限。 子程序递归调用:子程序直接或间接调用自身称为递归调用。 含有递归调用的子程序称为递归子程序。 可重入子程序:子程序被调用后,还未执行完又被另一个 程序调用的过程称为重入。 能够重入的子程序称为可重入子程序

18、。 注:DOS功能调用是不可重入的。 第第4章章 汇编语言程序设计汇编语言程序设计3. 子程序应用举例例:求字节数组ARRAY中所有元素之和,结果送SUM字单元。;子程序名:SUM1。程序功能:求字节数组和 ;入口参数:SI=数组首地址,CX=数组长度;出口参数:AX=数组和。 使用寄存器:AX,CX,SISUM1 PROC NEAR MOV AX,0;数组和在;数组和在AX中中 CMP CX,0 JZ EXIT1AGAIN: ADD AL,SI ADC AH,0;和或许为字;和或许为字 INC SI LOOP AGAINEXIT1: RETSUM1 ENDP;子程序结束;子程序结束 第第4章章 汇编语言程序设计汇编语言程序设计DATA SEGMENTARRAY DBd1,d2,d3,dn ;定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论