汇编语言程序设计第5章循环和分支程序设计
- 格式:ppt
- 大小:169.50 KB
- 文档页数:29
一汇编语言程序设计基本步骤二程序的基本结构形式顺序结构的程序执行时按语句的书写顺序依次执行转移分支和循环因此对于有先后关系的语句程序设计时其先后次序是至关重要的顺序结构一般为简单程序顺序片段会在所有程序中存在1X和位无符号数16X Y值的程序分析1如何定义数据段X Y运算结果用双字空间存储2如何实现无符号数乘法1用加法指令实现无符号数乘法23解12CSEG SEGMENT1设位无符号数写一个求表达式16X Y值的程序实现无符号数乘法1设位无符号数写一个求表达式16X Y值的程序思考是有符号数1数据段的定义是否需要改变2对于这三种指令号数乘法的实现有何不同循环是一种重复循环通常由四部分组成1初始化部分234常有两种1Do-Until由循环指令实现2由转移指令实现说明(1) 由循环指令实现循环时ECX ZF标志这时计数值调整和条件测试在循环指令中完成例如使用LOOP LOOPZ/LOOPNZ 由转移指令实现循环时通常以条件转移指令为循环控制部入口以无条件转移指令为循环体结束件控制法循环可以嵌套明确循环控制部分和调整部分防止死循环特殊循环结构在循环体内条件判断出口能有多个出口循环控制部分控制循环何时结束1循环次数已知例LOOP2循环次数已知但可能提前结束例LOOPZ/LOOPNZ3循环次数不定据具体情况而定合理选择循环控制条件是循环程序设计的关键题意屏幕显示如下2把制的形式显示在屏幕上2把制的形式显示在屏幕上分析位十六进制数码因此BX位之后加上一个数一个十六进制数码对应字母的码值算法的基本思想ASCII A~F2把制的形式显示在屏幕上程序主体rotate: 完成什么功能;0-9ASCII 30H-39H作用 ;A-F ASCII 41H-46H作用3 53将正数数组的正确位置数据段部分3 5353535算法的基本思想ARRAY_HEAD-2-1K NN循环次数已知但可能提前结束代码段部分1数组中元素与插入值的比较指令在何处2控制循环结束的指令在哪里3边界条件如何体现功能3将正数数组的正确位置4试编制一程序从键盘输入一行字符要求第一个键入的字符必须是空格如不是则退出是则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中空格符不存入直到接收到第二个空格符时退出程序题意C空格是第一个字符是空格符是空格符代码段部分LEA BXMOV FLAG0NEXT MOV AH01HINT21HFLAG01HFOLLOWALEXITFLAG1 FOLLOWCMP ALEXIT[BX]EXIT 1判定第一个接收字符的指令语句在哪里2循环结束条件是什么循环结构思路采用冒泡排序算法使用双重循环内层循环每次比较相邻的两个数据次序不对则交换外层循环控制内层循环次数以及负责内层循环的初始化5将首地址为字的数组从大到小实现排序多重循环21循环可以嵌套多重循环的设计方法同单重循环但应分别考虑各重循环控制条件数据段部分代码段部分CX 内层循环计数器也CX 该程序如何解决它们冲突的循环结束条件是否可以更改作业P175。
汇编语言的程序设计方法(循环结构和分支结构)汇编语言中常见的形式有:顺序程序设计,分支程序设计,循环程序设计以及子程序设计今天通过实例来详细说明分支程序设计,和循环程序设计1.分支程序设计根据不同的条件做出不同的处理,把不同的方法编织成各自的处理程序段,运行时由机器根据不同的条件自动做出选择判断。
绕过某些指令,仅执行相应的处理程序段。
按这种方法处理成为分支结构。
分支程序是机器利用改变标志位的指令和转移指令来实现的。
分支程序设计实例给定以下符号函数:给定X值,假设为-25,且存放于X单元,函数值Y存放于Y于单元,根据给定的X值确定Y得值程序如下DATAX SEGMENTx DB-25y DB?DATAX ENDSCODEX SEGMENTMAIN PROC FARASSUME CS:CODEX, DS:DATAXSTART:PUSH DSMOV AX,0PUSH AXMOVAX,DATAXMOVDS,AXMOVAL,xCMPAL,0JGE LOOP1MOVAL,OFFHMOVy,ALRETLOOP1:JELOOP2MOVAL,1MOVY,ALRETLOOP2:MOVAL,0MOVy,ALRETMAIN ENDPCODEX ENDSENDSTART2.循环程序设计(1)计数控制循环(限于循环次数已知) 该方法简单直观易于程序设计(2)用条件控制循环无法确定循环次数的时候用该方法下面通过实例讲解DATASSEGMENTnDW?sumDW?DATASENDSCODES SEGMENTMAINPROCFARASSUMECS:CODES,DS:DATAS START:PUSHDSMOVAX,0PUSHAXMOVAX,DATASMOVDS,AXMOVAX,0MOVBX,0MOVCX,0LOOPT: INC BXADDAX,BXINCCXCMP AX.1000JBELOORTMOVn,CXMOVsum,AXRETMAIN ENDPCODESENDSENDSTART问渠哪得清如许?为有源头活水来!持续不断地输入,才会厚积薄发!有遗漏的地方大家指正。
总汇编语言循环分支程序设计简介总汇编语言是一种低级语言,用于编写计算机的机器指令。
循环和分支结构是编写程序时经常使用的控制结构。
本文将介绍总汇编语言中循环和分支结构的设计和实现,并给出一些示例代码来帮助读者更好地理解。
循环结构循环结构允许我们重复执行一段代码,直到满足特定条件为止。
在总汇编语言中,有两种常用的循环结构:计数器控制循环和条件控制循环。
计数器控制循环计数器控制循环中,我们使用一个计数器来确定循环执行的次数。
下面是一个示例代码片段,展示了如何使用计数器控制循环:MOV CX, 5 ; 设置循环次数为5L1:; 循环体代码; ...LOOP L1 ; 循环次数减1,如果不为0,则跳转到标签L1继续循环在上面的代码中,我们使用MOV指令将值5赋给CX寄存器,作为循环次数。
然后,我们使用LOOP指令在每次循环结束后将CX寄存器的值减1,并检查其是否为0。
如果不为0,则跳转到标签L1处,继续执行循环体代码。
条件控制循环条件控制循环中,我们使用一个条件来确定循环是否继续执行。
总汇编语言提供了多个指令来实现条件判断,例如CMP、JMP、JE等。
以下是一个示例代码片段,展示了如何使用条件控制循环:MOV CX, 10 ; 设置循环次数L1:; 循环体代码; ...DEC CX ; 循环次数减1CMP CX, 0 ; 比较循环次数与0JNE L1 ; 如果循环次数不为0,则跳转到标签L1继续循环在上面的代码中,我们使用MOV指令将值10赋给CX寄存器,作为循环次数。
然后,在每次循环结束后,我们使用DEC指令将CX寄存器的值减1,并使用CMP指令与0进行比较。
如果循环次数不为0,则使用JNE指令跳转到标签L1处,继续执行循环体代码。
分支结构分支结构允许我们在特定条件下选择不同的执行路径。
在总汇编语言中,我们可以使用条件判断指令(如CMP、JMP、JE等)来实现分支结构。
单一条件分支单一条件分支结构中,根据特定条件的真假选择不同的执行路径。