《基本控制结构》ppt课件

上传人:tia****nde 文档编号:67174078 上传时间:2019-01-07 格式:PPT 页数:24 大小:379.31KB
返回 下载 相关 举报
《基本控制结构》ppt课件_第1页
第1页 / 共24页
《基本控制结构》ppt课件_第2页
第2页 / 共24页
《基本控制结构》ppt课件_第3页
第3页 / 共24页
《基本控制结构》ppt课件_第4页
第4页 / 共24页
《基本控制结构》ppt课件_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《《基本控制结构》ppt课件》由会员分享,可在线阅读,更多相关《《基本控制结构》ppt课件(24页珍藏版)》请在金锄头文库上搜索。

1、2019/1/7,80x86汇编语言程序设计,第5章基本控制结构,讲授要点,字符与字符串的输入/输出方法 双分支与多分支结构 循环程序的控制方法,2019/1/7,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 A

2、L,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/1/7,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,DOS系统调用INT 21H提供了字符及字符串的I/O功能,例如: 01H:从键盘读入一个字符 02H:显示一个字符 09H:显示一个字符串 0

3、AH:从键盘读入一个字符串,2019/1/7,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,1. 从键盘读入一个字符 功能号:01H 出口参数:AL = 输入字符的ASCII码 功能:等待从键盘读入一个字符,将其ASCII码送入AL,同时将该字符显示在屏幕上。 调用方法: mov ah, 1 int 21h 说明:输入一个字符后,不需要回车。若只键入回车,则AL = 0DH。,2019/1/7,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,2. 显示一个字符 功能号:02H 入口参数:DL = 要显示字符的ASCII码 功能:在当前光标位置显示D

4、L中的字符,光标右移。 调用方法示例: mov dl, A ; 显示字符A mov ah, 2 int 21h 说明:显示字符0DH和0AH将产生回车和换行的作用。,2019/1/7,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,3. 显示一个字符串 功能号:09H 入口参数:DS:DX = 欲显示字符串在内存的首地址,且字符串必须以$(24H)作为结束符。 功能:在当前光标位置,显示由DS:DX所指的、以$结尾的字符串,且光标右移。其中,$不算在显示的字符串之内。 调用方法示例: String db Hello!, $; 显示字符串Hello! mov ax, seg

5、 String mov ds, ax mov dx, offset String mov ah, 9 int 21h,2019/1/7,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,4. 从键盘读入一个字符串 功能号:0AH 入口参数:DS:DX = 输入缓冲区首地址 输入缓冲区格式:第0字节事先设置为缓冲区最多能容纳的字符个数(包括回车);第1字节将存放实际字符个数(不包括回车),由系统自动设置;从第2字节开始存放实际输入的字符串,最后为回车符。 功能:从键盘读入一个字符串,存入DS:DX所指的缓冲区。 调用方法示例: buf db 10, ?, 10 dup (?)

6、 ; 定义输入缓冲区 mov ax, seg buf mov ds, ax lea dx, buf mov ah, 0ah int 21h,2019/1/7,80x86汇编语言程序设计,5.1.2 字符与字符串的输入/输出方法,5. 字符与字符串的输入/输出举例 DOS系统调用只提供了字符与字符串的输入/输出方法。如果要输入/输出其它类型的数据,如常用的整数,则必须由应用程序来实现与字符之间的转换。例如,欲输出整数126,只能以字符(串)的方式输出1 、 2 、 6 。 对于程序员来说,在需要用户输入时给出输入提示,对输入数据进行有效性检查,在输出结果时说明其表示的含义,是一种好的设计习惯。,

7、2019/1/7,80x86汇编语言程序设计,2019/1/7,80x86汇编语言程序设计,2019/1/7,80x86汇编语言程序设计,2019/1/7,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 ;定义数据段,数据段

8、给出提示内容。在数据段中0dh和0ah分别表示回车和 ;换行字符。字符$表示字符串的结束标志。如果没有回车和换行会出现什 ;么显示结果。,2019/1/7,80x86汇编语言程序设计,第一章 基础知识,第五章 汇编语言程序结构,stack segment stack db 50 dup(?) stack ends ;定义堆栈段。其中 参数stack表示程序在运行过程中,该段为系统堆栈段中 ;的一部分。如果不加这个,将单独对本程序建立堆栈。,code segment assume cs:code,ds:data,ss:stack ;明确段寄存器与段定义之间的关系,start: mov ax,da

9、ta mov ds,ax mov ax,stack;可以省,为什么? mov ss,ax ;可以省,为什么? ;初始化段寄存器,2019/1/7,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 e

10、xit;如果是按下ESC键,就跳转结束 cmp al,61h;和a字符对比 jc nd;产生借位,就是小于a字符,跳转到nd直接输入结果 cmp al,7ah;和z字符对比 ja nd;没有借位同时不为零,大于z字符,跳转到nd直接输入结果,2019/1/7,80x86汇编语言程序设计,第一章 基础知识,第五章 汇编语言程序结构,and al,11011111b;如果输入字符在a与z之间,通过与运算,将小写转 ;换为大写。Sub al,aA也一样 nd: mov dl,al;将字符传入到dl寄存器中 mov ah,2 int 21h;调用21中断的功能2,将dl寄存器的字符输出 jmp aga

11、in;循环执行,直到按下ESC键退出 exit: mov ah,4ch int 21h;调用21中断的4ch功能,返回dos code ends;代码段结束 end start;结束汇编,程序结束,如果将主程序建立为过程,由DOS调用该过程。进入程序后,首先把DS的内容和0作为段地址和偏移地址入栈,以便在程序结束时用RET指令返回DOS,这是一种较好的工作方式。如果在主程序开始时没有用上面三条指令在堆栈中建立返回信息,则在程序结束时效不能直接用RET返回指令,而应该使用编号为4c的功能调用返回DOD。程序改为如下。,2019/1/7,80x86汇编语言程序设计,5.4 串操作 5.4.1 串操

12、作指令及其用途,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,则增加,否则减少。 对标志

13、位的影响:无。,2019/1/7,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,则增加,否则减少。 对标志位的影

14、响:无。,2019/1/7,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/1/

15、7,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个元素(字节/字/双字)进行比较,根据比较结果设置标志位

16、。然后,SI和DI增加或减少1/2/4。若DF = 0,则增加,否则减少。 对标志位的影响:同CMP。,2019/1/7,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 =

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号