《《基本控制结构》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《基本控制结构》PPT课件.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章基本控制结构 讲授要点 字符与字符串的输入/输出方法 双分支与多分支结构 循环程序的控制方法1/19/202380 x86汇编语言程序设计5.1 顺序结构5.1.1 简单程序设计 DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAH,1INT21H;输入字母CMPAL,aJBEXIT;小于a退出CMPAL,zJAEXIT;大于z退出SUBAL,20H;大于a小于z,则转换成大写字母(减20h后转换为大写
2、)MOVDL,ALMOVAH,02H;AH=2,显示字符INT21HJMPSTARTEXIT:MOVAH,4CH;前面没有入栈操作,所以要调用编号为4C的功能返回DOSINT21HCODESENDSENDSTART1/19/202380 x86汇编语言程序设计5.1.2 字符与字符串的输入/输出方法DOS系统调用INT21H提供了字符及字符串的I/O功能,例如:01H:从键盘读入一个字符02H:显示一个字符09H:显示一个字符串0AH:从键盘读入一个字符串1/19/202380 x86汇编语言程序设计5.1.2 字符与字符串的输入/输出方法1.1.从键盘读入一个字符从键盘读入一个字符功能号:0
3、1H出口参数:AL=输入字符的ASCII码功能:等待从键盘读入一个字符,将其ASCII码送入AL,同时将该字符显示在屏幕上。调用方法:movah,1int21h说明:输入一个字符后,不需要回车。若只键入回车,则AL=0DH。1/19/202380 x86汇编语言程序设计5.1.2 字符与字符串的输入/输出方法2.2.显示一个字符显示一个字符功能号:02H入口参数:DL=要显示字符的ASCII码功能:在当前光标位置显示DL中的字符,光标右移。调用方法示例:movdl,A;显示字符Amovah,2int21h说明:显示字符0DH和0AH将产生回车和换行的作用。1/19/202380 x86汇编语言
4、程序设计5.1.2 字符与字符串的输入/输出方法3.3.显示一个字符串显示一个字符串功能号:09H入口参数:DS:DX=欲显示字符串在内存的首地址,且字符串必须以$(24H)作为结束符。功能:在当前光标位置,显示由DS:DX所指的、以$结尾的字符串,且光标右移。其中,$不算在显示的字符串之内。调用方法示例:StringdbHello!,$;显示字符串Hello!movax,segStringmovds,axmovdx,offsetStringmovah,9int21h1/19/202380 x86汇编语言程序设计5.1.2 字符与字符串的输入/输出方法4.4.从键盘读入一个字符串从键盘读入一个
5、字符串功能号:0AH入口参数:DS:DX=输入缓冲区首地址输入缓冲区格式:第0字节事先设置为缓冲区最多能容纳的字符个数(包括回车);第1字节将存放实际字符个数(不包括回车),由系统自动设置;从第2字节开始存放实际输入的字符串,最后为回车符。功能:从键盘读入一个字符串,存入DS:DX所指的缓冲区。调用方法示例:bufdb10,?,10dup(?);定义输入缓冲区movax,segbufmovds,axleadx,bufmovah,0ahint21h1/19/202380 x86汇编语言程序设计5.1.2 字符与字符串的输入/输出方法5.5.字符与字符串的输入字符与字符串的输入/输出举例输出举例D
6、OS系统调用只提供了字符与字符串的输入/输出方法。如果要输入/输出其它类型的数据,如常用的整数,则必须由应用程序来实现与字符之间的转换。例如,欲输出整数126,只能以字符(串)的方式输出1、2、6。对于程序员来说,在需要用户输入时给出输入提示,对输入数据进行有效性检查,在输出结果时说明其表示的含义,是一种好的设计习惯。1/19/202380 x86汇编语言程序设计1/19/202380 x86汇编语言程序设计1/19/202380 x86汇编语言程序设计1/19/202380 x86汇编语言程序设计第一章第一章 基础知识基础知识第五章第五章 汇编语言程序结构汇编语言程序结构 例:从键盘输入字符
7、并将输入的字符显示出来,如果输入是英文字符小写字母,例:从键盘输入字符并将输入的字符显示出来,如果输入是英文字符小写字母,将小写字母转换成为大写字母。将小写字母转换成为大写字母。data segmentmessage dbThis is a sample program of keyboard and disply db0dh,0ah,Please strike the key!,0dh,0ah,$data ends;定义数据段,数据段给出提示内容。在数据段中;定义数据段,数据段给出提示内容。在数据段中0dh和和0ah分别表示回车和分别表示回车和;换行字符。字符;换行字符。字符$表示字符串的结
8、束标志。如果没有回车和换行会出现什表示字符串的结束标志。如果没有回车和换行会出现什;么显示结果。;么显示结果。1/19/202380 x86汇编语言程序设计第一章第一章 基础知识基础知识第五章第五章 汇编语言程序结构汇编语言程序结构stacksegment stackdb50 dup(?)stackends;定义堆栈段。其中;定义堆栈段。其中 参数参数stack表示程序在运行过程中,该段为系统堆栈段中表示程序在运行过程中,该段为系统堆栈段中;的一部分。如果不加这个,将单独对本程序建立堆栈。;的一部分。如果不加这个,将单独对本程序建立堆栈。codesegmentassume cs:code,ds
9、:data,ss:stack;明确段寄存器与段定义之间的关系;明确段寄存器与段定义之间的关系start:movax,data movds,axmov ax,stack;可以省,为什么?;可以省,为什么?mov ss,ax;可以省,为什么?;可以省,为什么?;初始化段寄存器;初始化段寄存器1/19/202380 x86汇编语言程序设计第一章第一章 基础知识基础知识第五章第五章 汇编语言程序结构汇编语言程序结构movdx,offset messagemovah,9int21h;显示字符串。调用;显示字符串。调用21H中断(也是中断(也是DOS功能调用)的功能调用)的9号功能,该功能是号功能,该功能
10、是;显示字符串,其中;显示字符串,其中DS:DX为字符串地址,为字符串地址,$为字符串结束标志。为字符串结束标志。again:movah,1int21h;调用;调用21H中断的中断的1号功能,将键盘输入的字符号功能,将键盘输入的字符ASC码存在码存在al寄存器寄存器cmpal,1bh;和;和ESC键输入字符对比键输入字符对比jeexit;如果是按下;如果是按下ESC键,就跳转结束键,就跳转结束cmpal,61h;和;和a字符对比字符对比jcnd;产生借位,就是小于;产生借位,就是小于a字符,跳转到字符,跳转到nd直接输入结果直接输入结果cmpal,7ah;和;和z字符对比字符对比jand;没有
11、借位同时不为零,大于没有借位同时不为零,大于z字符,跳转到字符,跳转到nd直接输入结果直接输入结果1/19/202380 x86汇编语言程序设计第一章第一章 基础知识基础知识第五章第五章 汇编语言程序结构汇编语言程序结构andal,11011111b;如果输入字符在;如果输入字符在a与与z之间,通过与运算,将之间,通过与运算,将小写转小写转 ;换为大写。;换为大写。Sub al,aA也一样也一样nd:movdl,al;将字符传入到;将字符传入到dl寄存器中寄存器中movah,2int21h;调用;调用21中断的功能中断的功能2,将,将dl寄存器的字符输出寄存器的字符输出jmpagain;循环执
12、行,直到按下;循环执行,直到按下ESC键退出键退出exit:movah,4chint21h;调用;调用21中断的中断的4ch功能,返回功能,返回doscodeends;代码段结束;代码段结束endstart;结束汇编,程序结束;结束汇编,程序结束 如如果果将将主主程程序序建建立立为为过过程程,由由DOS调调用用该该过过程程。进进入入程程序序后后,首首先先把把DS的的内内容容和和0作作为为段段地地址址和和偏偏移移地地址址入入栈栈,以以便便在在程程序序结结束束时时用用RET指指令令返返回回DOS,这这是是一一种种较较好好的的工工作作方方式式。如如果果在在主主程程序序开开始始时时没没有有用用上上面面
13、三三条条指指令令在在堆堆栈栈中中建建立立返返回回信信息息,则则在在程程序序结结束束时时效效不不能能直直接接用用RET返返回回指指令令,而而应应该该使使用用编编号号为为4c的的功能调用返回功能调用返回DOD。程序改为如下。程序改为如下。1/19/202380 x86汇编语言程序设计5.4 串操作5.4.1 串操作指令及其用途 1.串操作指令串操作指令(1)MOVS(MoveString):串传送语法格式:MOVSBMOVSWMOVSD功能描述:ES:DI=DS:SI;if(DF=0)thenSI=SI+size;DI=DI+size;elseSI=SIsize;DI=DIsize;endif其中
14、,size=1(B)、2(W)或4(D)。也就是说,MOVS(B/W/D)将DS:SI所指源串的1个元素(字节/字/双字)复制到ES:DI所指的内存单元。然后,SI和DI增加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:无。1/19/202380 x86汇编语言程序设计5.4.1 串操作指令及其用途(2)LODS(LoadString):串装入语法格式:LODSBLODSWLODSD功能描述:AL/AX/EAX=DS:SI;if(DF=0)thenSI=SI+size;elseSI=SIsize;endif其中,size=1(B)、2(W)或4(D)。也就是说,LODS(B/
15、W/D)将DS:SI所指源串的1个元素(字节/字/双字)复制到AL/AX/EAX。然后,SI增加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:无。1/19/202380 x86汇编语言程序设计5.4.1 串操作指令及其用途(3)STOS(StoreString):串存储语法格式:STOSBSTOSWSTOSD功能描述:ES:DI=AL/AX/EAX;if(DF=0)thenDI=DI+size;elseDI=DIsize;endif其中,size=1(B)、2(W)或4(D)。也就是说,STOS(B/W/D)将AL/AX/EAX的值复制到ES:DI所指的内存单元。然后,DI增
16、加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:无。1/19/202380 x86汇编语言程序设计5.4.1 串操作指令及其用途(4)CMPS(CompareStrings):串比较语法格式:CMPSBCMPSWCMPSD功能描述:DS:SIES:DI;if(DF=0)thenSI=SI+size;DI=DI+size;elseSI=SIsize;DI=DIsize;endif其中,size=1(B)、2(W)或4(D)。也就是说,CMPS(B/W/D)将DS:SI所指源串的1个元素(字节/字/双字)与ES:DI所指目的串的1个元素(字节/字/双字)进行比较,根据比较结果设置
17、标志位。然后,SI和DI增加或减少1/2/4。若DF=0,则增加,否则减少。对标志位的影响:同CMP。1/19/202380 x86汇编语言程序设计5.4.1 串操作指令及其用途(5)SCAS(ScanString):串扫描语法格式:SCASBSCASWSCASD功能描述:AL/AX/EAXES:DI;if(DF=0)thenDI=DI+size;elseDI=DIsize;endif其中,size=1(B)、2(W)或4(D)。也就是说,SCAS(B/W/D)将AL/AX/EAX与ES:DI所指目的串的1个字节/字/双字进行比较,根据比较结果设置标志位。然后,DI增加或减少1/2/4。若DF
18、=0,则增加,否则减少。1/19/202380 x86汇编语言程序设计5.4.1 串操作指令及其用途(6)重复前缀REP;当CX0时,重复执行后面的串指令;每执行1次,CX=CX1;只能用在MOVS、LODS或STOS(B/W/D)之前REPZ/REPE;当CX0且ZF=1时,重复执行后面的串指令;每执行1次,CX=CX1;只能用在CMPS(B/W/D)或SCAS(B/W/D)之前REPNZ/REPNE;当CX0且ZF=0时,重复执行后面的串指令;每执行1次,CX=CX1;只能用在CMPS(B/W/D)或SCAS(B/W/D)之前说明:若CX初值为0,则不执行任何操作,而且标志位不变。1/19
19、/202380 x86汇编语言程序设计5.4.1 串操作指令及其用途 2.2.串指令的共性串指令的共性源串:地址由DS:SI表示。目的串:地址由ES:DI表示。自动修改地址:每次数据操作后,SI和DI自动递增或递减,取决于操作的数据类型(字节、字或双字)以及DF的值。若DF=0,则SI和DI自动增加1、2或4。否则,减1、2或4。可以使用CLD或STD指令设置DF。计数器:使用重复前缀时,由CX表示数据个数,每重复1次操作,CX减1。3.3.串指令的用途串指令的用途串指令主要用于处理连续的内存单元,与重复前缀配合使用更有效。例如:MOVS用于将一个内存块的数据复制到另一块;CMPS用于比较两个
20、内存区的数据;SCAS可以在一个内存区中扫描与给定值首次匹配或不匹配的元素;STOS能将一个内存区的所有单元初始化为给定值。LODS一般不用重复前缀。1/19/202380 x86汇编语言程序设计5.4.2 字符串处理 1.ASCII1.ASCII字符串的表示方法字符串的表示方法字符串是一种特殊的数据串,比其它类型的串更常使用,因此,有时将字符串简称为串。ASCII字符串的表示方法主要有下列两种:(1)长度前缀法。由首字节指出字符串长度,常被称作Pascal串,为Pascal语言的大多数版本所支持。例如:String1db6,String(2)0终止法。以0作为结束标志,常被称作C串,为C/C+语言所采用。例如:String2dbString,02.2.字符串处理举例字符串处理举例1/19/202380 x86汇编语言程序设计本章小结 顺序、分支和循环是程序的3种基本控制结构。程序隐含以顺序方式执行,除非遇到转移类指令。实现多分支结构的主要方法有逻辑分解、地址表和转移表等,地址表较为常用。循环程序的控制方法主要包括计数控制、条件控制、开关控制与逻辑尺控制等。带重复前缀的串操作指令适用于处理连续的内存单元。1/19/202380 x86汇编语言程序设计