汇编语言程序设计-ppt课件.ppt

上传人(卖家):三亚风情 文档编号:2749797 上传时间:2022-05-23 格式:PPT 页数:86 大小:854.50KB
下载 相关 举报
汇编语言程序设计-ppt课件.ppt_第1页
第1页 / 共86页
汇编语言程序设计-ppt课件.ppt_第2页
第2页 / 共86页
汇编语言程序设计-ppt课件.ppt_第3页
第3页 / 共86页
汇编语言程序设计-ppt课件.ppt_第4页
第4页 / 共86页
汇编语言程序设计-ppt课件.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、第5章 汇编语言程序设计教学重点 本章介绍程序结构、伪指令、本章介绍程序结构、伪指令、DOS功能调用。功能调用。重点:汇编语言程序的基本结构;重点:汇编语言程序的基本结构; 伪指令及其使用方法;伪指令及其使用方法; DOS功能调用;功能调用; 基本的汇编语言程序设计方法。基本的汇编语言程序设计方法。难点:难点:DOS功能调用的应用功能调用的应用 汇编语言程序的设计汇编语言程序的设计精品资料 你怎么称呼老师? 如果老师最后没有总结一节课的重点的难点,你是否会认为老师的教学方法需要改进? 你所经历的课堂,是讲座式还是讨论式? 教师的教鞭 “不怕太阳晒,也不怕那风雨狂,只怕先生骂我笨,没有学问无颜见

