微机原理与接口技术-六章-程序设计.ppt_第1页
微机原理与接口技术-六章-程序设计.ppt_第2页
微机原理与接口技术-六章-程序设计.ppt_第3页
微机原理与接口技术-六章-程序设计.ppt_第4页
微机原理与接口技术-六章-程序设计.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章 微型计算机的程序设计,6.1 程序设计步骤 6.2 简单程序 6.3 分支程序 6.4 循环程序 6.5 子程序,6.1 程序设计步骤, 分析问题 建立数学模型 确定算法 绘制程序流程图 内存空间分配 编制程序与静态检查 程序调试,程序:计算机命令(语句)的有序集合。,汇编语言程序设计步骤:,6.2 简单程序(1),例:将内存单元10050H的内容拆成两段,每段4位,分别存 入10051H(低4位)和10052H(高4位)单元。即 10051H和10052H单元的高4位都为0。,分析: 理解题意,假设10050H单元的内容是6CH,题意是把它分成06H和0CH,分别存入10051H和1

2、0052H单元中。,确定算法: 可以通过移位指令,也可以用逻辑与运算指令(与0FH)。,6.2 简单程序(2),内存分配,内存地址 内容 10050H 原始数(6CH) 10051H 原低4位(0CH) 10052H 原高4位(06H),简单地画一个表,便于日后查看,静态检查程序是否有错,6.3 分支程序(1),两种分支结构示意图,例:编一个程序。从外设71H取一个数M,判断其值是否在10和 20之间,即10M20。如果M20,则送0FFH给外设73H; 如果M10,则送00H给外设73H;如果10M20, 则送88H给外设73H。, 分析 根据题意需要两次判断M的大小,根据判 断结果把00H

3、或0FFH或88H输出到73H端口。, 确定算法 可以使用低于JB和高于或等于转移指令JAE,MOV AL,BL OUT 73H,AL,6.4 循环程序,开始,判断,循环体,结束处理,结束,初始化,循环控制, ,循环程序举例,例: 求两个多字节数 之和。这两个数 在10050H开 始的单元中, 连续存放, 低位在小地 址一端,结果 放在两个数 之后。设这 两个多字节 数均为八个 字节长。,例:设计一个软件延时程序,延时时间约1ms,例: 求无符号数组中的最大值。已知: 数组存放在20042H开始的单元,数组长度100,最大值送存20040H开始的单元。,START: MOV AX,2000H

4、MOV DS,AX MOV BX,0042H MOV AX,0 MOV CX,100 NEXT1: CMP AX,BX JA NEXT ;AX高于BX转到NEXT MOV AX,BX NEXT: INC BX INC BX LOOP NEXT1 MOV 0040H,AX HLT,循环次数已知(计数控制),必须采用寄存器间址,才能实现循环。,6.5 子程序,子程序:也叫过程,相对主程序而言,是一个子的程序段, 它能被主程序调用,也能被其它子程序调用,一般把有公用性、重复性或有相对独立性的程序设计成子程序,把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块(子程序)供其他程序使用。 子程

5、序可以实现源程序的模块化,可简化源程序结构,提高编程效率。 主程序需要利用CALL指令调用子程序。 子程序需要利用RET指令返回主程序。,汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下: 过程名PROC NEAR/FAR ;过程体 过程名ENDP NEAR属性(段内近调用) FAR属性(段间远调用),一、子程序编写注意事项,子程序要利用过程定义伪指令声明。 子程序中对堆栈的压入和弹出操作要成对使用,保持堆栈的平衡。 子程序应安排在代码段的主程序之外,最好放在主程序执行终止后的位置,也可以放在主程序开始执行之前的位置。 处理好子程序与主程序间的参数传递问题。 提供必要的子程

6、序说明信息。,二、举例,例: MY SEGMENT ASSUME CS:MY MAIN PROC FAR START: PUSH DS SUB AX,AX PUSH AX MOV CL,04 CALL DP5 MOV BL,CL CALL DP5 ADD AL,BL RET MAIN ENDP,DP5 PROC NEAR MOV AL,CL SAL AL,1 SAL AL,1 ADD AL,CL MOV CL,AL RET DP5 ENDP MY ENDS END START ? ? ?,例: 累加数组中的元素。 主程序 data segment ary dw 1,2,3,4,5,6,7,8,

7、9,10 count dw 10 sum dw ? data ends code segment main proc far assume cs:code, ds:data start: push ds sub ax, ax push ax mov ax, data mov ds, ax call proadd ret main endp,proadd proc near push ax push cx push si lea si, ary mov cx, count xor ax, ax next::add ax, si add si, 2 loop next mov sum , ax p

8、op si pop cx pop ax ret proadd endp code ends end start,子程序,复习1、子程序的调用与返回(1), 段内直接调用与返回,格式:CALL 过程名,功能:调用当前段内的子程序 操作:SPSP2,SPIP,IPIP+disp,子程序入口地址与当前地址的差值,格式:RET 操作:IP SP,SP SP+2, 段内间接调用与返回,格式:CALL OPRD 操作:SPSP2,SPIP,IP(OPRD) 格式: RET 操作:IP SP,SP SP+2,16位通用寄存器或字存储器, 段间直接调用与返回,格式:CALL 过程名,功能:调用其它代码段中的子

9、程序 操作:SPSP-2,SPCS,SPSP-2,SPIP IP过程入口地址的偏移量 CS过程入口地址的段值,远过程,复习1、子程序的调用与返回(2),格式:RET 操作:IP SP,SP SP+2,CSSP,SPSP+2,复习1、子程序的调用与返回(3), 段间间接调用与返回,格式:CALL OPRD 操作:SPSP-2,SPCS, SPSP-2 ,SPIP IP(OPRD低),CS(OPRD高) 格式: RET 操作:IP SP,SP SP+2 ,CSSP,SPSP+2,双字存储器操作数,2、子程序设计与应用应注意的问题, 现场保护与恢复,子程序中要保护该程序中要使用的寄存器,返回时,恢复

10、现场。后入栈的要先弹出。,例:,DELAYIS: PUSHF PUSH CX,POP CX POPF RET,后进先出, 参数传递必须设计好子程序中用到了哪些寄存器或 存储单元。哪些是需要调用程序提供的, 哪些是结果提供给调用程序的。,2、子程序设计与应用应注意的问题,子程序设计举例:,找出一个数据块中的最大数,数据块长度在(2001H)单元,数据块从(2002H)单元开始存放,把找出的最大值放到(2000H)单元, 假设数据块中的数是无符号的 8 位数,SI=2001H 循环次数CL=SI 最大值初值AL=00 SI+1指向数据块,MOV SI,2001H MOV CL,SI INC SI

11、MOV AL,00 MOV CH,00 CLC CMP AL,SI JC LESS JMP NLESS MOV AL,SI INC SI LOOP NEXT MOV 2000H,AL HLT,NEXT: LESS: NLESS:,6.6 查表程序,STAR:MOV BX,2000H MOV AL,5 XLAT HLT,MOV AH,0 ADD BX,AX MOV AL,BX,DATA SEGMENT TABLE DB 0,1,8,27,64,125,216 X DB 2 Y DB 3 Z DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,DATA MOV AL,X CALL AA MOV CL,AL ADD

温馨提示

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

评论

0/150

提交评论