第5章基本控制结构 讲授要点 字符与字符串的输入/输出方法 双分支与多分支结构 循环程序的控制方法 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 第5章基本控制结构 讲授要点 ▪ 字符与字符串的输入/输出方法 ▪ 双分支与多分支结构 ▪ 循环程序的控制方法
5.1顺序结构 5.1.1简单程序设计 从一个简单例子入手,介绍完整汇编语言程序的设计方法 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 5.1 顺序结构 5.1.1 简单程序设计 从一个简单例子入手,介绍完整汇编语言程序的设计方法
5.1.2字符与字符串的输八/输出方法 DOS系统调用INT2IH提供了字符及字符串的O功能,例如 0H:从键盘读入一个字符 02H:显示—个字符 09H:显示一个字符串 0AH:从键盘读入一个字符串 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 5.1.2 字符与字符串的输入/输出方法 DOS系统调用INT 21H提供了字符及字符串的I/O功能,例如: 01H:从键盘读入一个字符 02H:显示一个字符 09H:显示一个字符串 0AH:从键盘读入一个字符串
5.1.2字符与字符串的输八/输出方法 1.从键盘读入一个字符 功能号:01H 出囗参数:AL=输入字符的ASCI码 功能:等待从键盘读入一个字符,将其ASCI码送入AL,同时将该字符显示在屏幕上。 调用方法 mov Int 21h 说明:输入一个字符后,不需要回车。若只键入回车,则AL=ODH 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 5.1.2 字符与字符串的输入/输出方法 1. 从键盘读入一个字符 功能号:01H 出口参数:AL = 输入字符的ASCII码 功能:等待从键盘读入一个字符,将其ASCII码送入AL,同时将该字符显示在屏幕上。 调用方法: mov ah, 1 int 21h 说明:输入一个字符后,不需要回车。若只键入回车,则AL = 0DH
5.1.2字符与字符串的输八/输出方法 2.显示一个字符 功能号:02H 入口参数:DL=要显示字符的ASCI码 功能:在当前光标位置显示DL中的字符,光标右移。 调用方法示例 mov dl.a 显示字符A mov ah. 2 nt 21h 说明:显示字符0DH和0AH将产生回车和换行的作用。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 5.1.2 字符与字符串的输入/输出方法 2. 显示一个字符 功能号:02H 入口参数:DL = 要显示字符的ASCII码 功能:在当前光标位置显示DL中的字符,光标右移。 调用方法示例: mov dl, 'A' ; 显示字符'A' mov ah, 2 int 21h 说明:显示字符0DH和0AH将产生回车和换行的作用
5.1.2字符与字符串的输八/输出方法 3.显示一个字符串 功能号:09H 入口参数:DSDX=欲显示字符串在内存的首地址,且字符串必须以$(24H)作为 结束符。 功能:在当前光标位置,显示由DS:DX所指的、以$结尾的字符串,且光标右移。其 中,$不算在显示的字符串之内 调用方法示例: String db ' Hello!. 'S 显示字符申Hell mov ax, seg String mov mov dx, offset String mov nt 21h 2021//21 80x86汇编语言程序设计
2021/1/21 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
5.1.2字符与字符串的输八/输出方法 4.从键盘读入一个字符串 功能号:0AH 入口参数:DSDX=输入缓冲区首地址 输入缓冲区格式:第0字节事先设置为缓冲区最多能容纳的字符个数(包括回车);第1 字节将存放实际字符个数(不包括回车),由系统自动设置;从第2字节开始存放实际输 入的字符串,最后为回车符。 功能:从键盘读入一个字符串,存入DSDX所指的缓冲区。 调用方法示例: buf 10,2,10dup(?);定义输入缓冲区 mov buf mov ds dx, buf mov ah, Oah 21h 2021//21 80x86汇编语言程序设计
2021/1/21 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
5.1.2字符与字符串的输八/输出方法 5.字符与字符串的输入/输出举例 DOS系统调用只提供了字符与字符串的输入输出方法。如果要输入输出其它类型 的数据,如常用的整数,则必须由应用程序来实现与字符之间的转换。例如,欲输 出整数126,只能以字符(串)的方式输出1、"2、6。 对于程序员来说,在需要用户输入时给出输入提示,对输入数据进行有效性检查 在输出结果时说明其表示的含义,是一种好的设计习惯。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 5.1.2 字符与字符串的输入/输出方法 5. 字符与字符串的输入/输出举例 ▪ DOS系统调用只提供了字符与字符串的输入/输出方法。如果要输入/输出其它类型 的数据,如常用的整数,则必须由应用程序来实现与字符之间的转换。例如,欲输 出整数126,只能以字符(串)的方式输出'1' 、 '2' 、 '6' 。 ▪ 对于程序员来说,在需要用户输入时给出输入提示,对输入数据进行有效性检查, 在输出结果时说明其表示的含义,是一种好的设计习惯
5.2分支结构 5.2.1JMP指令的灵活运用 用JMP指令实现转移的多种方法 使用标号近转移 使用标号,远转移 以通用寄存器表示目标偏移地址 ■以内存变量表示目标偏移地址 以内存变量表示目标的32位分段地址 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 5.2 分支结构 5.2.1 JMP指令的灵活运用 用JMP指令实现转移的多种方法: ▪ 使用标号, 近转移 ▪ 使用标号, 远转移 ▪ 以通用寄存器表示目标偏移地址 ▪ 以内存变量表示目标偏移地址 ▪ 以内存变量表示目标的32位分段地址
5.2.2双分支结构 双分支结构相当于高级语言的I- THEN-ELSE形式。I-THEN结构只是I- THEN-ELSE形 式的特例,即ELSE部分为空。 通常,使用条件转移指令Jc与无条件转移指令JMP来实现分支。一般必须先安排比较或 算术、逻辑运算等影响标志位的指令,然后用Jc指令判断条件,以实现分支转移。 对应于- THEN-ELSE结构的80x86汇编语言代码形如 Jcc Else code jmp EndOfIF Else Code EndOrF 注意,程序隐含是顺序执行的,在THEN分支体执行后,不会自动跳过ELSE分支体,而 是继续执行其后的代码。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 5.2.2 双分支结构 双分支结构相当于高级语言的IF-THEN-ELSE形式。IF-THEN结构只是IF-THEN-ELSE形 式的特例,即ELSE部分为空。 通常,使用条件转移指令Jcc与无条件转移指令JMP来实现分支。一般必须先安排比较或 算术、逻辑运算等影响标志位的指令,然后用Jcc指令判断条件,以实现分支转移。 对应于IF-THEN-ELSE结构的80x86汇编语言代码形如: Jcc ElseCode jmp EndOfIF ElseCode: EndOfIF: 注意,程序隐含是顺序执行的,在THEN分支体执行后,不会自动跳过ELSE分支体,而 是继续执行其后的代码