2、爹娘 ” “太阳当空照,花儿对我笑,小鸟说早早早”5.1 汇编语言程序格式5.1.1 程序结构程序结构5.1.2 汇编语言语句格式汇编语言语句格式5.1.3 汇编语言数据表示汇编语言数据表示1、汇编语言的分段结构:、汇编语言的分段结构: 汇编语言源程序汇编语言源程序数据段(数据段(DATA)作用:存放程序运行所需要的数据和运行结果作用:存放程序运行所需要的数据和运行结果堆栈段(堆栈段(STACK)作用:执行数据的压栈和弹栈操作,以及程序中作用:执行数据的压栈和弹栈操作,以及程序中 的数据保护的数据保护代码段(代码段(CODE)作用:存放所编写的程序的代码作用:存放所编写的程序的代码5.1.1

3、程序结构用开始语句用开始语句“SEGMENT”和结束语句和结束语句“ENDS”来定义一个来定义一个段段2、语句类型、语句类型语句类型语句类型指令语句指令语句作用:产生相应的机器代码,指定作用:产生相应的机器代码,指定CPU做什么操作。做什么操作。伪指令语句伪指令语句作用:不产生相应的机器代码,仅控制汇编过程。作用:不产生相应的机器代码,仅控制汇编过程。宏指令语句宏指令语句作用:由编程者按照一定的规则来定义的一种较作用:由编程者按照一定的规则来定义的一种较“宏宏大大”的指令,包括多条指令或伪指令的指令,包括多条指令或伪指令 。5.1.1 程序结构例题1 DATA SEGMENT ;定义定义DAT

4、A段段 BUF1 DB 34H ;定义第一个数据定义第一个数据 BUF2 DB 2AH ;定义第二个数据定义第二个数据 SUM DB ? ;定义数据和单元定义数据和单元 DATA ENDS ;DATA结束结束 STACK SEGMENT PARA STACK STACK ;定义定义STACK段段 DW 200 DUP(0) STACK ENDS ; STACK段结束段结束 SEGMENT 数据段开始数据段开始ENDS数据段结束数据段结束数据段数据段堆栈段堆栈段例题1(续)CODE SEGMENT ;定义定义CODE段段 ASSUME CS:CODE,DS:DATA,SS: STACK ;段分配

5、段分配START:MOV AX,DATA MOV DS,AX ;填装数据段寄存器填装数据段寄存器DS MOV AL,BUF1 ;取第一个加数取第一个加数 ADD AL,BUF2 ;和第二个加数相加和第二个加数相加 MOV SUM,AL MOV AH,4CH INT 21H ;返回返回DOS状态状态CODE ENDS ;CODE段结束段结束 END START ;整个源程序结束整个源程序结束代码段代码段;example2.asm(文件名)(文件名)stacksegment stack;定义堆栈段定义堆栈段dw 512 dup(?) ;堆栈段有堆栈段有512字空间字空间stackends;堆栈段结

6、束堆栈段结束datasegment;定义数据段定义数据段stringdb Hello, Everybody !,0dh,0ah,$dataendscodesegment code;定义代码段定义代码段assume cs:code,ds:data,ss:stack例题2start:mov ax,data ; ;建立建立DSDS段地址段地址mov ds,ax mov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21h ; ;利用功能调用返回利用功能调用返回DOSDOScodeends ; ;代码段结束代码段结束end start ; ;汇编结束,同

7、时指明程序起始点汇编结束,同时指明程序起始点例题2(续)指令语句指令语句伪指令语句伪指令语句 定义符号、数据,分配内存单元,不产生机器代码 名字名字操作码操作码 操作数操作数 ;注释注释汇编时翻译成二进制机器代码标号标号:操作码操作码 操作数操作数, 操作数操作数;注释注释指令语句标号后有冒号“:”伪指令语句名字后没有冒号指令语句、伪指令语句指令语句、伪指令语句 5.1.2 汇编语言语句格式名字由字母开头。名字由字母开头。可由下列符号组成:可由下列符号组成: (1) 大小写英文字母大小写英文字母(AZ,az) (2) 数字数字(09) (3) 特殊符号特殊符号(?、(?、_等)等)命名规则命名

8、规则: (1) 数字不能作为名字的第一个符号。数字不能作为名字的第一个符号。 (2) 单独的问号(?)不能作为名字。单独的问号(?)不能作为名字。 (3) 最大有效长度为最大有效长度为31位。位。 (4) 汇编语言中有特定含义的保留字(如操作码、寄存器汇编语言中有特定含义的保留字(如操作码、寄存器名等),不能作为名字使用。名等),不能作为名字使用。 (5)见名知义。如用见名知义。如用BUFFER表示缓冲区、表示缓冲区、SUM表示累加表示累加和等。和等。5.1.2 汇编语言语句格式标号的三种属性标号的三种属性段属性段属性偏移属性偏移属性 类型属性类型属性定义变量的段起始地址。定义变量的段起始地址

9、。标号偏移地址,从段起始地址到定义标号的标号偏移地址,从段起始地址到定义标号的位置之间字节数。位置之间字节数。指出该标号是在本段内引用还是在其他段中指出该标号是在本段内引用还是在其他段中引用。段内引用属性为引用。段内引用属性为NEAR;段间引用属;段间引用属性为性为FAR。标号在代码段中定义。标号在代码段中定义。5.1.2 汇编语言语句格式操作数操作数:用来指定参与操作的数据。多于一个,之间用逗号分开。可以是常数或表达式。操作码操作码与与操作数操作数例:例:MOV AX , BX5.1.2 汇编语言语句格式操作码:指明操作的性质和功能,指令中的助记符都是操作码无操作数:一个操作数:两个操作数:

10、伪指令、宏指令可有多个操作数:5.1.2 汇编语言数据表示常量常量数值常量数值常量字符串常量字符串常量 符号常数符号常数 后缀:二进制后缀:二进制B、八进制、八进制O或或Q、十进制十进制D、十六进制、十六进制H。十进制数可省掉后缀十进制数可省掉后缀十六进制数以十六进制数以AF开头时,前面开头时,前面须加数字须加数字0字符串在计算机中以字符串在计算机中以ASCII码存储。码存储。如如A的存储值是的存储值是41H,AB的的存储值是存储值是41、42H等。等。用用EQU或或 “=” 定义的符号常量。定义的符号常量。如用如用COUNT EQU 3或或COUNT=3定义后定义后 ,COUNT是一个符号常

11、数,是一个符号常数,与数值与数值3等价。等价。变量变量段属性段属性 偏移属性偏移属性 类型属性类型属性定义变量的段起始地址定义变量的段起始地址变量所在段的段内偏移地址变量所在段的段内偏移地址变量类型定义变量所占的字节数。变量类型定义变量所占的字节数。 如如:BYTE(DB,1字节字节)、WORD(DW,2字节)、字节)、 DWORD(DD,4字节)、字节)、QWORD(DQ,8字节)、字节)、TBYTE(DT,10字节)。字节)。5.1.2 汇编语言数据表示运算符及表达式运算符及表达式算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符分析运算符分析运算符 +、*、/、MOD 与数学运

