html5-img
1 / 21

第三章 程序设计技巧

第三章 程序设计技巧. 汇编语言的程序设计是使用计算机系统的指令或伪指令语句,组成求解不同问题,实现不同算法所需的完整序列的一个工作过程。汇编语言的程序设计方法一般包含顺序、分支、循环、子程序和宏等基本方法。. 进一步学习指令、伪指令的使用。 掌握汇编语言顺序、分支、循环程序的设计方法。 子程序的设计与调用。 宏结构的设计与调用。 中断程序的设计。 I/O 程序的设计。 模块程序的设计。. 3.1 顺序程序结构形式.

hope-gibbs
Download Presentation

第三章 程序设计技巧

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章 程序设计技巧 汇编语言的程序设计是使用计算机系统的指令或伪指令语句,组成求解不同问题,实现不同算法所需的完整序列的一个工作过程。汇编语言的程序设计方法一般包含顺序、分支、循环、子程序和宏等基本方法。

  2. 进一步学习指令、伪指令的使用。 • 掌握汇编语言顺序、分支、循环程序的设计方法。 • 子程序的设计与调用。 • 宏结构的设计与调用。 • 中断程序的设计。 • I/O程序的设计。 • 模块程序的设计。

  3. 3.1 顺序程序结构形式 • 顺序程序又称作简单程序。指无分支、无循环、无转移的程序。它一般是根据算法编出的完全顺序执行的程序。虽然实际应用的程序比它复杂的多,但它是构成程序的基础,它的质量直接影响整个程序的质量,为此如何充分利用硬件资源,合理地选择指令是编制简单程序,提高整个程序质量的关键。

  4. .MODEL SMALL .STACK 256 .DATA BCD_BUF DB 79H ASC_BUF DB 2 DUP (?) .CODE .STARTUP MOV AL,BCD_BUF MOV BL,AL MOV CL,4 SHR AL,CL ADD AL,30H MOV ASC_BUF,AL AND BL,0FH ADD BL,30H MOV ASC_BUF+1,BL .EXIT 0 END

  5. 3.2 分支程序 • 分支结构就是按照某种判断条件,从两个或两个以上的程序段中选择一个执行。分支结构具有两种形式:双分支结构和多分支结构

  6. 条件控制伪指令 • 条件控制伪指令的格式 .IF 条件表达式 .分支体1 [.ELSEIF条件表达式 .分支体2~N-1 .] [.ELSE . 分支体N .] .ENDIF

  7. .MODEL SMALL .STACK .DATA X DW -78 Y DW 7865 RESULT DW ? .CODE .STARTUP MOV AX,X SUB AX,Y JGE GREATERZERO ;AX≥Y ? ,跳转 NEG AX ;求补,得到副值 GREATERZERO: MOV RESULT,AX .EXIT 0 END

  8. .MODEL SMALL .STACK .DATA _A SBYTE 39 ;有符号方式定义 _B SBYTE -43H _C SBYTE 110 TAG DB ? .CODE .STARTUP MOV AL,_B IMUL AL MOV BX,AX ;BX←B2 MOV AL,_A IMUL _C MOV CL,2 SAL AX,CL ;AX←4AC .IF SWORD PTR BX>=AX MOV TAG,0 .ELSEIF MOV TAG,1 .ENDIF .EXIT 0 END

  9. 双分支程序设计 • 通常双分支程序是根据条件是否成立,从两个分支程序中选择其中一个分支程序去执行。双分支程序设计可用一条条件转移指令来实现,也可以用.IF-.ELSEIF-.ENDIFT条件控制伪指令来设计,这是分支程序设计的最基本方法。

  10. (1) 产生条件 在进行条件判断之前,必须要有先行指令产生条件。产生条件的指令为执行结果影响标志位的指令,如算术运算指令、位操作指令、串比较串扫描指令等,最常用的指令为CMP/TEST/AND/SCASB/CMPSB。 (2) 判断条件 判断条件用条件转移指令JZ/JNZ、JC/JNC等共计19条,我们应选择合适的条件转移指令之一完成。

  11. (3) 定向 按条件成立与否确定转移方向。 (4) 标号 对每个分支程序,一定要给出标号,以确定分支后的转移地址。 注意:根据条件成立与否,两个分支之程序段,只能现在选择其中之一执行。

  12. .MODEL SMALL .STACK .DATA X DB 56 Y DB 78 Z DB 99 F1 DB ? .CODE .STARTUP MOV AL,X MOV BL,AL ADD AL,Y JNC DO1 ;若无进位则转DO1 ADD BL,Z JMP QUIT DO1: SUB BL,Z MOV F1,BL QUIT: .EXIT 0 END

  13. 3.3 循环程序 • 循环程序一般包括以下五个部分: (1) 初始化部分:为循环做准备工作。如设置地址指针(BX/SI/DI/BP),计数器(CL/CH/CX)及数据寄存器(AL/AX/DX)的初值等。 (2) 循环工作部分:即循环体部分。它是循环程序的主体,用来完成循环的基本操作。

  14. (3) 修改部分:为循环参数做必要的修改,如地址指针(BX/SI/DI/BP),计数器(CL/CH/CX)的值,为下一次执行循环体做好准备。 (4) 循控部分:根据循环条件来判断、控制循环的继续或终止。 (5) 结束部分:主要是对循环的结果进行必要的处理,如将结果送入某一寄存器或内存区域。

  15. 循环控制指令及伪指令 • 循环控制指令LOOP/LOOPZ/LOOPE/LOOPNZ/LOOPNE/JCXZ 注意:在执行此类重复控制指令前必须把重复次数送入寄存器CX中 • 串操作指令 • 高级循环控制伪指令 • 其它循环控制指令 DEC和JZ/JNZ指令配合。 CMP和JZ/JNZ;JC/JNC;JO/JNO等指令配合。 AND/OR/XOR/TEST和JZ/JNZ;JC/JNC;JO/JNO等 指令配合。

  16. 循环程序设计方法 • 计数控制法。 这种程序设计方法直观,方便,但必须在循环次数已知的条件下才能采用。计数控制法有正计数控制法和倒计数控制法,在汇编语言程序设计中一般采用倒计数控制法来设计程序。

  17. 求1~100之间的累加和,放在sum字单元 .MODEL SMALL .STACK .DATA SUM DW ? .CODE .STARTUP XOR AX,AX MOV CX,100 NEXT: ADD AX,CX LOOP NEXT MOV SUM,AX .EXIT 0 END

  18. 条件控制型循环程序设计 • 在实际工作中,有时循环次数无法事先确定,但循环次数与问题中的某些条件有关,这时就应根据给定的条件满足与否来判断是否结束循环。

  19. 逻辑尺控制法 该方法用于特殊循环程序的设计,要处理的问题有两种,我们分别用“1”和“0”来表示,处理的次数用“1”或“0”的个数来表示。设计程序的关键就是把处理的问题转换为由“1”和“0”组成的二进制数串。

More Related