收藏 分享(赏)

第三章 汇编语言程序设计2.ppt

上传人:hskm5268 文档编号:8834490 上传时间:2019-07-14 格式:PPT 页数:38 大小:364.50KB
下载 相关 举报
第三章 汇编语言程序设计2.ppt_第1页
第1页 / 共38页
第三章 汇编语言程序设计2.ppt_第2页
第2页 / 共38页
第三章 汇编语言程序设计2.ppt_第3页
第3页 / 共38页
第三章 汇编语言程序设计2.ppt_第4页
第4页 / 共38页
第三章 汇编语言程序设计2.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、第3章 汇编语言程序设计(续) 基本结构程序设计,主要程序结构顺序结构 分支结构 循环结构 子程序结构,3.5 基本结构程序设计,3.5.1 顺序结构程序设计,例 两个32位无符号数乘法程序。1)明确任务,确定算法。 2)绘流程图,设置地址指针,AX被乘数的低16位B,SI乘数的低16位D,部分积1=BD,部分积1存入缓冲区,AX被乘数的高16位A,部分积2=AD,部分积1的高16位部分积2的低16位,进位加至部分积2的高16位,结果存入缓冲区,部分积3=BC,与前面结果的对应16位相加,保存进位,部分积4=AC,恢复进位,部分积4与前面的和相加,保存结果到缓冲区,DI乘数的高16位C,1,1

2、,结束,开始,流程图,3)根据流程图编写汇编语言程序DATA SEGMENTMULNUN DW 0000,0FFFFH,0000,0FFFH,4 DUP(0)DATA ENDSSTACK SEGMENT PARA STACKSTACK DB 100 DUP(?)STACK ENDSCODE SEGMENTASSRME CS:CODE,DS:DATA,SS:STACK,ES:DATAMAIN PROC FARSTART: PUSH DSMOV AX, 0PUSH AXMOV AX, DATA,MOV DS, AXMOV ES, AXLEA BX, MULNUM ;设置地址指针MULU32: MO

3、V AX,BX; BMOV SI,BX+4; DMOV DI,BX+6; CMUL SI; B*DMOV BX+8,AXMOV BX+0AH,DXMOV AX,BX+2; A*DMUL SI;ADD AX,BX+0AHADC DX,0MOV BX+0AH,AXMOV BX+0CH,DXMOV AX,BX; B*CMUL DI;,ADD AX,BX+0AH ADC DX,BX+0CHMOV BX+0AH,AXMOV BX+0CH,DXPUSHF; A*CMOV AX,BX+2MUL DI POPFADC AX,BX+0CHADC DX, 0MOV BX+0CH,AXMOV BX+0EH,DXRE

4、TMAIN ENDPCODE ENDSEND START,3.5.2 分支结构,二分支结构形式,Y,Y,N,N,多分支结构形式,DATA SEGMENTX DW 12Y DW ? DATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP (?)STACK ENDSCODE SEGMENT PARA CODEASSUME CS:CODE,DS:DATA,SS:STACKSIGN PROC FARPUSH DS XOR AX,AXPUSH AXMOV AX,DATA ;装填DSMOV DS,AXMOV AX,XAND AX,AX ;建立标志JZ ZERO ;X0转Z

5、EROJNS PLUS ;X0转PLUSMOV BX,0FFFFH ;X0令BX1JMP DONE ZERO:MOV BX,0JMP DONE PLUS: MOV BX,1 DONE:MOV Y,BX ;存放结果RETSIGN ENDPCODE ENDSEND SIGN,3.5.3 循环结构,循环结构是程序设计中最常用的结构。凡需要重复做的工作,在计算机中都可以用循环结构程序来实现。,允许0次循环,不允许0次循环,WHILE型循环 (当条件成立进入循环),DO-UNTIL型循环 (直到条件成立退出循环),例: 100个字节数据从3000H:0100H送到3000H:0200H单元.,循环结构1

6、:mov ax, 3000hmov ds, axmov si, 0100hmov di, 0200hmov cx, 10011: mov al, simov di, aladd si , 1add di, 1loop 11,循环结构2mov ax, 3000hmov ds, axmov si, 0100hmov di, 0200hmov cx, 100inc cx 11: dec cxjz 12mov al, simov di, alinc siinc dijmp 11 12: mov AH,4CHint 21h,多重循环基本方法与单重循环相同,但要注意: 1、分别考虑各重循环的控制条件及其程

7、序实现,相互之间不能混淆 2、每次从外层循环再次进入内层循环时,初始条件要重新设置,例:延时100ms程序,MOV BL,10 DELAY: MOV CX,2801WAIT:LOOP WAIT ; 10mSDEC BLJNZ DELAY延时时间=2801T010,T0,例 :将首地址为BUF的字数组从小到大排序(气泡排序法) BUF dw 100,30,78,99,15,-1,66,54,189,256mov cx, 9 loop1: mov di, cxmov bx, 0 loop2: mov ax, BUFbxcmp ax, BUFbx+2jLe continuexchg ax, BUFb