12、算符的意义相同。与数学运算符的意义相同。 取模是取余数。取模是取余数。 例例:82 MOD 16 ;结果为结果为2 20H MOD 7 ;结果为结果为4 AND、OR、NOT、XOR 运算结果是一个常数运算结果是一个常数.EQ、NE、LT、GT、LE、GE 两个表达式比较时,两个表达式比较时,表达式表示表达式表示方法方法/性质性质要相同要相同关系成立,结果为全关系成立,结果为全1;不成立;不成立时,为全时,为全0例如:指令例如:指令MOV BX,32EQ45等价于等价于MOV BX,0;综合运算符综合运算符SEG、OFFSET、LENGTH、SIZE、TYPE 把存储单元地址分解为段地址和把存

13、储单元地址分解为段地址和偏移地址偏移地址 THIS、PTR 规定存储单元的性质规定存储单元的性质5.1.2 汇编语言数据表示常用伪指令等值伪指令等值伪指令等号伪指令等号伪指令 解除定义伪指令解除定义伪指令定义变量伪指令定义变量伪指令定位伪指令定位伪指令5.2 常用伪指令 格式格式符号名符号名 EQU 表达式表达式功能功能 给符号名定义一个值、别给符号名定义一个值、别的符号名、表达式或助记符。的符号名、表达式或助记符。注注 不能给一个符号重复定义不能给一个符号重复定义与与EQU类似,但在同一个程序中,类似,但在同一个程序中,=可以对一个符号重新定义。可以对一个符号重新定义。格式格式 PURGE符

14、号符号1,2N功能功能 解除指定符号的定义,解解除指定符号的定义,解除后,可用除后,可用EQU重新定义。重新定义。例例 Y1 EQU 7;Y1的值为的值为7 PURGE Y1;解除;解除Y1的定义的定义DB 字节变量,以字节为单位字节变量,以字节为单位分配存储单元。分配存储单元。DW 字变量,以字为单位分配字变量,以字为单位分配存储单元。存储单元。DD 定义双字,以定义双字,以4字节为单位字节为单位分配存储单元。分配存储单元。DQ 定义定义4字变量,以字变量,以8字节为字节为单位分配存储单元。单位分配存储单元。DT 定义定义5字字 变量,以变量,以10字节字节为单位分配存储单元为单位分配存储单

15、元 设置当前地址计数器的值设置当前地址计数器的值例例 DATA SEGMENT ORG 10H BUFF1 DW 2000H ORG 20H BUFF2 DW 4000H DATA ENDS 执行后执行后BUFF1的偏移地址值为的偏移地址值为10H,BUFF2的为的为20H。段定义伪指令段定义伪指令 段分配伪指令段分配伪指令ASSUME 说明段寄存器和段名之间的对应关系说明段寄存器和段名之间的对应关系例例 ASSUME CS:CODE,DS:DATA段定义伪指令格式:段定义伪指令格式: 段名段名 SEGMENT定位类型定位类型组合方式组合方式类别名类别名 ;指令句或伪指令句;指令句或伪指令句

16、段名段名 ENDS5.2 常用伪指令 成对使用,指定段的名称、范围和段的定成对使用,指定段的名称、范围和段的定位类型、组合类型和分类名。位类型、组合类型和分类名。成对出现,前后必须相同成对出现,前后必须相同在同一模块中,不同段的段名不能相同在同一模块中,不同段的段名不能相同作用作用 规定段的起始地址规定段的起始地址四种类型的起始位置分别为(四种类型的起始位置分别为(X表示可为表示可为0或或1):):(A) BYTE XXXX XXXX XXXX XXXX XXXXB(B) WORD XXXX XXXX XXXX XXXX XXX0B(C) PARA XXXX XXXX XXXX XXXX 00

17、00B(D) PAGE XXXX XXXX XXXX 0000 0000B 以上分别表示以以上分别表示以字节、字、节、页字节、字、节、页的边界为的边界为起始地址。如果缺省定位方式,则以节的边起始地址。如果缺省定位方式,则以节的边界为起始地址。界为起始地址。作用作用 指示连接程序,把同名的段按照指定指示连接程序,把同名的段按照指定的方式组合起来形成一个新的段。的方式组合起来形成一个新的段。组合方式组合方式 NONE、PUBLIC、STACK、 COMMON、MEMORY 、AT典型格式典型格式 :STACK SEGMENT PARA STACK STACK 类别名必须用类别名必须用单引号单引号括

