微型计算机的程序设计_第1页
微型计算机的程序设计_第2页
微型计算机的程序设计_第3页
微型计算机的程序设计_第4页
微型计算机的程序设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

微型计算机的程序设计第一页,共二十二页,2022年,8月28日6.1程序设计步骤汇编语言程序设计的步骤:分析问题,全面理解问题。建立数学模型,确定算法。绘制程序流程图。内存空间分配:工作区尽可能设在CPU的内部寄存器中。编制程序和静态检查程序调试实验第二页,共二十二页,2022年,8月28日6.2简单程序

程序执行方式为“从头到尾”逐条执行指令语句,直到程序结束。例6.1:用数学运算命令,对数据段中两个16位数做加法运算:3281H+2797H。这两个数从地址10050H开始连续存放,低位在小地址一端,结果放在这两个数之后。1.分析题目:可用16位寄存器进行运算,一次完成。2.确定方法:采用加法指令实现两个数相加,采用传送指令进行存储。10050H81H32H97H27H

和低8位和高8位

第三页,共二十二页,2022年,8月28日6.2简单程序3.程序流程图:4.内存空间分配:开始AX被加数+加数(10054)和(10055)单元AX暂停初始化:段地址DS1000H被加数指针SI50H加数指针DI52H和的指针BX54HAX被加数内存地址内容10050H被加数低8位81H10051H被加数高8位32H10052H加数低8位97H10053H加数高8位27H10054H和的低8位10055H和的高8位3281H+2797H第四页,共二十二页,2022年,8月28日6.2简单程序5.编制的程序如下:MOVAX,1000HMOVDS,AX;DS=1000HMOVSI,0050H;被加数地址MOVDI,0052H;加数地址MOVBX,0054H;和的地址CLC;清CFXORAX,AX;清AXMOVAX,[SI];取被加数到AXADDAX,[DI];相加运算,AXAX+[DI]MOV[BX],AX;存一个字到[BX]HLT;暂停为什么用这三个寄存器?为何不把1000H直接赋给DS?这两条指令是必须有的吗?在此程序中其他指令不变的情况下,改用ADC可以吗?第五页,共二十二页,2022年,8月28日6.3分支程序利用条件转移指令,根据条件是否满足,来改变程序执行的顺序。IF…THEN…结构标号:条件满足?处理NY程序结构:

测试/比较指令(TEST/CMP)

条件转移指令(Jx标号)

处理体

标号:其他指令

…第六页,共二十二页,2022年,8月28日6.3分支程序例6.3:求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存数据段(2800H)单元中。1.分析题目:应该先决定哪一个值较大,然后再用大数减去小数,得到绝对值。2.程序流程图:开始AX-BX>=0?BX

BX-AX内存(2800)和(2801)单元

BX内存(2800)和(2801)单元AX结束YAX

AX-BXN初始化第七页,共二十二页,2022年,8月28日6.3分支程序3.编制的程序如下:

CLC;清CFSUBAX,BX;AX

(AX-BX)

JCAA;CF=1转AA去执行

MOVDI,2800H;结果指针

MOV[DI],AX;结果送到2800H和2801H单元

HLT;暂停AA:SUBBX,AX;BX

(BX-AX)

MOVDI,2800HMOV[DI],BXHLT此指令执行前,AX中的数据是什么?通过这两条指令能将数据送入[2800H]中吗?第八页,共二十二页,2022年,8月28日6.3分支程序例题6.3程序可编制如下:

MOV DX,0000H MOVDS,DX ;设置段地址

MOVDI,2800H ;结果数据存放地址

CMPAX,BX ;AX-BX,结果影响标志位

JCAA ;若产生借位,则CF=1转AA SUBAX,BX MOV[DI],AX ;结果送到2800H和2801H单元

HLT ;暂停AA:SUBBX,AX ;BX

(BX-AX)

MOV[DI],BX HLT第九页,共二十二页,2022年,8月28日6.3分支程序例:比较AL、BL、CL中带符号数的大小,将最小数放在AL中。

CMPAL,BL ;AL和BL比较

JNGBBB ;若AL≤BL,则转BBB XCHGAL,BL ;若AL>BL,则交换BBB: CMPAL,CL ;AL和CL比较

