《基本控制结构》PPT课件.ppt_第1页
《基本控制结构》PPT课件.ppt_第2页
《基本控制结构》PPT课件.ppt_第3页
《基本控制结构》PPT课件.ppt_第4页
《基本控制结构》PPT课件.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

2019/7/1,80x86汇编语言程序设计,第5章基本控制结构,讲授要点,字符与字符串的输入/输出方法 双分支与多分支结构 循环程序的控制方法,2019/7/1,80x86汇编语言程序设计,5.1 顺序结构 5.1.1 简单程序设计,DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AH,1 INT 21H ;输入字母 CMP AL,a JB EXIT ;小于a退出 CMP AL,z,JA EXIT ;大于z退出 SUB AL,20H ;大于a小于z,则转换成大写字母(减20h后转换为大写) MOV DL,AL MOV AH,02H ;AH=2,显示字符 INT 21H JMP START EXIT: MOV AH,4CH ;前面没有入栈操作,所以要调用编号为4C的功能返回DOS INT 21H CODES ENDS END START,2019/7/1,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,DOS系统调用INT 21H提供了字符及字符串的I/O功能,例如: 01H:从键盘读入一个字符 02H:显示一个字符 09H:显示一个字符串 0AH:从键盘读入一个字符串,2019/7/1,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,1. 从键盘读入一个字符 功能号:01H 出口参数:AL = 输入字符的ASCII码 功能:等待从键盘读入一个字符,将其ASCII码送入AL,同时将该字符显示在屏幕上。 调用方法: mov ah, 1 int 21h 说明:输入一个字符后,不需要回车。若只键入回车,则AL = 0DH。,2019/7/1,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,2. 显示一个字符 功能号:02H 入口参数:DL = 要显示字符的ASCII码 功能:在当前光标位置显示DL中的字符,光标右移。 调用方法示例: mov dl, A ; 显示字符A mov ah, 2 int 21h 说明:显示字符0DH和0AH将产生回车和换行的作用。,2019/7/1,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,3. 显示一个字符串 功能号:09H 入口参数:DS:DX = 欲显示字符串在内存的首地址,且字符串必须以$(24H)作为结束符。 功能:在当前光标位置,显示由DS:DX所指的、以$结尾的字符串,且光标右移。其中,$不算在显示的字符串之内。 调用方法示例: String db Hello!, $; 显示字符串Hello! mov ax, seg String mov ds, ax mov dx, offset String mov ah, 9 int 21h,2019/7/1,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,4. 从键盘读入一个字符串 功能号:0AH 入口参数:DS:DX = 输入缓冲区首地址 输入缓冲区格式:第0字节事先设置为缓冲区最多能容纳的字符个数(包括回车);第1字节将存放实际字符个数(不包括回车),由系统自动设置;从第2字节开始存放实际输入的字符串,最后为回车符。 功能:从键盘读入一个字符串,存入DS:DX所指的缓冲区。 调用方法示例: buf db 10, ?, 10 dup (?) ; 定义输入缓冲区 mov ax, seg buf mov ds, ax lea dx, buf mov ah, 0ah int 21h,2019/7/1,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,5. 字符与字符串的输入/输出举例 DOS系统调用只提供了字符与字符串的输入/输出方法。如果要输入/输出其它类型的数据,如常用的整数,则必须由应用程序来实现与字符之间的转换。例如,欲输出整数126,只能以字符(串)的方式输出1 、 2 、 6 。 对于程序员来说,在需要用户输入时给出输入提示,对输入数据进行有效性检查,在输出结果时说明其表示的含义,是一种好的设计习惯。,2019/7/1,80x86汇编语言程序设计,2019/7/1,80x86汇编语言程序设计,2019/7/1,80x86汇编语言程序设计,2019/7/1,80x86汇编语言程序设计,第一章 基础知识,第五章 汇编语言程序结构,例:从键盘输入字符并将输入的字符显示出来,如果输入是英文字符小写字母,将小写字母转换成为大写字母。,data segment message db This is a sample program of keyboard and disply db 0dh,0ah,Please strike the key!,0dh,0ah,$ data ends ;定义数据段,数据段给出提示内容。在数据段中0dh和0ah分别表示回车和 ;换行字符。字符$表示字符串的结束标志。如果没有回车和换行会出现什 ;么显示结果。,2019/7/1,80x86汇编语言程序设计,第一章 基础知识,第五章 汇编语言程序结构,stack segment stack db 50 dup(?) stack ends ;定义堆栈段。其中 参数stack表示程序在运行过程中,该段为系统堆栈段中 ;的一部分。如果不加这个,将单独对本程序建立堆栈。,code segment assume cs:code,ds:data,ss:stack ;明确段寄存器与段定义之间的关系,start: mov ax,data mov ds,ax mov ax,stack;可以省,为什么? mov ss,ax ;可以省,为什么? ;初始化段寄存器,2019/7/1,80x86汇编语言程序设计,第一章 基础知识,第五章 汇编语言程序结构,mov dx,offset message mov ah,9 int 21h ;显示字符串。调用21H中断(也是DOS功能调用)的9号功能,该功能是 ;显示字符串,其中DS:DX为字符串地址,$为字符串结束标志。,again: mov ah,1 int 21h;调用21H中断的1号功能,将键盘输入的字符ASC码存在al寄存器 cmp al,1bh;和ESC键输入字符对比 je exit;如果是按下ESC键,就跳转结束 cmp al,61h;和a字符对比 jc nd;产生借位,就是小于a字符,跳转到nd直接输入结果 cmp al,7ah;和z字符对比 ja nd;没有借位同时不为零,大于z字符,跳转到nd直接输入结果,2019/7/1,80x86汇编语言程序设计,第一章 基础知识,第五章 汇编语言程序结构,and al,11011111b;如果输入字符在a与z之间,通过与运算,将小写转 ;换为大写。Sub al,aA也一样 nd: mov dl,al;将字符传入到dl寄存器中 mov ah,2 int 21h;调用21中断的功能2,将dl寄存器的字符输出 jmp again;循环执行,直到按下ESC键退出 exit: mov ah,4ch int 21h;调用21中断的4ch功能,返回dos code ends;代码段结束 end start;结束汇编,程序结束,如果将主程序建立为过程,由DOS调用该过程。进入程序后,首先把DS的内容和0作为段地址和偏移地址入栈,以便在程序结束时用RET指令返回DOS,这是一种较好的工作方式。如果在主程序开始时没有用上面三条指令在堆栈中建立返回信息,则在程序结束时效不能直接用RET返回指令,而应该使用编号为4c的功能调用返回DOD。程序改为如下。,2019/7/1,80x86汇编语言程序设计,5.4 串操作 5.4.1 串操作指令及其用途,1. 串操作指令 (1) MOVS(Move String):串传送 语法格式: MOVSB MOVSW MOVSD 功能描述: ES:DI = DS:SI; if ( DF = 0 ) then SI = SI + size; DI = DI + size; else SI = SI size; DI = DI size; endif 其中,size = 1(B)、2(W)或4(D)。 也就是说,MOVS(B/W/D)将DS:SI所指源串的1个元素(字节/字/双字)复制到ES:DI所指的内存单元。然后,SI和DI增加或减少1/2/4。若DF = 0,则增加,否则减少。 对标志位的影响:无。,2019/7/1,80x86汇编语言程序设计,5.4.1 串操作指令及其用途,(2)LODS(Load String):串装入 语法格式: LODSB LODSW LODSD 功能描述: AL/AX/EAX = DS:SI; if ( DF = 0 )then SI = SI + size; else SI = SI size; endif 其中, size = 1(B)、2(W)或4(D)。 也就是说,LODS(B/W/D)将DS:SI所指源串的1个元素(字节/字/双字)复制到AL/AX/EAX。然后,SI增加或减少1/2/4。若DF = 0,则增加,否则减少。 对标志位的影响:无。,2019/7/1,80x86汇编语言程序设计,5.4.1 串操作指令及其用途,(3)STOS(Store String):串存储 语法格式: STOSB STOSW STOSD 功能描述: ES:DI = AL/AX/EAX; if ( DF = 0 )then DI = DI + size; else DI = DI size; endif 其中,size = 1(B)、2(W)或4(D)。 也就是说,STOS(B/W/D)将AL/AX/EAX的值复制到ES:DI所指的内存单元。然后,DI增加或减少1/2/4。若DF = 0,则增加,否则减少。 对标志位的影响:无。,2019/7/1,80x86汇编语言程序设计,5.4.1 串操作指令及其用途,(4)CMPS(Compare Strings):串比较 语法格式: CMPSB CMPSW CMPSD 功能描述: DS:SI ES:DI; if ( DF = 0 )then SI = SI + size; DI = DI + size; else SI = SI size; DI = DI size; endif 其中,size = 1(B)、2(W)或4(D)。 也就是说,CMPS(B/W/D)将DS:SI所指源串的1个元素(字节/字/双字)与ES:DI所指目的串的1个元素(字节/字/双字)进行比较,根据比较结果设置标志位。然后,SI和DI增加或减少1/2/4。若DF = 0,则增加,否则减少。 对标志位的影响:同CMP。,2019/7/1,80x86汇编语言程序设计,5.4.1 串操作指令及其用途,(5)SCAS(Scan String):串扫描 语法格式: SCASB SCASW SCASD 功能描述: AL/AX/EAX ES:DI; if ( DF = 0 )then DI = DI + size; else DI = DI size; endif 其中,size = 1(B)、2(W)或4(D)。 也就是说,SCAS(B/W/D)将AL/AX/EAX与ES:DI所指目的串的1个字节/字/双字进行比较,根据比较结果设置标志位。然后,DI增加或减少1/2/4。若DF = 0,则增加,否则减少。,2019/7/1,80x86汇编语言程序设计,5.4.1 串操作指令及其用途,(6)重复前缀 REP ; 当CX 0时,重复执行后面的串指令 ; 每执行1次,CX = CX 1 ; 只能用在MOVS、LODS或STOS(B/W/D)之前 REPZ/REPE ; 当CX 0且ZF = 1时,重复执行后面的串指令 ; 每执行1次,CX = CX 1 ; 只能用在CMPS(B/W/D)或SCAS(B/W/D)之前 REPNZ/REPNE ; 当CX 0且ZF = 0时,重复执行后面的串指令 ; 每执行1次,CX = CX 1 ; 只能用在CMPS(B/W/D)或SCAS(B/W/D)之前 说明: 若CX初值为0,则不执行任何操作,而且标志位不变。,2019/7/1,80x86汇编语言程序设计,5.4.1 串操作指令及其用途,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. 串指令的用途 串指令主要用于处理连续的内存单元,与重复前缀配合使用更有效。例如: MOVS用于将一个内存块的数据复制到另一块; CMPS用于比较两个内存区的数据; SCAS可以在一个内存区中扫描与给定值首次匹配或不匹配的元素; STOS能将一个内存区的所有单元初始化为给定值。 LODS一般不用重复前缀。,2019/7/1,80x86汇编语言程序设计,5.4.2 字符串处理,1. ASCII字符串的表示方法 字符串是一种特殊的数据串,比其它类型的串更常使用,因此,有时将字符串简称为串。 ASCII字符串的表示方法主要有下列两种: (1)长度前缀法。 由首字节指出字符串长度,

温馨提示

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

评论

0/150

提交评论