18、起来括起来连接程序把类别名相同的段放在连续的存储区连接程序把类别名相同的段放在连续的存储区域,先出现的段在前,后出现的在后,但对域,先出现的段在前,后出现的在后,但对各段不能重新组合各段不能重新组合5.3 汇编程序的编写 5.3.1 段寄存器的填装段寄存器的填装 5.3.2汇编语言程序的编写过程汇编语言程序的编写过程 1、DS、ES内容的填装内容的填装例:例:CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX (DATA、STACK设置已省略。)设置已省略。)5.

19、3.1 段寄存器的填装用用MOV指令填装段寄存指令填装段寄存器器DS、ES的值的值 CODE SEGMENT DATA ENDS STACK1 SEGMENT PARA STACK STACK DW 200DUP(0) TOP LABEL WORD STACK1 ENDS START: MOV AX,STACK1 MOV SS,AX MOV SP,OFFSET TOP 5.3.1 段寄存器的填装设置定位类型:设置定位类型:PARA 组合类型:组合类型:STACKSS SP 的内容自动填的内容自动填充充指令填装指令填装SP指令填装指令填装SS类似于类似于DS、ES的填装的填装2、SS段寄存器的填

20、装段寄存器的填装 5.3.2汇编语言程序的编写过程 1)用文本编辑器建立扩展名为)用文本编辑器建立扩展名为.ASM源文件。源文件。 2)用)用MASM程序吧扩展名为程序吧扩展名为.ASM的文件汇编的文件汇编成扩展名为成扩展名为.OBJ的文件。的文件。 3)用)用LINX程序把扩展名为程序把扩展名为.OBJ的文件连接成的文件连接成扩展名为扩展名为.EXE的文件。的文件。 4)在)在DOS方式下直接键入文件名就可执行该方式下直接键入文件名就可执行该程序。程序。编编辑辑程程序序DELINKTC编辑器编辑器WINDOWS文本编辑器文本编辑器EDIT 汇编语言源程序的操作流程图汇编语言源程序的操作流程图

21、源程序文件源程序文件EXMP.ASMASMMASMTASM汇汇编编程程序序出错出错文件文件EXMP.OBJ(EXMP.LST)(EXMP.CRF)LINK连连接接程程序序出错出错文件文件EXMP.EXE(EXMP.MAP)(EXMP.LIB)DEBUG出错出错5.3.2汇编语言程序的编写过程连接的是连接的是.OBJ文件文件 执行的是执行的是.exe文件文件DOS系统中设置了两层内部子程序可供用户使用系统中设置了两层内部子程序可供用户使用:基本输入输出模块基本输入输出模块BIOSDOS层功能模块层功能模块 5.4 DOS功能调用INT 10HINT 13HINT 14HINT 16HINT 17

22、H5.4 DOS功能调用5.4 DOS功能调用为了使用方便,将为了使用方便,将DOS层功能模块所提供的层功能模块所提供的100个个子程序从子程序从00H63H统一顺序编号,调用方法如下:统一顺序编号,调用方法如下:1. 设置入口参数设置入口参数2. 将子程序编号送入将子程序编号送入AH寄存器寄存器3. 执行中断指令执行中断指令 INT 21H5.4 DOS功能调用5.4 DOS功能调用5.4 DOS功能调用A BOY$说明:说明:AH=09HAH=09H为显示字符串功能。为显示字符串功能。例如,显示例如,显示STRINGSTRING中字符串:中字符串:STRING DB A BOYSTRING

23、 DB A BOY, $;MOV DXMOV DX,OFFSET STRINGOFFSET STRING;取;取STRINGSTRING的偏移地址的偏移地址MOV AHMOV AH,09H09H; INT 21HINT 21H; DSDS:DX DX 输出缓冲区输出缓冲区 结束字符结束字符5.4 DOS功能调用AH=0AH为从键盘输入字符串。为从键盘输入字符串。 入口参数:入口参数:DS:DX=输入缓冲区地址,输入缓冲区地址, DS:DX为输入缓冲区的总长;为输入缓冲区的总长; 出口参数:出口参数:DS:DX+1为输入字符串的实长(字符个数)为输入字符串的实长(字符个数)DS:DX+0 输入缓