8、x+2mov BUFbx, ax continue:add bx, 2 loop loop2mov cx, diloop loop1,3.5.4 子程序结构,若一段指令或在一个程序中多处使用,或在多个程序中用到,则通常在这段指令当做一个独立的模块出来,称为子程序(或过程)。子程序是模块化设计的重要手段,具有以下优点: (1) 简化程序设计过程,节省程序设计时间; (2)缩短了程序的长度,节省了存储空间; (3)增加了程序的可读性,便于对程序进行修改; (4)方便了程序的模块化、结构化和自顶向下的设计。,通用性:入口参数出口参数参数传递方法:1.用REG,少量参数 2.用程序M中的参数表传递 3

9、.用堆栈传递,(一) 用程序存储器中的参数表传递参数,在主程序中,将参数放在 CALL后面.例: 主程序 CALL ADDSUB NUM1 DD 12345678H ;被加数 NUM2 DD 5678H ;加数 BUFFER DD ? ;和 。;返回地址,NUM1,NUM2,BUFFER,+1,+2,+3,+5,+6,+7,+9,+10,+11,子程序: PUSH BP 若EA(NUM1)=IP0 MOV BP,SP MOV BX ,BP+2 MOV CX ,CS:BX MOV SI ,CS:BX+2 ADD BX ,12 ;IP0+12 MOV BP+2 ,BX;返回地址入栈 POP BP

10、RET,原SP,-3,-1,-2,-4,若传送某变量的地址:,主程序: CALL XXX NUM1 DW OFFSET VAL1,SEG VAL1 子程序:LDS SI,DWORD PTR CS:BX; DS:SI=VAL1 的物理地址,(2) 用堆栈传递参数堆栈传递适用于参数较多且子程序有嵌套、递归调用的情况。在主程序中把参数压入堆栈后调用子程序,子程序中从堆栈中取出。例:数组求和子程序。 已知数组A由100个字数据组成,数组B由50个字数据组成,要求用堆栈传送参数的子程序结构编程,试分别求出这两个数组元素之和。,DATA SEGMENT CNTA DW 100 ARYA DW 100 DU

11、P(?) SUMA DD ? CNTB DW 50 ARYB DW 50 DUP(?) SUMB DD ? DATA ENDS CSEG SEGMENTASSUME CS:CSEG,DS:DATA START: MOV AX,DATAMOV DS,AX,源程序如下:,MOV AX,OFFSET ARYAPUSH AXMOV AX,OFFSET CNTAPUSH AXMOV AX,OFFSET SUMAPUSH AXCALL NEAR PTR RADDMOV AX,OFFSET ARYBPUSH AXMOV AX,OFFSET CNTBPUSH AXMOV AX,OFFSET SUMBPUSH

12、AXCALL NEAR PTR PADDMOV AH,4CHINT 21H,RADD PROC NEARPUSH BP MOV BP,SPPUSH AXPUSH DXPUSH CXPUSH SIPUSH DI,调用前,当前,MOV SI,BP8;数组首地址送SIMOV DI,BP6MOV CX,DI;数组长度送CXMOV DI,BP4;存放和的地址送DIXOR AX,AXMOV DX,AX NEXT: ADD AX,SIJNC NOCAYINC DX NOCAY: ADD SI,2LOOP NEXTMOV DI,AXMOV DI2,DX,POP DIPOP SIPOP CXPOP DX POP

13、 AX POP BP RET 6 RADD ENDP CSEG ENDSEND START,图 用堆栈传送参数时堆栈内容的变化情况,2 子程序嵌套与递归调用子程序嵌套 子程序嵌套是指一个子程序的内部再调用其他子程序。,图 子程序嵌套,2、递归子程序递归子程序是这种具有递归调用性质的子程序。 递归子程序必须注意以下两点: 1)注意现场的保护。 2)注意递归结束条件。例: 求变量NUMB的阶乘,把结果存入变量NJ。,计算 n!STA ENDPDATA SEGMENTNUM DB 3NJ DW ?DATA ENDSSTACK SEGMENT STACK STACKDB 200 DUP (S)STAC

14、K ENDSCODE SEGMENT PARA CODEASSUME CS:CODE,DS:DATA,SS:STACKSTA PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AH,0MOV AL,NUMCALL FACTOR;入口和出口参数通过AX传递X1: MOV NJ,AXRET,;求阶乘子程序FACTOR PROC NEARPUSH AXSUB AX,1JNE FCONPOP AXJMP RETUN FCON: CALL FACTOR X2: POP CXMUL CL RETUN: RET FACTOR ENDPSTA ENDP CODE ENDSEND STA,图 递归调用过程的堆栈变化情况,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报