汇编语言分支与循环程序设计.ppt_第1页
汇编语言分支与循环程序设计.ppt_第2页
汇编语言分支与循环程序设计.ppt_第3页
汇编语言分支与循环程序设计.ppt_第4页
汇编语言分支与循环程序设计.ppt_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 基础知识第5章分支与循环程序设计 1)分析题意,确定算法。这一步是能否编制出高质量程序 的关键,因此不应该一拿到题目就急于写程序,而是应该 仔细地分析和理解题意,找出合理的算法及适当的数据结 构。 2)根据算法画出程序框图。这一点对初学者特别重要, 这样做可以减少出错的可能性。画框图时可以从粗到细把 算法逐步地具体化。 3)根据框图编写程序。 4)上机调试程序。任何程序必须经过调试才能检查出你 的设计思想是否正确以及你的程序是否符合你的设汁思想 。在调试程序的过程中应该善于利用机器提供的调试工具 (如DEBUG)来进行工作,你会发现它会给你提供很大 的帮助。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 分析问题 寻找解决问题的 思路、方法、算法 描述算法 编写程序实现算法 设计测试数据 和预期计算结果 上机调试程序 程序设计的解题基本步骤如下 : 顺序、分支、循环程序和子程 序的设计是汇编语言程序设计的基 本内容。 在此基础上还要掌握汇编语言 程序设计的基本方法和技巧 ,包 括递归子程序设计、COM和EXE 格式程序的结构和特点、多模块 程序设计方法等。 一、汇编语言程序设计的基本方法 概述 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 概述 二、程序的基本结构 1、顺序结构程序 2、分支结构程序 3、循环(重复)结构程序 顺序结构 分支结构 循环(重复)结构 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一节 顺序结构程序设计 顺序结构程序完全按 指令书写的前后顺序执行每一条 指令,是最基本、最常见的程序 结构 特点 顺序性、结构简单 ,只适应于简单问题的处理例1 计算 例2 移位 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 例例:X+Y+Z W:X+Y+Z W stack segment para stack dw 64h dup(?) stack ends data1 segment Xdw 5 Ydw 6 Zdw 7 Wdw ? data1 ends code segment assume cs:code, ss:stac k,ds:data1 start:mov ax,data1 mov ds,ax mov ax,X add ax,Y adc ax,Z mov W,ax mov ah,4ch int 21h code ends end start Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 例例:64:64位数据移位位数据移位data segment vardb 21h,43h,65h,87h,78h,56h,34h,12h data ends codesegment assume cs:code,ds:data start:mov ax,data mov ds,ax mov al, var6 mov var7,al mov al, var5 mov var6,al mov al, var4 mov var5,al mov al, var3 mov var4,al 图示 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. mov al, var2 mov var3,al mov al, var1 mov var2,al mov al, var0 mov var1,al mov byte ptr var0,0 mov ah,4ch int 21h codeends end start 12 34 56 78 87 65 43 21h 34 56 78 87 65 43 21 00h移位后 图示 例例:64:64位数据移位位数据移位 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 64位数据左移8位 12 34 56 78 87 65 43 21 00 var0 var1 var2 var3 var4 var5 var6 var7 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 程序结束的方法 程序执行完毕,正常结束要返回DOS,有两种方法 (1)使用PSP中的“INT 20H”指令,实现用户程序 结束,返回DOS 方法:将用户程序设置成一个远过程 程序开始时,执行如下指令 PUSH DS MOV AX,0 PUSH AX 用户程序结束时,用RET指令 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 程序结束的方法 (2)使用DOS功能调用的“INT 21H”指令,实现用 户程序结束,返回DOS 方法:在程序结束前,使用如下指令 MOV AH,4CH INT 21H 注意:一般情况下,使用第2种方法结束用户程序。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第二节:循环结构 结束 初始化 循环的初始状态 循环体 循环的工作部分 及修改部分 计数控制循环 条件控制循环 修改部分 控制条件 Y N Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 循环程序设计 根据条件重复执行一段指令就构成了循环程序结构 。 MOV AX,0 ;累加求和寄存器清0 MOV BX,OFFSET ARRAY ;数组始址送BX中 MOV CX,50 ;循环控制计数初始化 AGAIN : ADD AX,BX ADD BX,2 ;数组地址增2,BX指向下一个元素 DEC CX ;循环控制计数减1 JNZ AGAIN ;计数不为0时继续循环 MOV S,AX ;计数为0时循环结束,和存于S中 保证循环正常执行和结束的条件: 正确地初始化循环控制计数和初始条件 正确地检测循环条件 必须保证能达到循环结束条件 (例如在循环体内有修改循环 控制值的指令) 例 : 将ARRAY数组中的50个数求和,并将和存入字变量S中 。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 指令系统提供了专门用于循环结构的循环控制指令,更加 简便的地实现循环结构。 循环控制指令 循环控制指令的转移范围为:-128+127字节 (2)等于继续循环指令 格式:LOOPZ/LOOPE 标号 (3)不等于继续循环指令 格式:LOOPNZ/LOOPNE 标号 LOOP AGAIN (段内短转移 ) 格式:LOOP 标号 操作: 如图所示 (1)LOOP指令 (CX) 0? 执行循环体 (CX) (CX) -1 是 否 退出循环 (CX) 0 且 ZF =1 ?(CX) 0 且 ZF=0 ? 在前面的求和例子中,可用一条循环指令代替两条指令: DEC CX JNZ AGAIN Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. MOV CX,80 MOV SI,-1 MOV AL,$ AGAIN: INC SI CMP AL,STRSSI LOOPNE AGAIN MOV LEN,SI 循环程序设计方法 控制循环的方法可分为两类: 计数循环用于循环次数已知的情况 条件循环用于循环次数不确定的情况 设: STRS DB string$ 例: 求存放在STRS存储区中的字符串长度。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 例 统计AX中的二进制数含“1”的总个数,程序段如下: MOVCX,0 AGAIN: ANDAX,AX;(AX)=0? JZQUIT;是,退出循环 SALAX,1 ;否,(AX)的最高位移入CF位 JNCNEXT;CF1时,转向NEXT再次循环 INCCX ;CF=1,计数器(CX)(CX) +1 NEXT: JMPAGAIN;再次循环 QUIT : 上述程序为当型循环程序结构:先判断条件,后执行循环 。 当型循环与直到型循环: Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 循环程序设计方法 例 在ADDR单元中存放着数Y的地址,试编制 一程序把Y中1的个数存入COUNT单元中。 算法:要测出Y中1的个数就应逐位测试,一个比 较简单的办法是可根据最高有效位是否为1来记 数,然后用移位的方法把各位数逐次移到最高位 去。循环的结束可以用计数值为16来控制,但更 好的办法是结合上述方法可以用测试数是否为0 来作为结束条件,这样可以在很多情况下缩短程 序的执行时间。此外考虑到Y本身为0的可能性, 应该采用WHILEDO的结构形式。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 程序框图 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 程序 : data_seg segment Y equ 020FH number dw Y addr dw number count dw ? data_seg ends code_seg segment assume cs:code_seg , ds:data_seg main proc far start: mov ax ,data_seg mov ds ,ax mov cx ,0 mov bx ,addr mov ax ,bx repeat: test ax,0ffffh jz result jns shift inc cx shift: shl ax ,1 jmp repeat result: mov count , cx mov ax,4c00h Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 int 21h main endp code_seg ends end start 例 在附加段中有一个首地址为LIST和未经排序的字数组,在数组的第一个字 中存放着该数组的长度,数组的首地址已存放在DI寄存器中。AX寄存器中存放 着一个数。要求编制一程序:在数组中查找该数,如果找到此数则把它从数组中 删除。 算法: 这一程序应该首先查找数组中是否有(AX),如果没有则不对数组作任 何处理就结束程序。如果找到这一元素则应把数组中位于其前(指地址比该元 素高)的元素后移一个字(即向低地址方向移动),并修改数组长度值。如果找到 的元素正好位于数组末尾,则不必移动任何元素,只要修改数组长度值就可以 。这里第一部分的查找元素可以使用串处理指令,第二部分的删除元素则可使 用循环结构,由于查找结束时就可以知道该元素的位置,因此可以作为循环次 数已知的情况来设计。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 流程图: Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 程序 : data_seg segment LIST dw 10,0,11,22,33,44,55,66,77,88,99 data_seg ends code_seg segment assume cs:code_seg , es:data_seg main proc far start: mov ax , data_seg;代码段地址空间分配 mov es , ax cld;设置DF=0,地址自动递增操作 mov ax ,33 ;设置AX寄存器的数值 lea di , LIST Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 push di;将LIST的首地址压栈,为将来改变数组元素个数,就可以弹出该 ;地址 mov cx , es:di;数组个数放入CX中 add di , 2 repnz scasw;将AX与ES:DI中的元素进行比较,若相等则跳转到DELETE ;结束否则 je delete pop di jmp short exit delete: jcxz del_last;判断要删除的元素是否为最后的数组元素,是就跳转到 ;DEL_LAST执行 del_next: Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 mov bx , es:di;数组元素向前移动 mov es:di-2 , bx add di , 2 loop del_next del_last: pop di dec word ptr es:di;改变数组元素的大小 exit: mov ax , 4c00h int 21h main endp code_seg ends end start Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 例 试编制一程序;从键盘输入一行字符,要求第一个键入的字符必须是空格 符,如不是则退出程序;如是则开始接收留入的字符并顺序存放在首地址为 BUFFER的缓冲区中(空格符不存人),直到接收到第二个空格符时退出程 序。 算法:这一程序要求 接收的字符从空格符 开始又以空格符结束 ,因此程序中必须区 分所接收的字符是否 是第一个字符,为此 设立作为标志的存储 单元FLAG,一开始 将其置为0,接收第 一个字符后可将其置 1。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 data_seg segment buffer db 100 dup(?) flag db ? data_seg ends code_seg segment assume cs:code_seg , ds:data_seg main proc far start: mov ax ,data_seg mov ds ,ax lea bx ,buffer mov flag ,0 ;FLAG初始化为0,准备接收第一 个字符 next: mov ah ,01 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 int 21h ;从键盘输入一个字符,存放在AL寄存器中 test flag ,01h;判断是否为第一个字符 jz follow;不是第一个字符跳转到FOLLOW cmp al,20h;是第一个字符,判断该字符是否为空 格 jnz exit mov flag ,1 jmp next ;再输入字符 follow: cmp al ,20h;判断是否为空格 jz exit;是空格就退出 mov bx,al;不是将该字符的ASC码存入缓冲区内 inc bx jmp next Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 exit: mov ax , 4c00h int 21h main endp code_seg ends end start Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 (3)多重循环 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 例 有一个首地址为A的N字数组,请编制程序使该数组中的数按照从大到小的 次序排序。 算法 : 我们采用起泡排序算法从第一个数开始依次对相邻两个数进行比较,如 次序对则不做任何操作;如次序不对则使这两个数交换位置。下表表示了这种算 法的例子,可以看出在做了第一遍的(N一1)次比较后,最小的数已经放到了最 后,所以第二遍比较只需要考虑(N-1)个数,即只需要比较(N一2)次,第三遍则只 需要做(N一3)次比较总共最多(N1)遍比较就可以完成排序。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 loop1:mov dx , cx mov bx , 0 loop2:mov ax ,abx cmp ax,abx+2 jge continue xchg ax,abx+2 mov abx,ax continue: add bx ,2 loop loop2 mov cx ,dx loop loop1 程序 : data_seg segment num dw 10 a dw 12,14,9,10,3,81,10,4,88,66 data_seg ends code_seg segment assume cs:code_seg , ds:data_seg main proc far start: mov ax , data_seg mov ds , ax mov cx , num dec cx Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 第一章 基础知识 mov ax ,4c00h int 21h main endp code_seg ends end start Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 3 分支程序的结构形式 指令系统具有许多种 条件转移指令,这就说明计算 机系统具有很强的逻辑判断能 力,并且能够根据这种逻辑判 断选择执行不同的程序段。也 就是说,当条件满足时进行某 种处理,当条件不满足时又进 行另外一种处理。 分支程序的 结构可以有两种形式:双分支 结构和多分支结构。 流程图如下 所示。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. (1)双分支结构 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. (2)双分支结构 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. (3)多分支结构程序设计 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 3.2 分支结构程序设计 1简单的双分支程序设计 【例6.3】已知在内存中有一个 字节单元NUM,存有带符号数据,要求计 算出它的绝对值后,放入RESULT单元中。 题目分析:根据数学中 绝对值的概念知道,一个正数的绝对值是 它本身,而一个负数的绝对值是它的相反 数;要计算一个数的相反数,需要完成减 法运算,即用0减去这个数。指令系统中有 专门的求相反数的指令NEG。 流程图如下: Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 程序如下: DATA SEGMENT X DB -25 RESULT DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX ;初始化 MOV AL,X ;X取到AL中 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. TEST AL,80H ;测试AL正负 JZ NEXT ;为正,转NEXT NEG AL ;否则AL求补 NEXT:MOV RESULT,AL;送结果 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END START ;汇编结束 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 2多分支程序设计 多分支结构是有若 干个条件,每一个条件对应一个基本 操作。分支程序就是判断产生的条件 ,哪个条件成立,就执行哪个条件对 应操作的程序段。也就是说,从若干 分支中选择一个分支执行。 多分支结构实现的 方法有:条件选择法、转移表法和地 址表法。 条件选择法 一个条件选择指令 可实现两路分支,多个条件选择指令 就可以实现多路分支。这种方法适用 于分支数较少的情况。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 用条件转移指令实现程序分支 【例6.4】编写计算下 面函数值的程序: 1 X0 Y= 0 X=0 -1 X0 设输入数据为X 、输出数据Y,且皆为字节变量 。程序流程图如下图所示。 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. 程序如下: DATA SEGMENT X DB -25 Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX ;初始化 MOV AL,X ;X取到AL中 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. CMP AL,0 ;Al中 内容和0比较 JGE BIG ;大于 等于0,转BIG MOV BL,-1 ;否则 为负数,1送BL JMP EXIT ;转到 结束位置 BIG: JE EE ;Al中内容 是否为0,为0转EE MOV BL,1 ; 否则为大于0,1送BL JMP EXIT ;转到结束位置 EE: MOV BL,0 ;0送BL Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile .Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd.Copyright 2004-2011 Aspose Pty Ltd. EXIT: MOV Y,BL ;BL中内容送Y单元 MOV AH,4CH INT 21H ;程序结束 CODE ENDS END START ;汇编 结束 Evaluation only.Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论