24、冲区输入缓冲区 +1 +2 输入字符输入字符 说明:说明:最大的实长最大的实长=总长总长-1总长实长5.4 DOS功能调用5.4 DOS功能调用5.4 DOS功能调用5.4 DOS功能调用5.4 DOS功能调用主程序BL03HSIBUFF1偏输入密码(SUB1)比较密码(SUB2)密码对?BL-10?显示“NO!”显示“OK!”显示“Wrong,Again!”ENDLOPYYNNDONEAGAIN5.4 DOS功能调用SUB1DIBUFF2偏偏CX08H输入字符输入字符存字符存字符是否回车?是否回车?DIDI+1显示显示*号号CX-10?RET子程序子程序1LOP1YNYDONE1N5.4 D

25、OS功能调用SUB2DIBUFF2偏偏CX取密位取密位比较比较1个字符个字符DIDI+1是否不相同?是否不相同?SISI+1AL00HCX-10?RET子程序子程序2LOP2YNYDONE2NAL0FFH5.4 DOS功能调用5.5.0 汇编语言设计基础知识5.5.1 顺序结构程序设计5.5.2 分支结构程序设计5.5.3 循环结构程序设计5.5.4 子程序结构形式与操作 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试 当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要

26、得到的结果,程序应该完成何种的功能。汇编语言设计的一般步骤 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试 根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同的计算方法进行比较,选择最适宜的算法。 汇编语言设计的一般步骤 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来的图形。汇编语言设计的

27、一般步骤 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试 经过上述各步骤后,解决问题的思路已经非常清楚,所以接下来就可以按流程图的顺序对每一个功能框选用合适的指令编写出汇编语言程序。 汇编语言设计的一般步骤 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试在应用程序的设计中,几乎没有一个程序只经过一次编写就完全成功的,所以必须经过上机调试。 汇编语言设计的一般步骤1 1流程图的概念流程图的概

28、念v流程图是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。2 2流程图符号表示流程图符号表示(1 1)开始框:表示程序的开始。)开始框:表示程序的开始。开始流程图的画法规定条件NY结束(3 3)判断框)判断框 (2 2)处理框(执行框)处理框(执行框) (4 4)结束框)结束框v结构程序设计程序的每个部分都由有限结构结合中的单元组成,并且只有单一的入口和单一的出口。基本结构有:顺序结构(线性结构) 选择结构(分支结构) 循环结构 三种结构可以任意组合和嵌套构成复杂的程序。程序的基本结构这三种结构可归纳为五种逻

29、辑结构:(1)顺序结构(2)双分支结构(3)多分支结构YN条件条件程序的基本结构YN(4)DO_UNTIL循环结构NY(5)DO_WHILE循环结构程序的逻辑结构格式程序的基本结构顺序程序:一种无分支的程序顺序程序:一种无分支的程序, CPU从第一条指令开始从第一条指令开始依次依次执行执行每一条指令每一条指令,直到最后一条指令。直到最后一条指令。特点特点:指令顺序执行,无分支、无循环、无转移。:指令顺序执行,无分支、无循环、无转移。程序的基本结构例题例题开始设置数据段和堆栈段地址设置堆栈指针取数据截取高四位右移四位 例:例:设内存DATA单元存放一个无符号字节数据,编制程序将其拆成两位十六进制

30、数, 并存入HEX和HEX+1单元的低4位,HEX存放高位十六进制数, HEX+1单元存放低位十六进制数 解解 : 分析命题分析命题确定算法确定算法画流程图画流程图拆字程序取原数据结束保留高位十六进制数截取低四位保存地位十六进制数保存结果 MOV SS,AX MOV SP,LENGTH STK MOV AL,DATA MOV AH,AL AND AL,0F0H MOV CL,04 SHR AL,CL MOV HEX,AL AND AH,0FH MOV HEX+1,AH MOV AX,4C00H INT 21HCSEG ENDS END DISC 例:例:设内存DATA单元存放一个无符号字节数据

31、,编制程序将其拆成两位十六进制数, 并存入HEX和HEX+1单元的低4位,HEX存放高位十六进制数, HEX+1单元存放低位十六进制数 解解 : 分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试拆字程序 SSEG SEGMENT STACKSTKDB 20 DUP(0)SSEG ENDSDSEG SEGMENTDATA DB0B5HHEXDB0,0DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGASSUME SS:SSEGDISC: MOV AX,DSEGMOV DS,AX MOV AX,SSEG条件转移条件转移JCC和和无

