《微机原理A》 第六讲:汇编语言的基本语法(二) 主讲老师:王克义
《微机原理A》 第六讲: 汇编语言的基本语法(二) 主讲老师:王克义
本讲主要内容 汇编语言的表达式 汇编语言程序的开发
• 汇编语言的表达式 • 汇编语言程序的开发 本讲主要内容
公 61汇编语言的表达式 1.表达式及分类 用伪操作符将操作对象组合起来即得到表达式, 单个操作对象也可称为表达式。表达式可作为指 令语句中的操作数或伪指令语句中的参数。按操 作性质的不同可将表达式分为四类: ①算术表达式 ②逻辑表达式 ③关系表达式 ④特殊表达式
6.1 汇编语言的表达式 1. 表达式及分类 用伪操作符将操作对象组合起来即得到表达式, 单个操作对象也可称为表达式。表达式可作为指 令语句中的操作数或伪指令语句中的参数。按操 作性质的不同可将表达式分为四类: ① 算术表达式 ② 逻辑表达式 ③ 关系表达式 ④ 特殊表达式
公 2表达式的操作顺序 表达式中常用的伪操作符按以下顺序依次优先处理: ①()(、[]、()(i) LENGTH、WDTH、SzE、MASK (il-(结构字段名操作符) (iv):(段超越前缀的操作符) (v)PRR、 OFFSET、SEG、TYPE、THs(vi)HGH、Low ②()+(正号)、-(负号) i)*、/ in)MOD、SHL、SHR (iv)+、 ③EQ、NE、LT、LE、GT、GE ④()NOT(i)AND in)oR、XOR ⑤ SHORT 例如,因为“HGH运算优先于“+”运算,所以, H|GH1234H+2=12H+2=14H H|GH(1234H+2)=HGH1236H=12H
2. 表达式的操作顺序 表达式中常用的伪操作符按以下顺序依次优先处理: ① (i) ()、 []、〈〉(ii) LENGTH、WIDTH、SIZE、MASK (iii) ·(结构字段名操作符) (iv) : (段超越前缀的操作符) (v) PTR、OFFSET、SEG、TYPE、THIS (vi) HIGH、LOW ② (i) + (正号)、- (负号) (ii) *、/ (iii) MOD、SHL、SHR (iv) +、 - ③ EQ、NE、LT、LE、GT、GE ④ (i) NOT (ii) AND (iii) OR、XOR ⑤ SHORT 例如,因为“HIGH”运算优先于“+”运算,所以, HIGH 1234H + 2 = 12H + 2 = 14H HIGH (1234H + 2) = HIGH 1236H = 12H
公 62汇编语言的伪指令说明符 1.数据定义存储单元分配) 数据定义说明符用于定义变量,也就是为变量分 配存储单元并可同时预置初始值,有DB、DW、 DD、DF、DQ、DT共6种说明符。 分别表示存储单元分配时以字节为单位、以字为 单位、以双字为单位、以3字(远字)为单位、以4 字为单位、以10字节为单位
6.2 汇编语言的伪指令说明符 1. 数据定义(存储单元分配) • 数据定义说明符用于定义变量,也就是为变量分 配存储单元并可同时预置初始值,有DB、DW、 DD、DF、DQ、DT共6种说明符。 • 分别表示存储单元分配时以字节为单位、以字为 单位、以双字为单位、以3字(远字)为单位、以4 字为单位、以10字节为单位
公 例如,在下述定义中, A DB 12H, BDW?,3456H C D 789ABCDEH DDB′A B C EDB′ABCD FDW′AB CD′ 上述各变量的存储情况如图74所示。显然, DB′AB′和DW′AB′的存储情况不同
例如,在下述定义中, A DB 12H, ? B DW ?, 3456H C DD 789ABCDEH D DB ′A′, ′B′, ′ C′, ′D′ E DB ′ABCD′ F DW ′AB′, ′CD′ 上述各变量的存储情况如图7.4所示。显然, DB′AB′和DW′AB′的存储情况不同
公 A12 B? C DE D[41 F42 BC 42 42 41 56 9A 43 3 44 34 78 43 图34变量在存储器中的存储情况
A 图3.4 变量在存储器中的存储情况 12 ? ? ? 56 34 B DE BC 9A 78 C 41 42 43 44 D 41 42 43 44 E 42 41 44 43 F
公 程序例 DATA SEGMENT TAB DW12,3,4,5,6 ENTRY EQU 3 DATA ENDS CODE SEGMENT ASSUME CS: CODE DS: DATA L: MOV AX DATA MOV DS, AX MOV BX OFFSET TAB ADD BX. ENTRY MOV AX, TAB+3 MOV AX, [Bx] CODE ENDS END L 上述程序执行后,AX=
DATA SEGMENT TAB DW 1,2,3,4,5,6 ENTRY EQU 3 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA L: MOV AX, DATA MOV DS, AX MOV BX,OFFSET TAB ADD BX, ENTRY ; MOV AX, TAB+3 MOV AX, [BX] CODE ENDS END L 上述程序执行后,AX= 程序例
公 2符号定义表达式赋值) 有=、E0U、PRGE共3种说明符,含义分别是被赋 予、被赋予、取消(释放)。 (1)格式:符号名=表达式 将表达式的值赋予符号名,以后即可用该符号名代表此表达 式的值。 (2)格式:符号名EQU表达式或另一组标识符 将表达式的值或另一组标识符赋予符号名,以后即可用该符 号名代表此表达式的值或代替另一组标识符。 (3)格式: PURGE符号名1[,符号名2[,…] 取消(释放)被EU定义的符号名,以后即可用EQU对该符号名 再赋予不同的含义
2. 符号定义(表达式赋值) • 有 =、EQU、PURGE共3种说明符,含义分别是被赋 予、被赋予、取消(释放)。 (1)格式: 符号名 = 表达式 将表达式的值赋予符号名,以后即可用该符号名代表此表达 式的值。 (2) 格式: 符号名 EQU 表达式或另一组标识符 将表达式的值或另一组标识符赋予符号名,以后即可用该符 号名代表此表达式的值或代替另一组标识符。 (3) 格式: PURGE 符号名1[,符号名2[,…… ]] 取消(释放)被EQU定义的符号名,以后即可用EQU对该符号名 再赋予不同的含义
公 3.段定义 段定义说明符有3种,即 SEGMENT、ENDS和 ASSUME 含义分别是段开始、段结束、指定段寄存。 (1)格式:段名 SEGMENT[定位类型][组合类型][类别] 从段名代表的段基值开始定义一个段。其中的定位类 组 合类型和类别一般都可省略,若不省略时各项的顺序不能变 ①定位类型:连接时用于指定该段应开始于什么样的物理地 址。可选择下列4种之一 BYTE:从当前可用字节地址 XXXXXXXXXXXXXXXX XXXX(任一地址)开始; W0RD:从当前可用的字地址 XXXX XXXX XXXXXXXX XX0(偶数地址)开始; PARA(缺省):从当前可用地址 XXXXXXXXXXXX XXXX000016倍数)开始 PAGE:从当前可用的页地址 XXXX XXXX XXXX00000(256的倍数)开始 其中,1节( paragraph)为16字节,1页为16节即256字节
3. 段定义 • 段定义说明符有3种,即SEGMENT、ENDS和ASSUME, 含义分别是段开始、段结束、指定段寄存器。 (1)格式: 段名 SEGMENT[定位类型][组合类型][类别] 从段名代表的段基值开始定义一个段。其中的定位类型、组 合类型和类别一般都可省略,若不省略时各项的顺序不能变。 ① 定位类型: 连接时用于指定该段应开始于什么样的物理地 址。可选择下列4种之一: BYTE:从当前可用字节地址XXXX XXXX XXXX XXXX XXXX(任一地址)开始; WORD:从当前可用的字地址XXXX XXXX XXXX XXXX XXX0(偶数地址)开始; PARA(缺省):从当前可用地址XXXX XXXX XXXX XXXX 0000(16倍数)开始; PAGE:从当前可用的页地址XXXX XXXX XXXX 0000 0000(256的倍数)开始。 • 其中,1节(paragraph) 为16字节,1页为16节即256字节