第八章汇编语言基础
8.1汇编语言程序结构 L.汇编语言程序通常 由若干段组成,包括 源程序 SAMPLEASM: 代码段、数据段、堆 STACKS SEGMENT STACK DW 128 DUP(?) 堆栈段 栈段 STACKS ENDS 段由伪指令 DATAS SEGMENT SEGMENT与ENDS STRING DB 'Welcome!, 13h, 10h,'$ 数据段 定义,各段顺序任意, DATAS ENDS CODES SEGMENT 段的数目依需要确定, ASSUME CS: CODE DS: DATAS 原则上不受限制 START: MOV AX DATAS 数据段通常在代码 MOV DS, A LEA DX STRING 段前面定义。 代码段 MOV AH 09H INT 21H MoⅤA,4C00H INT 21H CODES ENDS END START 源程序模块结東
8.1汇编语言程序结构 1.汇编语言程序通常 由若干段组成,包括 代码段、数据段、堆 栈段。 段由伪指令 SEGMENT与ENDS 定义,各段顺序任意, 段的数目依需要确定, 原则上不受限制。 数据段通常在代码 段前面定义
2.段由若干语句组成,语句以指令为主体构成。可以说汇编语言 程序最终由若干条汇编语句组成,是有限条汇编语句的有序集合 3.汇编语言程序中至少要有一启动标号,作为程序开始执行时目 标代码的入口地址。启动号常用 START、 BEGIN、MAN等命名 4.为增加程序的可读性,汇编语言程序中同样有作为注释的成分 汇编语言程序的注释是以“;”开始的内容。 5.更一般地讲,汇编语言程序由若干模块组成,每个模块是一独 立汇编单位,独立汇编后整体连接成完整程序
2.段由若干语句组成,语句以指令为主体构成。可以说汇编语言 程序最终由若干条汇编语句组成,是有限条汇编语句的有序集合。 3.汇编语言程序中至少要有一启动标号,作为程序开始执行时目 标代码的入口地址。启动号常用START、BEGIN、MAIN等命名。 4.为增加程序的可读性,汇编语言程序中同样有作为注释的成分。 汇编语言程序的注释是以“ ; ”开始的内容。 5.更一般地讲,汇编语言程序由若干模块组成,每个模块是一独 立汇编单位,独立汇编后整体连接成完整程序
82汇编语言语句 1.语法基础 1)字符集 汇编语言允许使用的字符是ASCI码字符位的一个子集 包括 (1)大写字母A~Z (2)小写字母a (3)数字字符0~9 (2)期鲜符+-*=() "?as&%?!{}等 保留字是由系统给定的,有特定含义的专用名 汇编语言中的保留字主要有: a寄存器的名字AX、BX、CX、DX、BP、SP、SI、D等; b.指令助记符MOV、PUSH、POP、ADD、SUB、MUL、DIV等; d一些特殊的运算符与操作符L、EQ、HGH、SEG、PR、 SHORT釜 c伪指令符DB、DW、 ASSUME、EQU、 LABEL、 SEGMENT、PROC等; (3)标识符 标识符在程序中用以标识常量、变量、标号、过程、段、组、宏等的名字。 汇编语言的标识符是以字母或专用字符($、@、?、、-)开头的字母、数字与专用 字符的序列 汇编语言的标识符不区分大小写,不能与保留字同名
8.2汇编语言语句 1.语法基础 (1)字符集 汇编语言允许使用的字符是ASCII码字符位的一个子集。 包括: (1)大写字母A~Z; (2)小写字母a~z; (3)数字字符0~9; ((42))其.保他留字字符+-*/=()[]<>;.:, '"?@$&%?!{}等。 保留字是由系统给定的,有特定含义的专用名字。 汇编语言中的保留字主要有: a.寄存器的名字AX、BX、CX、DX、BP、SP、SI、DI等; b.指令助记符MOV、PUSH、POP、ADD、SUB、MUL、DIV等; c.伪指令符DB、DW、ASSUME、EQU、LABEL、SEGMENT、PROC等; d.一些特殊的运算符与操作符LT、EQ、HIGH、SEG、PTR、SHORT等。 (3).标识符 标识符在程序中用以标识常量、变量、标号、过程、段、组、宏等的名字。 汇编语言的标识符是以字母或专用字符($、@、?、.、-)开头的字母、数字与专用 字符的序列。 汇编语言的标识符不区分大小写,不能与保留字同名
2.语句格式 两类汇编语句在源程序中格式基本相同,由1~4部分组成。 般格式如下 1[标识符]2助记3[操作数]4[;注释] 助记符是语句的主体,对指令语句是机器指令的助记符,对伪指令语 句是伪指令符。 格式中第1、3、4部分可选。 第部分标识符,对指令语句是标号标识符,代表相应语句的符号地址: 对伪指令语句可以是变量名、过程名、段名等,多是变量名 第3部分操作数,对指令语句可以是单操作数、双操作数,也可以是无 操作数;对伪指令语句可以有更多的操作数,伪指令语句的操作数称为 参数。 第4部分注释,是程序中非常重要的辅助成分,可以单独存在
2.语句格式 两类汇编语句在源程序中格式基本相同,由1~4部分组成。 一般格式如下: 1[标识符] 2助记 3[操作数] 4[;注释] 助记符是语句的主体,对指令语句是机器指令的助记符,对伪指令语 句是伪指令符。 格式中第1、3、4部分可选。 第1部分标识符,对指令语句是标号标识符,代表相应语句的符号地址; 对伪指令语句可以是变量名、过程名、段名等,多是变量名。 第3部分操作数,对指令语句可以是单操作数、双操作数,也可以是无 操作数;对伪指令语句可以有更多的操作数,伪指令语句的操作数称为 参数。 第4部分注释,是程序中非常重要的辅助成分,可以单独存在
3指令语句 指令语句是执行性语句,以机器指令作基础,与机器指令 相对应,玏能靠硬件实现,编译后有对应的目标代码,最 终实现程序的操作处理 4伪指令语句 单纯由指令语句不能形成完整程序,需要一些辅助语句 来组织指令和数据,这些辅助语句就伪指令语句 三伪指令语句是说明性语句,告诉汇编程序如何工作,用 于程序员以源程序的方式和汇编程序通信,完成数据定义 段块定乂、存储分配等操作,完成汇编控制 伪指令语句功能靠程序,也就汇编程序实现
3.指令语句 指令语句是执行性语句,以机器指令作基础,与机器指令 相对应,功能靠硬件实现,编译后有对应的目标代码,最 终实现程序的操作处理。 4.伪指令语句 单纯由指令语句不能形成完整程序,需要一些辅助语句 来组织指令和数据,这些辅助语句就伪指令语句。 伪指令语句是说明性语句,告诉汇编程序如何工作,用 于程序员以源程序的方式和汇编程序通信,完成数据定义、 段块定义、存储分配等操作,完成汇编控制。 伪指令语句功能靠程序,也就汇编程序实现
83表达式 表达式是操作数的一种,由常量、变量、标号、寄存器与相关运算符组成,包括数 值表达式和地址表达式 1.量 (1)常量 常量在汇编时已有确定的值 (2)变量 变量是存储器中数据区的名字,一方面代表所表示的值,另一方面代表相应存 储空间地址 作存储器操作数,直接寻址。 (3)标号 标号代表指令语句的符号地址,属于代码段,用于标识程序中的控制转移地址, 可以作为条件转移、无条件转移、过程调用以及循环控制指令的操作数
8.3表达式 表达式是操作数的一种,由常量、变量、标号、寄存器与相关运算符组成,包括数 值表达式和地址表达式。 1.量 (1)常量 常量在汇编时已有确定的值。 (2)变量 变量是存储器中数据区的名字,一方面代表所表示的值,另一方面代表相应存 储空间地址。 用作存储器操作数,直接寻址。 (3)标号 标号代表指令语句的符号地址,属于代码段,用于标识程序中的控制转移地址, 可以作为条件转移、无条件转移、过程调用以及循环控制指令的操作数
2.数值表达式 数值表达式主要由量经过算术运算、关系运算、逻辑运算形成,结 果是数值常量,只有大 小,没有属性 (1)算术运算 主要的算术运算有 *、/、MOD、SHL、SHR SHL、SHR分别是算术左移运算、算术右移运算。 运算时结果可能出现溢出,对四字或十字节操作数最好不要使用表 达式 (2)关系运算 关系运算包括:相等EQ、不等NE、小于LT、大于GT、小于等于LE 大于等于GE 运算结果是特殊的常量,若关系成立,结果为 OFFFFH:若关系不 成立,结果为0 (3)逻辑运算 逻辑运算包括:与AND、或OR、异或XOR、非NOT。 逻辑运算按二进制位进行
2.数值表达式 数值表达式主要由量经过算术运算、关系运算、逻辑运算形成,结 果是数值常量,只有大 小,没有属性。 (1)算术运算 主要的算术运算有:+、一、 * 、/、MOD、SHL、SHR。 SHL、SHR分别是算术左移运算、算术右移运算。 运算时结果可能出现溢出,对四字或十字节操作数最好不要使用表 达式。 (2)关系运算 关系运算包括:相等EQ、不等NE、小于LT、大于GT、小于等于LE、 大于等于GE。 运算结果是特殊的常量,若关系成立,结果为0FFFFH:若关系不 成立,结果为0。 (3)逻辑运算 逻辑运算包括:与AND、或OR、异或XOR、非NOT。 逻辑运算按二进制位进行
3地址表达式 地址表达式由变量、常量、标号、寄存器的内容和相关运算符组成的有意义的式子 (1)段取代操作 段取代操作用于临时给变量或地址表达式指定段属性,即临时改变隐含的段属性 格式:段寄存器或段名:地址表达式 进行了段取代操作的地址表达式的偏移属性和类型属性不变,只改变地址表达式的段 属性。 例如,CS:[ BXIISI】,其段地址取CS;若无CS,段地址取自DS (2)属性指定操作 属性指定操作包括PTR和THS,用来明确指出或临时指定地址表达式的 类型属性。 (3)属性提取操作 属性提取操作可以获得变量、标号、过程名等的段、偏移及类型属性值 属性提取操作包括SEG、 OFFSET、TYPE、SIZE、 LENGTH5种
3.地址表达式 地址表达式由变量、常量、标号、寄存器的内容和相关运算符组成的有意义的式子。 (1)段取代操作 段取代操作用于临时给变量或地址表达式指定段属性,即临时改变隐含的段属性。 格式:段寄存器或段名:地址表达式 进行了段取代操作的地址表达式的偏移属性和类型属性不变,只改变地址表达式的段 属性。 例如,CS:[BX][SI】,其段地址取CS;若无CS,段地址取自DS。 (2)属性指定操作 属性指定操作包括PTR和THIS,用来明确指出或临时指定地址表达式的 类型属性。 (3)属性提取操作 属性提取操作可以获得变量、标号、过程名等的段、偏移及类型属性值。 属性提取操作包括SEG、OFFSET、TYPE、SIZE、LENGTH 5种
8.4伪指令 1.数据定义伪指令 数据定义伪指令包括DB、DW、DD、DQ、DT,用于定义变量及分配存储区。 格式:[变量]数据定义伪指令符操作数[, 功能:DB伪指令定义字节类型变量,DW伪指令定义字类型变量,DD 伪指令定义双字类型变量,DQ伪指令定义四字类型变量,DT伪指令定 义十字节类型变量
8.4 伪指令 1.数据定义伪指令 数据定义伪指令包括DB、DW、DD、DQ、DT,用于定义变量及分配存储区。 格式:[变量]数据定义伪指令符操作数[,…] 功能:DB伪指令定义字节类型变量,DW伪指令定义字类型变量,DD 伪指令定义双字类型变量,DQ伪指令定义四字类型变量,DT伪指令定 义十字节类型变量