32、条件转移无条件转移JMP指令用于实现程序的分支结构。指令用于实现程序的分支结构。分支程序设计分支程序设计单分支单分支if-then双分支双分支if-then-else判定:判定:程序的逻辑根据某一条条件表达式程序的逻辑根据某一条条件表达式为真或假时,执行两个不同处理之一为真或假时,执行两个不同处理之一时,便是双分支结构形式时,便是双分支结构形式判定:判定:有其中一个处理为空时,就是单有其中一个处理为空时,就是单分支形式;如果分支处理中又嵌套分支形式;如果分支处理中又嵌套有分支,或者说具有多个分支走向有分支,或者说具有多个分支走向时,即为逻辑上的时,即为逻辑上的多分支多分支形式。形式。5.52分

33、支程序设计例:例:写一个实现把一位十六进制数转化为对应ASCII码的程序。 分析命题分析命题确定算法确定算法十六进制数码与对应的关系:十六进制数码与对应的关系:0123 BCDEF30H 31H 32H 33H42H 43H 44H 45H 46H这种对应关系可表示为一个分段函数:这种对应关系可表示为一个分段函数:YX+30H(0=X=9)X+37H(0A=X=0FH)5.52分支程序设计分析命题分析命题确定算法确定算法画流程图画流程图开始取十六进制数X+30H0=X=9YN0A=X=0FHX+37H结束YN5.52分支程序设计例:例:写一个实现把一位十六进制数转化为对应ASCII码的程序。

34、分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试 JMP LAB2 LAB1: ADD AL,37H LAB2: MOV ASCII,AL MOV AH,4CH INT 21H CODE ENDS END START DATASEGMENT XX DB 4 ASCII DB ? DATA ENDS DATADB0B5H CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,0FH CMP AL,9 JA LAB1 ADD AL,30H5.52分支程序设计例:例:写一个实现把一

35、位十六进制数转化为对应ASCII码的程序。 DO WHILE 结构图结构图循环初始状态循环初始状态循环控制条件循环控制条件循环体循环体NY5.5.3 循环程序设计DO UNTIL 结构图结构图循环初始状态循环初始状态循环体循环体循环控制条件循环控制条件YNDO WHILE结构结构把对循环控制条件的判把对循环控制条件的判断放在循环的入口,先断放在循环的入口,先判断条件,满足条件就判断条件,满足条件就执行循环体,否则就退执行循环体,否则就退出循环出循环DO UNTIL结构结构先执行一次循环体,然先执行一次循环体,然后再判断控制条件,后再判断控制条件,不满足条件则继续执不满足条件则继续执行循环操作,

36、一旦满行循环操作,一旦满足条件则退出循环足条件则退出循环5.5.3 循环程序设计注意:注意:循环次数等于循环次数等于0,选择,选择DO WHILE结构,否则使用结构,否则使用DO UNTIL结构。结构。循环程序都可由如下四部分组成:循环程序都可由如下四部分组成:(1)循环初始化部分循环初始化部分(2)循环体循环体(3)循环修改循环修改(4)循环控制循环控制最常见的循环结束有:最常见的循环结束有: 用计数器控制循环;用计数器控制循环; 按问题的条件控制循环;按问题的条件控制循环; 用开关量控制循环;用开关量控制循环;2. 循环程序设计实现循环程序设计实现(1)单重循环程序设计单重循环程序设计例例

37、5-8 设计程序,完成从设计程序,完成从1累加到累加到50(即即1+2+.+49+50),结果保存在数据段结果保存在数据段SUM单元。单元。5.5.3 循环程序设计DATA SEGMENT SUM DW ?DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,0;工作寄存器清零工作寄存器清零MOV CX,50;计数器赋初值计数器赋初值 MOVBX,0LP:INCBX;循环体入口循环体入口ADDAX,BXDECCX;循环计数器修改循环计数器修改JNZLP ;循环控制循环控制MOVAH,4CHINT21HCOD

38、E ENDSENDSTART5.5.3 循环程序设计例例5-9 分类统计字数组分类统计字数组ARRAY中正数、负数和零的个数,并中正数、负数和零的个数,并分别存入内存字变量分别存入内存字变量BUF1、BUF2和和BUF3中,数组元素个中,数组元素个数保存在数组的第一个字中。数保存在数组的第一个字中。 DATA SEGMENT ARRAYDW 10 ;数据元素个数数据元素个数 DW 230, -1437, 26, -31, 0, 3458, 0, 10,-1,2350 POSTDW 0 NEGADW 0 ZERODW 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE

