微型机原理与程序设计第5讲程序设计程序设计(Programming)是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。1基本步骤(1)分析问题分析问题的目的就是为了对问题有一个确切理解,明确问题的环境限制,弄清已知条件、原始数据、输入信息、对运算精度的要求、处理速度的要求及最后应获得的结果。(2)建立数学模型在确切理解问题的基础上,总是可以用简洁而严明的数学方法对问题进行严格地或近似地描述,即建立一个数学模型,就把一个实际问题化成为一个计算机可以处理的问题。微型机原理与程序设计第5讲程序设计(3)设计算法算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。通俗一点说,解决问题的方法和步骤的具体化,我们称之为算法。数学模型建立后,确定在计算机上有哪些逻辑步骤及顺序去实现它。如果有几种解决方法,根据问题的要求,选择较优的算法,处理逻辑简单,速度快且容易获得满意结果的较优算法。(4)编制程序用计算机机器指令助记符号或语句实现算法的过程,就是编制程序,又称为编码。编制程序时,必须严格地按语言的语法规则书写。这样编写出来的程序称为源程序。汇编语言源程序经过汇编后变为机器语言程序,又称目标(目的)程序,最后经过连接成为可执行程序。1基本步骤微型机原理与程序设计第5讲程序设计(5)上机调试源程序编制完后,送入计算机进行汇编、连接和调试。汇编程序可以检查源程序中的语法错误,调试人员根据指出的语句错误性质,修改语法错误,直至无语法错误,再利用纠错程序调试。(6)编写程序文档许多程序是提供给别人使用的,如同正式的产品应当提供产品说明书一样,正式提供给用户使用的程序,必须向用户提供程序说明书。内容应包括:程序名称、程序功能、运行环境、程序的装入和启动、需要输入的数据,以及使用注意事项等。1基本步骤微型机原理与程序设计第5讲程序设计2简单计算实例利用计算机计算表达式2axbxc的值计算步骤微型机原理与程序设计第5讲程序设计微型机原理与程序设计第5讲程序设计微型机原理与程序设计第5讲程序设计微型机原理与程序设计第5讲程序设计3程序设计语言机器语言直接用二进制代码指令表达的计算机语言被称为机器语言机器语言是表示成数码形式的机器基本指令集是与特定的机器有关,功效高,但使用复杂、繁琐、费时、易出差错微型机原理与程序设计第5讲程序设计3程序设计语言汇编语言用助记符(Memoni)代替机器指令的操作码用地址符号(Symbol)或标号(Label)代替指令或操作数的地址汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。不同的机器就有不同的汇编语言微型机原理与程序设计第5讲程序设计3程序设计语言高级语言较接近自然语言和数学公式的编程语言一定程度上与具体机器无关,易学、易用、易维护、移植性好,重用率高Fortran、Pascal、Cobol、C、C++、Basic、Adam、Java、C#等微型机原理与程序设计第5讲程序设计4堆栈堆栈是一种按特定顺序进行存取的存储区,这种特定顺序可归结为“后进先出(LIFO)”或“先进后出(FILO)”寄存器堆栈微型机原理与程序设计第5讲程序设计存储器堆栈自底向上生成(向低地址方向生成)堆栈微型机原理与程序设计第5讲程序设计PUSH(pushwordontostack)进栈指令汇编格式:PUSHsrc操作:堆栈指示器减2SP←SP-2将给定的操作数存放到由SP指出的栈顶中。(SP+1,SP)←(src)受影响的状态标志位:没有说明:PUSH指令的目标地址一定在当前堆栈中。SS内容为段基址,偏移量由堆栈指针SP指出。操作数一定是16位的寄存器或存储器操作数。1微型机原理与程序设计第5讲程序设计假定AX=1234H,BX=5678H,SS=2000H,SP=0100H,则执行下列指令后堆栈的状态是:PUSHAXPUSHBX2000:00FBH2000:00FCH2000:00FDH2000:00FEH2000:00FFH2000:0100H←SP(1)起始状态2000:00FBH2000:00FCH2000:00FDH2000:00FEH←SP2000:00FFH2000:0100H(2)SP-2后2000:00FBH2000:00FCH2000:00FDH2000:00FEH34H←SP2000:00FFH12H2000:0100H(3)AX进堆后22000:00FBH2000:00FCH2000:00FDH2000:00FEH2000:00FFH2000:0100H←SP(1)起始状态2000:00FBH2000:00FCH2000:00FDH2000:00FEH←SP2000:00FFH2000:0100H(2)SP-2后2000:00FBH2000:00FCH2000:00FDH2000:00FEH34H←SP2000:00FFH12H2000:0100H(3)AX进堆后2000:00FBH2000:00FCH2000:00FDH2000:00FEH2000:00FFH2000:0100H←SP(1)起始状态2000:00FBH2000:00FCH2000:00FDH2000:00FEH←SP2000:00FFH2000:0100H(2)SP-2后微型机原理与程序设计第5讲程序设计PUSHAXPUSHBX2000:00FBH2000:00FCH←SP2000:00FDH2000:00FEH34H2000:00FFH12H2000:0100H(4)SP-2后2000:00FBH2000:00FCH78H←SP2000:00FDH56H2000:00FEH34H2000:00FFH12H2000:0100H(5)BX进堆之后3假定AX=1234H,BX=5678H,SS=2000H,SP=0100H,则执行下列指令后堆栈的状态是2000:00FBH2000:00FCH←SP2000:00FDH2000:00FEH34H2000:00FFH12H2000:0100H(4)SP-2后2000:00FBH2000:00FCH78H←SP2000:00FDH56H2000:00FEH34H2000:00FFH12H2000:0100H(5)BX进堆之后2000:00FBH2000:00FCH←SP2000:00FDH2000:00FEH34H2000:00FFH12H2000:0100H(4)SP-2后2000:00FBH2000:00FCH78H←SP2000:00FDH56H2000:00FEH34H2000:00FFH12H2000:0100H(5)BX进堆之后2000:00FBH2000:00FCH←SP2000:00FDH2000:00FEH34H2000:00FFH12H2000:0100H(4)SP-2后微型机原理与程序设计第5讲程序设计POP出栈指令汇编格式:POPdest操作:(1)将堆栈栈顶中存放的字传送到操作数中。dest←(SP+1,SP)(2)堆栈指针加2SP←SP+2受影响的状态标志位:没有说明:目标操作数只能是16位的存储器或寄存器操作数(CS除外)。1微型机原理与程序设计第5讲程序设计3.POP指令举例假定在执行指令:POPCXPOPDX之前,堆栈的状态如图所示。指令执行CX,DX的内容及堆栈的状态?2000:00FBH2000:00FCH78H←SP2000:00FDH56H2000:00FEH34H2000:00FFH12H2000:0100H(1)原始状态2000:00FBH2000:00FCH78H2000:00FDH56H2000:00FEH34H←SP2000:00FFH12H2000:0100H(2)POPCX执行后2000:00FBH2000:00FCH78H2000:00FDH56H2000:00FEH34H2000:00FFH12H2000:0100H←SP(3)POPDX执行后2微型机原理与程序设计第5讲程序设计33.POP指令举例假定SI=1234H,DI=5678H,则执行下列指令后DS,ES的内容是?2000:00FBH2000:00FCH78H←SP2000:00FDH56H2000:00FEH34H2000:00FFH12H2000:0100H(1)两条PUSH指令执行后2000:00FBH2000:00FCH78H2000:00FDH56H2000:00FEH34H←SP2000:00FFH12H2000:0100H(2)执行POPDS后2000:00FBH2000:00FCH78H2000:00FDH56H2000:00FEH34H2000:00FFH12H2000:0100H←SP(3)执行POPES后PUSHSIPUSHDIPOPDSPOPES