微机原理第四章微型计算机程序设计.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:26 大小:2.9MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

微机原理第四章微型计算机程序设计.ppt

微机原理第四章微型计算机程序设计.ppt

预览

免费试读已结束,剩余 16 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第6章微型计算机的程序设计6.1程序设计步骤特点:顺序执行每条指令,执行过程中不发生跳转。例6.1的程序:MOVAX,1000HMOVDS,AX;DS=1000HMOVSI,50H;被加数指针SI=50HMOVDI,52H;加数指针DI=52HMOVBX,54H;和的指针BX=54HCLC;清CFXORAX,AX;清AXMOVAX,[SI];取一个字到AXADCAX,[DI];AX←AX+[DI]+CFMOV[BX],AX;存一个字到[BX]HLT;暂停简化的程序:MOVAX,1000HMOVDS,AX;DS=1000HMOVAX,[50H];取被加数到AXADDAX,[52H];AX←被加数+加数MOV[54H],AX;存和数到[54H]HLT;暂停例题6.2:P139自学6.3分支程序6.3分支程序【例6.3】求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(2800H)单元中。例6.3的程序:MOVCX,AX;CX←AXSUBAX,BX;AX←AX-BXJCAA;CF=1转AA去执行(即AX<BX时转移)MOV[2800H],AX;结果送到2800H和2801H单元HLT;暂停AA:SUBBX,CX;BX←BX-CXMOV[2800H],BX;结果送到2800H和2801H单元HLT;暂停6.4循环程序6.4循环程序6.4循环程序6.4循环程序编制的程序START:MOVAX,1000HMOVDS,AX;DS=1000HMOVSI,50H;第一个数指针SI=50HMOVDI,58H;第二个数指针DI=58HMOVBX,60H;结果指针BX=60HMOVCX,4;循环次数CX=4CLC;清进位CF=0AA:MOVAX,[SI];取一个字到AXADCAX,[DI];AX←AX+[DI]+CFMOV[BX],AX;存一个字到[BX]PUSHF;保护进位CFADDSI,2;修改第一个数的地址指针SI←SI+2ADDDI,2;修改第二个数的地址指针DI←DI+2ADDBX,2;修改结果指针BX←BX+2POPF;恢复标志寄存器LOOPAA;CX←CX-1,若CX≠0转AAHLT;CX=0,暂停6.5子程序6.5子程序5.子程序调用和返回指令6.5子程序现场保护与恢复(2)参数传递:指主程序与子程序之间相关信息或数据的传递。参数传递方式有寄存器传递、用内存单元传递或用栈区传递。传递参数需要父程序与子程序默契配合,否则会产生错误结果。(3)子程序说明:由于子程序有共享性,可被其它程序调用,因此,每个子程序应有必要的使用注释,它包括:①子程序名;②功能、技术指标(如执行时间等);③占用寄存器和存储单元;④入口、出口参数;⑤嵌套哪些子程序。【例1】延时程序,在实际应用中一般作为子程序调用,现在我们把延时1s的程序设计成子程序。程序内容如下:(省略段的定义)DELAY1S:PUSHFPUSHBXPUSHCXMOVBX,3E8H;1000DLP2:MOVCX,176HLP1:PUSHF;无意义消耗时间POPF;无意义消耗时间LOOPLP1;延时1msDECBXJNZLP2;延时1sPOPCXPOPBXPOPFRET从上面的子程序我们可以看出:子程序中因为用到了BX,CX和标志寄存器,所以程序一开始就用了3条PUSH指令,把这些寄存器内容压进堆栈,以保护CPU的现场;而在返回前,它又用了3条POP指令(遵循“先入后出”的原则)把栈中内容弹回到寄存器中去。当然,这些保护现场和恢复现场的工作在主程序不怕丢失这些内容时,可以不用,或者放在主程序中解决,但一般来说,放在子程序中更妥当,也更通用些。【例6.8】找出一个数据块中的最大数。其中,数据块的长度>1,并且放在内存(2001H)单元中,而数据块本身是从(2002H)单元开始存放的,最后,把找出的最大值放到(2000H)单元中。假设这个数据块中的数都是无符号的8位数。(1)分析题目:已知数据块及其长度的存储地址、结果的存放地址、数据的类型,求数据块中的最大数。(2)确定算法:采用循环比较法。首先,我们用00值放在AL累加器中作为最大值;然后,用数据块的第1个数和AL中的数做比较,如果比00大,则用这个数取代00,放入AL中;接着取出第2个数与AL中的数做比较,如果比它大,取而代之,否则不取代,如此往复,直至最后一个数。这样,最后AL累加器中必定存放着最大的数。这就是寻找最大值的方法,而数据块的总长度(数的个数)就是循环次数。6.5子程序(4)编制的程序如下(未作为子程序时):MOVSI,2001H;指针指向放数据块长度的单元MOVCL,[S