39、, DS:DATA5.5.3 循环程序设计START: MOVAX, DATAMOV DS, AXMOV AX, 0;用用AX作为正数的计数器作为正数的计数器 MOV BX, 0;用用BX作为负数的计数器作为负数的计数器 MOV DX, 0;用用DX作为零的计数器作为零的计数器MOV DI,OFFSET ARRAY MOV CX, DI ;用用CX来进行循环计数来进行循环计数 ADD DI, 2;用指针用指针DI来访问整个数组来访问整个数组AGAIN: CMPWORD PTRDI, 0 ;与与0做比较做比较 JG HIGH;大于大于0,为正数,为正数 JE EQUAL ;等于等于0 INC B

40、X ;小于小于0,为负数,负数个数增,为负数,负数个数增1 JMPNEXT5.5.3 循环程序设计HIGH: INC AX ;正数个数增正数个数增1JMP NEXTEQUAL: INC DX ;0的个数增的个数增1NEXT: INC DI INCDI LOOP AGAIN ;未完循环未完循环DONE: MOVBUF1, AX ;把统计数保存到内存单元中把统计数保存到内存单元中 MOV BUF2, BX MOV BUF3, DX MOV AH, 4CH;结束程序返回结束程序返回DOS INT 21HCODE ENDSEND START5.5.3 循环程序设计例例5-10 假设在以假设在以BUF为

41、首址的存储单元中存放着一串字符,为首址的存储单元中存放着一串字符,找出其中找出其中ASCII码值最大的字符,并存入码值最大的字符,并存入MAX单元中。单元中。 程序存储单元与寄存器分配:程序存储单元与寄存器分配: CX:循环次数控制变量,初值为字符串的长度:循环次数控制变量,初值为字符串的长度1,每,每次减次减1。 BX:BUF存储区地址指针,初值指向存储区地址指针,初值指向BUF,每次加,每次加1。 AL:用来求最大值的工作单元,保持某个时刻的最大值。:用来求最大值的工作单元,保持某个时刻的最大值。 MAX:用来保存最终结果的字节单元。:用来保存最终结果的字节单元。5.5.3 循环程序设计图

42、5.8 求最大字符的程序流程图5.5.3 循环程序设计STACK SEGMENT PARA STACK DB200DUP(0)STACK ENDSDATA SEGMENT BUF DB ABCD5678bdcaMNN EQU$ - BUFMAX DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOVAX,DATA MOVDS,AX MOVBX,OFFSET BUF ;BX指向字串首指向字串首5.5.3 循环程序设计 MOV AL,BX ;取出第一个字符取出第一个字符 MOV CX,N-1 ;比较次数送比较次数送CXN

43、EXT1: INC BX ;BX指向下一字符指向下一字符 CMP AL, BX ;比较比较 JNC NEXT2 MOV AL,BX ;大数送大数送ALNEXT2: LOOP NEXT ;循环次数(循环次数(CX 0)继续循环)继续循环 MOV MAX,AL ;MAX最大数最大数 MOV AH,4CH INT 21H CODE ENDS END BEGIN5.5.3 循环程序设计(2)多重循环程序设计)多重循环程序设计 多重循环即多重循环即循环体内又嵌套循环循环体内又嵌套循环。基本思想和单重循环程序设计一致,但实现起来更基本思想和单重循环程序设计一致,但实现起来更复杂。复杂。应分别考虑各重循环的

44、控制条件及其程序实现,相应分别考虑各重循环的控制条件及其程序实现,相互之间不能混淆,即互之间不能混淆,即内外层循环必须是嵌套的形式,不内外层循环必须是嵌套的形式,不能出现交叉。能出现交叉。5.5.3 循环程序设计(2)多重循环程序设计)多重循环程序设计例例5-11 在变量在变量BUF中有中有n个无符号数个无符号数x1,x2, xn,将,将它们按由大到小的顺序排列在它们按由大到小的顺序排列在BUF中,试编程实现。中,试编程实现。5.5.3 循环程序设计采用选择排序时,存储单元和寄存器分配如下:采用选择排序时,存储单元和寄存器分配如下:SI:用来控制外循环的循环计数器,初值为:用来控制外循环的循环

