版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章根本控制构造 讲授要点 字符与字符串的输入/输出方法 双分支与多分支构造 循环程序的控制方法5.1 顺序构造5.1.1 简单程序设计 DATAS SEGMENT ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AH,1 INT 21H ;输入字母 CMP AL,a JB EXIT ;小于a退出 CMP AL,z JA EXIT ;大于z退出 SUB AL,20H ;大于a小于z,那么转换成大写字母(减20h
2、后转换为大写) MOV DL,AL MOV AH,02H ;AH=2,显示字符 INT 21H JMP START EXIT: MOV AH,4CH ;前面没有入栈操作,所以要调用编号为4C的功能前往DOS INT 21H CODES ENDS END START 5.1.2 字符与字符串的输入/输出方法 DOS系统调用INT 21H提供了字符及字符串的I/O功能,例如: 01H:从键盘读入一个字符 02H:显示一个字符 09H:显示一个字符串 0AH:从键盘读入一个字符串 5.1.2 字符与字符串的输入/输出方法1. 1. 从键盘读入一个字符从键盘读入一个字符 功能号:功能号:01H01H
3、出口参数:出口参数:AL = AL = 输入字符的输入字符的ASCIIASCII码码 功能:等待从键盘读入一个字符,将其功能:等待从键盘读入一个字符,将其ASCIIASCII码送入码送入ALAL,同时将该字符显示在屏幕上。,同时将该字符显示在屏幕上。 调用方法:调用方法:movmovah, 1ah, 1intint21h21h 阐明:输入一个字符后,不需求回车。假设只键入回阐明:输入一个字符后,不需求回车。假设只键入回车,那么车,那么AL = 0DHAL = 0DH。5.1.2 字符与字符串的输入/输出方法2. 2. 显示一个字符显示一个字符 功能号:功能号:02H02H 入口参数:入口参数:
4、DL = DL = 要显示字符的要显示字符的ASCIIASCII码码 功能:在当前光标位置显示功能:在当前光标位置显示DLDL中的字符,光标右移。中的字符,光标右移。 调用方法例如:调用方法例如:movmovdl, Adl, A; ; 显示字符显示字符AAmovmovah, 2ah, 2intint21h21h 阐明:显示字符阐明:显示字符0DH0DH和和0AH0AH将产生回车和换行的作用。将产生回车和换行的作用。5.1.2 字符与字符串的输入/输出方法 3. 显示一个字符串 功能号:09H 入口参数:DS:DX = 欲显示字符串在内存的首地址,且字符串必需以$24H作为终了符。 功能:在当前
5、光标位置,显示由DS:DX所指的、以$结尾的字符串,且光标右移。其中,$不算在显示的字符串之内。 调用方法例如:StringdbHello!, $; 显示字符串Hello!movax, seg Stringmovds, axmovdx, offset Stringmovah, 9int21h 5.1.2 字符与字符串的输入/输出方法 4. 从键盘读入一个字符串 功能号:0AH 入口参数:DS:DX = 输入缓冲区首地址 输入缓冲区格式:第0字节事先设置为缓冲区最多能包容的字符个数包括回车;第1字节将存放实践字符个数不包括回车,由系统自动设置;从第2字节开场存放实践输入的字符串,最后为回车符。
6、功能:从键盘读入一个字符串,存入DS:DX所指的缓冲区。 调用方法例如:bufdb10, ?, 10 dup (?) ; 定义输入缓冲区movax, seg bufmovds, axleadx, bufmovah, 0ahint21h 5.1.2 字符与字符串的输入/输出方法5. 5. 字符与字符串的输入字符与字符串的输入/ /输出举例输出举例 DOSDOS系统调用只提供了字符与字符串的输入系统调用只提供了字符与字符串的输入/ /输出方法。假设要输入输出方法。假设要输入/ /输输出其它类型的数据,如常用的整数,那么必需由运用程序来实现与字符出其它类型的数据,如常用的整数,那么必需由运用程序来实
7、现与字符之间的转换。例如,欲输出整数之间的转换。例如,欲输出整数126126,只能以字符串的方式输出,只能以字符串的方式输出1 1 、 2 2 、 6 6 。 对于程序员来说,在需求用户输入时给出输入提示,对输入数据进展对于程序员来说,在需求用户输入时给出输入提示,对输入数据进展有效性检查,在输出结果时阐明其表示的含义,是一种好的设计习惯。有效性检查,在输出结果时阐明其表示的含义,是一种好的设计习惯。第一章第一章 根底知识根底知识第五章第五章 汇编言语程序构造汇编言语程序构造 例:从键盘输入字符并将输入的字符显示出来,假设输入是英文字符小写字例:从键盘输入字符并将输入的字符显示出来,假设输入是
8、英文字符小写字母,将小写字母转换成为大写字母。母,将小写字母转换成为大写字母。data segmentmessage dbThis is a sample program of keyboard and disply db0dh,0ah,Please strike the key!,0dh,0ah,$ data ends;定义数据段,数据段给出提示内容。在数据段中;定义数据段,数据段给出提示内容。在数据段中0dh和和0ah分别表示回车和分别表示回车和;换行字符。字符;换行字符。字符$表示字符串的终了标志。假设没有回车和换行会出现什表示字符串的终了标志。假设没有回车和换行会出现什;么显示结果。;
9、么显示结果。第一章第一章 根底知识根底知识第五章第五章 汇编言语程序构造汇编言语程序构造stacksegment stackdb50 dup(?)stackends;定义堆栈段。其中;定义堆栈段。其中 参数参数stack表示程序在运转过程中,该段为系统堆栈段中表示程序在运转过程中,该段为系统堆栈段中;的一部分。假设不加这个,将单独对本程序建立堆栈。;的一部分。假设不加这个,将单独对本程序建立堆栈。codesegmentassume cs:code,ds:data,ss:stack;明确段存放器与段定义之间的关系;明确段存放器与段定义之间的关系start:movax,data movds,axm
10、ov ax,stack;可以省,为什么?;可以省,为什么?mov ss,ax ;可以省,为什么?;可以省,为什么?;初始化段存放器;初始化段存放器第一章第一章 根底知识根底知识第五章第五章 汇编言语程序构造汇编言语程序构造movdx,offset messagemovah,9int21h;显示字符串。调用;显示字符串。调用21H中断也是中断也是DOS功能调用的功能调用的9号功能,该功能是号功能,该功能是;显示字符串,其中;显示字符串,其中DS:DX为字符串地址,为字符串地址,$为字符串终了标志。为字符串终了标志。again:movah,1int21h;调用;调用21H中断的中断的1号功能,将键
11、盘输入的字符号功能,将键盘输入的字符ASC码存在码存在al存放器存放器cmpal,1bh;和;和ESC键输入字符对比键输入字符对比jeexit;假设是按下;假设是按下ESC键,就跳转终了键,就跳转终了cmpal,61h;和;和a字符对比字符对比jcnd;产生借位,就是小于;产生借位,就是小于a字符,跳转到字符,跳转到nd直接输入结果直接输入结果cmpal,7ah;和;和z字符对比字符对比jand;没有借位同时不为零,大于;没有借位同时不为零,大于z字符,跳转到字符,跳转到nd直接输入结果直接输入结果第一章第一章 根底知识根底知识第五章第五章 汇编言语程序构造汇编言语程序构造andal,1101
12、1111b;假设输入字符在;假设输入字符在a与与z之间,经过与运算,将小写转之间,经过与运算,将小写转 ;换为大写。;换为大写。Sub al,aA也一样也一样nd:movdl,al;将字符传入到;将字符传入到dl存放器中存放器中movah,2int21h;调用;调用21中断的功能中断的功能2,将,将dl存放器的字符输出存放器的字符输出jmpagain;循环执行,直到按下;循环执行,直到按下ESC键退出键退出exit:movah,4chint21h;调用;调用21中断的中断的4ch功能,前往功能,前往doscodeends;代码段终了;代码段终了endstart;终了汇编,程序终了;终了汇编,程
13、序终了 假设将主程序建立为过程,由假设将主程序建立为过程,由DOS调用该过程。进入程序后,首先把调用该过程。进入程序后,首先把DS的内的内容和容和0作为段地址和偏移地址入栈,以便在程序终了时用作为段地址和偏移地址入栈,以便在程序终了时用RET指令前往指令前往DOS,这,这是一种较好的任务方式。假设在主程序开场时没有用上面三条指令在堆栈中建立是一种较好的任务方式。假设在主程序开场时没有用上面三条指令在堆栈中建立前往信息,那么在程序终了时效不能直接用前往信息,那么在程序终了时效不能直接用RET前往指令,而应该运用编号为前往指令,而应该运用编号为4c的功能调用前往的功能调用前往DOD。程序改为如下。
14、程序改为如下。5.4 串操作5.4.1 串操作指令及其用途 1. 串操作指令串操作指令1 MOVSMove String:串传送:串传送 语法格式:语法格式:MOVSBMOVSWMOVSD 功能描画:功能描画:ES:DI = DS:SI; if DF = 0 then SI = SI + size; DI = DI + size; else SI = SI size; DI = DI size; endif 其中,其中,size = 1B、2W或或4D。 也就是说,也就是说,MOVSB/W/D将将DS:SI所指源串的所指源串的1个元素字节个元素字节/字字/双字双字复制到复制到ES:DI所指的内
15、存单元。然后,所指的内存单元。然后,SI和和DI添加或减少添加或减少1/2/4。假设。假设DF = 0,那,那么添加,否那么减少。么添加,否那么减少。 对标志位的影响:无。对标志位的影响:无。5.4.1 串操作指令及其用途2LODSLoad String:串装入 语法格式:LODSBLODSWLODSD 功能描画:AL/AX/EAX = DS:SI; if DF = 0 then SI = SI + size; else SI = SI size; endif 其中, size = 1B、2W或4D。 也就是说,LODSB/W/D将DS:SI所指源串的1个元素字节/字/双字复制到AL/AX/E
16、AX。然后,SI添加或减少1/2/4。假设DF = 0,那么添加,否那么减少。 对标志位的影响:无。 5.4.1 串操作指令及其用途3STOSStore String:串存储 语法格式:STOSBSTOSWSTOSD 功能描画:ES:DI = AL/AX/EAX; if DF = 0 then DI = DI + size; else DI = DI size; endif 其中,size = 1B、2W或4D。 也就是说,STOSB/W/D将AL/AX/EAX的值复制到ES:DI所指的内存单元。然后,DI添加或减少1/2/4。假设DF = 0,那么添加,否那么减少。 对标志位的影响:无。 5
17、.4.1 串操作指令及其用途4CMPSCompare Strings:串比较 语法格式:CMPSBCMPSWCMPSD 功能描画:DS:SI ES:DI; if DF = 0 then SI = SI + size; DI = DI + size; else SI = SI size; DI = DI size; endif 其中,size = 1B、2W或4D。 也就是说,CMPSB/W/D将DS:SI所指源串的1个元素字节/字/双字与ES:DI所指目的串的1个元素字节/字/双字进展比较,根据比较结果设置标志位。然后,SI和DI添加或减少1/2/4。假设DF = 0,那么添加,否那么减少。
18、对标志位的影响:同CMP。 5.4.1 串操作指令及其用途5SCASScan String:串扫描 语法格式:SCASBSCASWSCASD 功能描画:AL/AX/EAX ES:DI; if DF = 0 then DI = DI + size; else DI = DI size; endif 其中,size = 1B、2W或4D。 也就是说,SCASB/W/D将AL/AX/EAX与ES:DI所指目的串的1个字节/字/双字进展比较,根据比较结果设置标志位。然后,DI添加或减少1/2/4。假设DF = 0,那么添加,否那么减少。 5.4.1 串操作指令及其用途6反复前缀REP; 当CX 0时,
19、反复执行后面的串指令; 每执行1次,CX = CX 1; 只能用在MOVS、LODS或STOSB/W/D之前REPZ/REPE; 当CX 0且ZF = 1时,反复执行后面的串指令; 每执行1次,CX = CX 1; 只能用在CMPSB/W/D或SCASB/W/D之前REPNZ/REPNE; 当CX 0且ZF = 0时,反复执行后面的串指令; 每执行1次,CX = CX 1; 只能用在CMPSB/W/D或SCASB/W/D之前 阐明: 假设CX初值为0,那么不执行任何操作,而且标志位不变。5.4.1 串操作指令及其用途 2. 2. 串指令的共性串指令的共性 源串:地址由源串:地址由DS:SIDS
20、:SI表示。表示。 目的串:地址由目的串:地址由ES:DIES:DI表示。表示。 自动修正地址:每次数据操作后,自动修正地址:每次数据操作后,SISI和和DIDI自动递增或递减,取决于操作的数据类自动递增或递减,取决于操作的数据类型字节、字或双字以及型字节、字或双字以及DFDF的值。假设的值。假设DF = 0DF = 0, 那么那么SISI和和DIDI自动添加自动添加1 1、2 2或或4 4。否那么,减否那么,减1 1、2 2或或4 4。可以运用。可以运用CLDCLD或或STDSTD指令设置指令设置DFDF。 计数器:运用反复前缀时,由计数器:运用反复前缀时,由CXCX表示数据个数,每反复表示数据个数,每反复1 1次操作,次操作,CXCX减减1 1。3. 3. 串指令的用途串指令的用途 串指令主要用于处置延续的内存单元,与反复前缀配合运用更有效。例如:串指令主要用于处置延续的内存单元,与反复前缀配合运用更有效。例如: MOVSMOVS用于将一个内存块的数据复制到另一块;用于将一个内存块的数据复制到另一块; CMPSCMPS用于比较两个内存区的数据;用于比较两个内存区的数据; SCASSCAS可以在一个内存区中扫描与给定值初次匹配或不匹配的元素;可以在一个内存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年宠物养宠知识培训
- 2026年采油工人安全知识培训
- 2026年中石油非洲公司历年仿真题
- 2026年医药代表客户拜访话术
- 2026年汽车维修技能大赛理论知识模拟题库讲解(易错题)附答案详解
- 2026年昆明市官渡区广播电视台(融媒体中心)人员招聘笔试备考试题及答案解析
- 2026年计算机知识考试题库附完整答案详解【典优】
- 2026年甘肃省兰州市广播电视台(融媒体中心)人员招聘笔试参考试题及答案解析
- 2026年江西省南昌市广播电视台(融媒体中心)人员招聘笔试参考题库及答案解析
- 2026年河南省漯河市林业系统人员招聘笔试模拟试题及答案解析
- 2026年“安全生产月活动”《安全知识》培训考试题库及答案
- 文旅景区博物馆下年度活动策划方案
- T∕CCEIA 0006-2026 污水处理复合碳源用羧甲基纤维素钠副产浓缩液
- 2026年中招科技特长测试题及答案
- 建筑工程施工人员团体人身意外伤害保险(2019版)
- 临床急救技能提升应急处理与团队协作培训课件
- 端午节演讲稿小学生300字
- 工程事故紧急应急预案
- 《事业编制人员入职信息填写表》
- 电力配电线路施工PPT完整全套教学课件
- 分数乘整数教学实录
评论
0/150
提交评论