《计原及汇编》PPT课件.ppt
《《计原及汇编》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《计原及汇编》PPT课件.ppt(84页珍藏版)》请在三一办公上搜索。
1、一、程序设计步骤1、分析问题,确定算法。2、画出程序流程3、正确、合理使用存储器和寄存器。4、编写程序。5、调试程序。,第9章 分支程序设计,顺序程序结构,第9章 分支程序设计,Z=10*(X+Y),;设置数据段DATA SEGMENT X DW 20H;变量X Y DW 12H;变量Y Z DW?;变量ZDATA ENDS;设置堆栈段STACK1 SEGMENT PARA STACK DB 10H DUP(0)STACK1 ENDS;设置代码段CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AX,X ADD
2、AX,Y,SAL AX,1 MOV BX,AX MOV CL,2 SAL AX,CL ADD AX,BX MOV Y,AX MOV AH,4CH INT 21HCODE ENDS END START,二、分支程序设计,短转移:(RD1127或RD2-128)JMPSHORT TARGET,1、无条件转移:JMP 目标,(1)直接寻址方式,段内转移,JMP TARGET,COSEG1 SEGMENT COSEG2 SEGMENTTARGET:JMP FAR PTR TARGETCOSEG1 ENDS COSEG2 ENDS,段内转移:JMPCX JMPWORD PTR BX 或 JMPBX段间转
3、移:JMPDWORD PTR BX,1、无条件转移:JMP 目标,(2)间接寻址方式,段间转移,2、条件转移,JXX 目标,条件转移指令及其判断条件,条件转移指令及其判断条件,分支程序设计举例1、两分支程序设计方法2、多分支程序设计方法,(1)条件转移法(2)地址表法(3)跳转表,二、分支程序设计,程序如下:TESTDA1,01H JENEXT INC DA1NEXT:,试编制一程序段,把DA1字节单元中数据变为偶数。,两分支程序设计方法,试编制一程序,实现两个存储区之间的数据传送。,两分支程序设计方法,源程序如下:DATA SEGMENT ORG 20HSTRING1 DB 5 DUP(AS
4、SEMBLE LANGUAGE IS USEFUL)ORG$+20H ADDR1 DW STRING1+10H;源空间首地址 ADDR2 DW STRING1+2;目的空间首地址 COUNT DW 10H;待传送字节数DATA ENDSSTACK1 SEGMENT PARA STACK DB 30H DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV SI,ADDR1;将源空间的首地址存入SI寄存器中 MOV DI,ADDR2;将目的空间的首地址存入DI寄存器中 MOV CX,C
5、OUNT;将传送的字节数存入CX寄存器中 CMP SI,DI;将源空间与目的空间的首地址 JA FLAG2;如果源空间首地址大,从首地址开始传数,跳转相应程序 ADD SI,CX;如果目的空间首地址大,需从末地址开始,形成末地址 ADD DI,CX,FLAG1:MOV AL,SI-1;本段程序实现从首地址开始传数 MOV DI-1,AL DEC SI DEC DI DEC CX JNE FLAG1 JMP FLAG3FLAG2:MOV AL,SI;本段程序实现从末地址开始传数 MOV DI,AL INC SI INC DI DEC CX JNE FLAG2FLAG3:MOV AH,4CH IN
6、T 21H CODE ENDS END START,1、条件转移法,多分支程序设计方法,多分支程序设计方法,2、地址表法,入口地址=地址表首地址+(参数-1)2,实现程序如下:DATA SEGMENT NUM DB 4 ADDRTAB DW FLAG1,FLAG2,FLAG3,FLAG4,FLAG5 STRING1 DB HELLO WORLD!,0AH,0DH,$STRING2 DB I LOVE THIS GAME,0AH,0DH,$STRING3 DB COMPUTER SCIENCE,0AH,0DH,$STRING4 DB ASSEMBLE LANGUAGE,0AH,0DH,$STRI
7、NG5 DB COMPUTER ORGANIZATION,0AH,0DH,$DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AH,0 MOV AL,NUM,DEC AL SHL AL,1 MOV SI,AX MOV BX,ADDRESSTABSI;取转移的入口地址 JMP BX;跳转到对应的分支处理程序 FLAG1:MOV DX,OFFSET STRING1 JMP SHOW FLAG2
8、:MOV DX,OFFSET STRING2 JMP SHOW FLAG3:MOV DX,OFFSET STRING3 JMP SHOW FLAG4:MOV DX,OFFSET STRING4 JMP SHOW FLAG5:MOV DX,OFFSET STRING5 JMP SHOW SHOW:MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START,多分支程序设计方法,3、跳转表法,实现程序如下:DATA SEGMENT NUM DB 2 STRING1 DB HELLO WORLD!,0AH,0DH,$STRING2 DB I LO
9、VE THIS GAME,0AH,0DH,$STRING3 DB COMPUTER SCIENCE,0AH,0DH,$STRING4 DB ASSEMBLE LANGUAGE,0AH,0DH,$STRING5 DB COMPUTER ORGANIZATION,0AH,0DH,$DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AH,0 MOV AL,NUM,DEC AL MOV BL,AL
10、 SHL AL,1 ADD AL,BL ADD AX,OFFSET JUMP_TAB JMP AX JUMP_TAB:JMP FLAG1 JMP FLAG2 JMP FLAG3 JMP FLAG4 JMP FLAG5 FLAG1:MOV DX,OFFSET STRING1 JMP SHOW FLAG2:MOV DX,OFFSET STRING2 JMP SHOW,FLAG3:MOV DX,OFFSET STRING3 JMP SHOWFLAG4:MOV DX,OFFSET STRING4 JMP SHOWFLAG5:MOV DX,OFFSET STRING5 JMP SHOW SHOW:MOV
11、 AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START,第10章 循环程序设计,一、循环程序基本结构,循环程序结构,1、初始化部分设置地址指针、计数器初值2、工作部分3、修改部分4、控制部分用计数控制循环用条件控制循环5、结束处理部分,第10章 循环程序设计,二、循环控制方法,1、用计数控制循环使用计数器,达到计数器预定值,循环结束。要求循环次数已知。计数器可以递增、递减可以选用寄存器、也可用存储单元,第10章 循环程序设计,用正计数法,计算数组ARRAY所有单元的和,DATA SEGMENT ARRAY DB 1,2,3,4,5,6,7,
12、8,9,10 COUNT EQU$-ARRAY SUM DW?DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX XOR AX,AX;AX寄存器清0,累加用 MOV CX,0;计数器CX清0 MOV SI,0;数组指针清0,NEXT:ADD AL,ARRAYSI;数组累加 INC SI;数组指针后移 INC CX;计数器加1 CMP CX,COUNT;计数器值与循环次数比较 JL NEXT;如果小于
13、,继续循环 MOV BYTE PTR SUM,AL;将累计和存入变量 MOV AH,4CH INT 21H CODE ENDS END START,2、用条件控制循环找出一个终止循环的条件,每循环一次,对条件进行一次检测。满足终止循环的条件,退出循环,否则继续。通常选用条件转移指令来控制循环是否结束。,二、循环控制方法,第10章 循环程序设计,编写程序,求解兔子繁殖问题,给出到指定只兔子数时,需要多少个月。,实现程序如下:DATA SEGMENT RABBITNUM DW 650;存放兔子只数 MONTHNUM DB?;存放月数 DATA ENDS STACK1 SEGMENT PARA ST
14、ACK DW 20H DUP(?)STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX XOR CX,CX;计数器清0 MOV AX,0;斐波那契数初始值 MOV BX,1,NEXT:XCHG AX,BX ADD AX,BX;产生一个新的斐波那契数 INC CL;计数器加1 CMP AX,RABBITNUM;比较产生的新数与给定数 JAE RESULT;如果大于或等于,结束 JMP NEXT;小于,继续循环 RESULT:MOV MONTHNUM,CL MOV AH,4CH INT 21H COD
15、E ENDS END START,1、内循环必须完整地包含在外循环内,二者不可以相互交叉。2、当从外循环再次进入内循环时,内循环的初始条件要重新设置。3、一个外循环中可以包含多个内循环,这些内循环可以嵌套,也可以并列存在。4、当内外循环都采用CX寄存器作为计数器时,由外循环进入内循环时,要保留外循环的次数,可以通过压入堆栈、存入其它寄存器或存储器中实现。5、当外层循环要求内层循环在不同条件下重复执行时,外循环中应该包括对内循环部分参数的修改部分。,三、多重循环程序设计,第10章 循环程序设计,DATA SEGMENT MULTABLE DB 9*9 DUP(0)DATA ENDS STACK1
16、 SEGMENT PARA STACK DW 20H DUP(?)STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV BH,0;将行号初值存入BH XOR DI,DI;将乘法表的指针清0 MOV CX,9;外循环次数为9 OUTERLOP:PUSH CX;将外循环次数入栈保护 INC BH;行号加1 MOV BL,0;将列号初值存入BL MOV CX,9;内循环次数为9,INNERLOP:INC BL;列号加1 MOV AL,BH;将行号存入AL MUL BL;将行号*列号存入AL MO
17、V MULTABLEDI,AL;将AL存入乘法表中 INC DI;修改乘法表指针 LOOP INNERLOP;内循环控制语句 POP CX;恢复外循环次数 LOOP OUTERLOP;外循环控制语句 MOV AH,4CH INT 21H CODE ENDS END START,第11章 子程序设计,子程序的适应范围:(1)多次重复使用的程序段。如程序中多次出现的数值转换、码值转换等(2)具有特殊功能的程序段。如求解某一问题时,涉及到的复杂的数学计算,以及排序或查找等一些需要用到的算法问题。(3)具有通用性的程序段。如一些对文件的操作,字符串的操作等(4)中断服务程序。(5)系统调用程序。如DO
18、S调用,BIOS调用等。,重点,过程定义过程调用过程返回,程序结构,过程主调过程(主程序)被调过程(子程序),第11章 子程序设计,过程定义,过程名PROC类型语句语句过程名ENDP,NEARFAR,第11章 子程序设计,过程调用,CALL 过程名,返回地址入栈转移到(过程名所代表的)入口地址,段内,段间,CALL INPUTCALL BXCALL WORD PTR BX,CALL FAR PTR INPUTCALL OUTPUTCALL DWORD PTR BX,第11章 子程序设计,过程返回,RET,过程返回地址从栈中弹出到 IP(CS)中返回原来的调用点,段内,段间,返回指令,段内,段间
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计原及汇编 汇编 PPT 课件

链接地址:https://www.31ppt.com/p-5644875.html