45、计数器,初值为1,终值为,终值为N1,每次递增每次递增1。DI:用来控制内循环的循环计数器,初值(:用来控制内循环的循环计数器,初值(SI)+1,终值为,终值为N,每次递增,每次递增1。AL: 用来存放比较数据的寄存器。用来存放比较数据的寄存器。 BUF:存放要排序数据的变量。:存放要排序数据的变量。N:存放要排序数据的个数。:存放要排序数据的个数。5.5.3 循环程序设计STACK SEGMENTSTACK DB200DUP(0)STACK ENDSDATASEGMENT BUFDB 0AH,8,15H,36H,6,20H,12H N EQU $BUF ;N为要排序数据的个数为要排序数据的个

46、数 DATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVSI,1 ;给外循环计数器赋初值给外循环计数器赋初值15.5.3 循环程序设计NEXT1:MOVDI,SI INCDIMOVAL,BUF+SI-1 NEXT2:CMPAL,BUF+DI-1 JAENEXT3XCHG BUF+DI-1,ALMOVBUF+SI-1,ALNEXT3:INCDI;(DI)(DI)+1CMPDI,N;若若(DI)N转转NEXT2,继续执行内循环开始,继续执行内循环开始5.5.3 循环程序设计JBE NEXT2 ;

47、否则退出内循环,本循环结束准备进入下一轮循环否则退出内循环,本循环结束准备进入下一轮循环INCSI;(SI)(SI)+1CMPSI,N-1;比较(比较(SI)与)与N1JBENEXT1 ;若(若(SI)N-1转转NEXT1继续循环,否则退出继续循环,否则退出MOVAH,4CHINT21HCODE ENDSENDBEGIN5.5.3 循环程序设计5.5.4 子程序结构形式与操作1.子程序的定义子程序的定义 程序设计中程序设计中,把多次重复出现、具有通用性、能够完成把多次重复出现、具有通用性、能够完成特定处理任务的程序段编写成独立的程序模块。特定处理任务的程序段编写成独立的程序模块。 特性:特性:

48、 (1)重复性重复性;(;(2)通用性通用性; (3)浮动性浮动性;(;(4)模块化模块化;主程序与子程序调用关系主程序K:调用子程序ADK:J:调用子程序ADJ:子程序A 返回主程序5.5.4 子程序结构形式与操作例5-12 调用程序和子程序在同一代码段中。调用程序和子程序在同一代码段中。MAINPROC FAR ;主程序主程序 CALLSUBR1 RETMAINENDPSUBR1PROC NEAR ;子程序子程序(NEAR可省略可省略) RETSUBR1ENDPMAIN及其子程序及其子程序SUBR1在同一代码段中,在同一代码段中,SUBR1定义为定义为NEAR属性。属性。如果调用程序和子程

49、序不在同一个代码段中,如果调用程序和子程序不在同一个代码段中,则使用则使用FAR属性属性 程序的主程序看作程序的主程序看作DOS调用的一个子程序,调用的一个子程序,因而因而DOS对对MAIN的调用以及的调用以及MAIN中的中的RET就是就是FAR属性。属性。5.5.4 子程序结构形式与操作CALL和和NEAR为为调用指令调用指令基本功能基本功能:将子程序的返回地址将子程序的返回地址(即即CALL指令的下一条指指令的下一条指令的地址,简称断点地址,令的地址,简称断点地址,包括段地址和偏移地址包括段地址和偏移地址)压)压入堆栈,以便执行完子程序入堆栈,以便执行完子程序后能返回主程序,并从断点后能返

50、回主程序,并从断点处继续往下执行,然后按照处继续往下执行,然后按照某种寻址方式转向子程序的某种寻址方式转向子程序的入口地址去执行子程序。入口地址去执行子程序。子程序定义的语法格式:子程序定义的语法格式: PROC Attribute RET ENDPSUBTPROCPUSHAX;现场保护现场保护PUSHBXPUSHCXPUSH DX ;子程序体子程序体POP DX;现场恢复现场恢复POP CXPOP BXPOP AXRETSUBTENDPPUSH指令把指令把子程序所需要子程序所需要使用的寄存器使用的寄存器内容保存在堆内容保存在堆栈中栈中POP指令把寄指令把寄存器内容恢复存器内容恢复原状原状5.

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(汇编语言程序设计-ppt课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|