JNGCCC ;若AL≤CL,则转CCC XCHGAL,CL ;若AL>CL,则交换CCC: HLT第十页,共二十二页,2022年,8月28日6.4循环程序循环程序:强制CPU重复执行某一程序段。一般由4部分构成:初始化:建立循环次数计数器,设定数据地址的初值。循环体:要重复执行的程序内容。循环控制:修改变量、修改指针、修改循环计数器。结束处理:分析和存放程序的结果。第十一页,共二十二页,2022年,8月28日6.4循环程序循环程序单循环:之有一重循环。多重循环:两重以上的循环。循环控制计数控制:事先设定循环次数,达到次数停止循环。条件控制:根据是否满足一定的条件来控制循环。第十二页,共二十二页,2022年,8月28日6.4循环程序DO-WHILE结构先执行,再判断条件。工作部分至少执行一次。初始化循环体循环控制继续循环?YN第十三页,共二十二页,2022年,8月28日6.4循环程序WHILE结构先判断条件,再执行。工作部分有可能一次都不执行。初始化循环体循环控制继续循环?YN第十四页,共二十二页,2022年,8月28日6.4循环程序例6.5:求两个多字节数之和,这两个数在数据段10050H地址开始的内存单元中连续存放,低位在小地址一端,运算结果放在这两个数之后。设这两个多字节数均为8个字节长。1.分析题目:86系列指令系统可以进行16位处理,所以,循环次数是4次。2.程序流程图:3.

编制的程序:开始AXAX+[DI]+CF[BX]AXSISI+2,DIDI+2BX

BX+2,CXCX-1暂停初始化段地址DS=1000H第一个数指针SI=50H第二个数指针DI=58H结果指针BX=60H循环次数CX=4清除进位位CFAX取一个字CX=0?YN第十五页,共二十二页,2022年,8月28日START:MOVAX,1000HMOVDS,AX;DS=1000HMOVSI,50H;第一个数指针

MOVDI,58H;第二个数指针

MOVBX,60H;结果指针

MOVCX,4;循环次数CX=4CLC;清CFAA:MOVAX,[SI];取一个字到AXADCAX,[DI];AX<-AX+[DI]+CFMOV[BX],AX;存一个字到[BX]PUSHF

;保护进位位CFADDSI,2;修改第一个数的地址指针

ADDDI,2;修改第二个数的地址指针

ADDBX,2;修改结果指针

POPF

;恢复标志寄存器

LOOPAA;CX减1,若不为0,转AAHLT;CX为0,暂停为何要保护CF?第十六页,共二十二页,2022年,8月28日6.5子程序主程序IP继续执行主程序执行子程序转子程序入栈出栈返回主程序主程序IPIP(下)转子程序1返回主程序IP’执行子程序2转子程序2返回子程序1IP’(下)执行子程序1继续执行子程序1(a)主程序调子程序;(b)子程序嵌套示意图入栈出栈IP(下)继续执行主程序入栈出栈第十七页,共二十二页,2022年,8月28日6.5子程序

子程序调用与返回调用子程序用CALL指令,返回调用程序用RET指令。子程序调用实际是程序的转移,但是和转移指令有所不同。子程序调用指令CALL执行时要保护返回地址,而转移指令不考虑返回问题。每个子程序都由CALL指令负责将返回地址入栈,由RET指令负责把压入栈区的返回地址出栈,即送到IP或者CS:IP(段间返回),实现子程序返回。第十八页,共二十二页,2022年,8月28日6.5子程序

注意的问题:子程序保护与恢复。进入子程序后首先要保护主程序的标志位和使用的寄存器内容,退出子程序前要恢复保护的内容。一般在调用子程序后由子程序前部操作完成现场保护,再由子程序后部完成现场恢复。现场信息可以压入堆栈,或者传入不被占用的存储单元。参数传递。调用前要预先确定子程序中要使用哪些寄存器,并定义入口参数和出口参数。参数传递可利用寄存器、存储单元或堆栈。子程序说明。每个子程序应该有必要的使用注释。第十九页,共二十二页,2022年,8月28日6.5子程序例6.8:找出一个数据块中的最大数。其中,数据块的长度>1,并且放在内存(2001H)单元中,而数据块本身是从(2002H)单元开始存放的,最后,把找出的最大数放到(2000H)单元中。假设这段数据块中的数都是无符号的8位数。1.分析题目:此程序为循环程序,并且在处理部分应该包括判断分支的环节。2.寻找最大值的方法: 预先把00H放在AL累加器中,依次与数据块中的数据进行比较,若比AL中的大,则取而代之。3.程序流程图:图6-15。第二十页,共二十二页,2022年

温馨提示

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

评论

0/150

提交评论