资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,6.2,简单程序,这种程序的形式最简单,计算机执行程序的方式是“从头到尾”,逐条执行指令语句,直到程序结束,这是程序的最基本形式。,例,6.1,:用数据运算指令,对两个,16,位数相加运算。这两个数从地址,10050,开始连续存放,结果放在这两个数之后。,解:,(,1,)分析题目,(,2,)确定算法,(,3,)绘制流程图(,见图,6-2,),(,4,)内存空间分配(,见表,6-1,),(,5,)编制的程序如下:,MOV AX,,,1000H,MOV DS,,,AX,;,DS=1000H,MOV SI,,,50H,;,被加数指针,SI=50H,MOV DI,,,52H,;,加数指针,DI=52H,MOV BX,,,54H,;,和的指针,BX=54H,CLC,;清,CF,X0R AX,,,AX,;,MOV AX,,,SI,;,取一个字到,AX,ADC AX,,,DI,;,AXAX+DI+CF,MOV,BX,,,AX,;,存一个字到,BX,HLT,;,暂停,6.3,分支程序,分支程序是利用条件转移指令,使程序执行到某一指令后,根据条件(即上面运算的情况)是否满足,来改变程序执行的次序,这类程序使计算机有了判断作用。,分支程序执行完后可以立即结束,也可以转到公共点结束,见,图,6-4,所示。,分支程序可以再分支,各分支程序之间没有对应关系,,分支程序只要求在转移指令中给出目标地址,即可实现程序分支。,【,例,6.3】,求,AX,累加器和,BX,寄存器中两个无符号数之差的绝对值,结果放在内存(,2800,)单元中。,(,1,)分析题目:此题目中,,AX,累加器和,BX,寄存器中的数是不知道的。对两个不知大小的数相减并求绝对值,显然应该先解决哪一个值稍大些,然后再用大数减小数的方法,才可求得绝对值。,(,2,)根据指令系统中的比较指令,编出判断大小的环节,即可解决问题。图,6-5,为该例题的程序流程图。,(,3,)根据流程图编制程序如下:,CLC,;,清除,CF,CMP AX,,,BX,;,AX-BX,,,结果不返回,JC AA,;,CF=1,转,AA,去执行(即,AX1,,,并且放在内存(,2001,)单元中,而数据块本身是从,(,2002,),单元开始存放的,最后,把找出的最大值放到(,2000,)单元中。假设这段数据块中的数都是无符号的,8,位数。,(,1,)分析题目,:此题必定是个循环程序,而且在处理部分应包括判断分支环节。,(,2,),根据指令系统,我们可以采用,寻找最大值,的计算方法。,(,3,)绘制出此计算过程的程序流程如图,6-l5,所示。,(4),编制的程序如下,(,未作为子程序时,),:,MOV,SI,,,2001H,;,指针指向放数据块长度的单元,MOV,CL,,,SI,;,取出来作为循环次数,INC,SI,;,指针指向第一个数,MOV,AL,,,00,;,设置最大值,00,MOV,CH,,,00,;,初始化,LP,:,CLC,;,清除进位位,CMP,AL,,,SI,;,取出数与最大值比较,JC,BB,;,AL,中数小,转到取代处,JMP,AA,;,AL,中数大,跳过去,BB,:,MOV,AL,,,SI,;,把大数放到,AL,中保存,AA,:,INC,SI,;,指针下移,LOOP,LP,;,次数减,1,,判循环结束否,MOV,2000H,,,AL,;把最大值放到指定单元保存,HLT,
展开阅读全文