980 likes | 1.15k Views
第八讲 一、汇编语言语句格式 二、符号定义伪指令 三、数据定义伪指令 四、汇编语言数据 五、表达式与运算符 六、程序的段结构. 一、汇编语言语句格式. 汇编语言源程序 汇编程序目标程序. 汇编语言源程序的 基本组成单位 是语句 . 源程序中使用的语句有三种 : 指令语句、伪指令语句和宏指令语句 ( 或称宏调用语句 ). 第一节、汇编语言语句格式. 一、指令语句的一般格式如下: 标号:指令助记符 操作数 ;注释. 例如: 以下是含有 4 个字段的一条指令语句: LOP : MOV AX , 0000H ;将 AX 清零。
E N D
第八讲 一、汇编语言语句格式 二、符号定义伪指令 三、数据定义伪指令 四、汇编语言数据 五、表达式与运算符 六、程序的段结构
一、汇编语言语句格式 汇编语言源程序 汇编程序目标程序
汇编语言源程序的基本组成单位是语句. • 源程序中使用的语句有三种:指令语句、伪指令语句和宏指令语句(或称宏调用语句).
第一节、汇编语言语句格式 一、指令语句的一般格式如下: 标号:指令助记符 操作数 ;注释
例如: 以下是含有4个字段的一条指令语句: LOP:MOV AX,0000H;将AX清零。 例如:以下是一条单操作数指令语句 INC CX
二、伪指令语句格式 • 伪指令语句是指示汇编程序如何汇编源程序的命令语句,在汇编时,不产生语句代码,由汇编程序解释它的意义并立即完成相应的操作。 • 伪指令语句格式如下: 符号名 伪指令符 操作数 ;注释
例如:以下是一条伪指令语句 • VAR1 DB 12H;给变量分配一个字节单元,初值为12H
三、标识符 • 标识符是指令语句中标号和伪指令语句中的符号名的统称,其组成规则如下:
1.字符个数是1~31个 • 2.名字的第一个字符必须是字母、问号、或下画线(_)$ @?.等5种字符之一。 • 3.不得使用属于系统专用的保留字。保留字包括:中央处理器中各寄存器名,指令助记符,伪指令,各种运算符。
例如: • 标识符 ?ABC ——VAR .234 A2 • 非标识符:1ABC +VAR ADD 256
第二节、符号定义伪指令 • 一、等值语句 • 语句格式: • 符号 EQU 表达式 • EQU伪指令的作用是将表达式的值或表达式赋给它左边的符号。
例如:用符号表示常数、数值表达式 • NUM EQU 10H • CONT EQU 123+34-67 • VAR DB NUM • …MOV AX,NUM
例如:用符号代表地址表达式、变量名和标号 • ADR EQU ES:[BX][SI] • VB EQU DATA_BYTE+1 • LI EQU FAR PTR SUB1 • ……. • MOV ADR ,AL • ADD BL,VB • JMP LI
例如: • 用符号表示寄存器、指令助记符 • AREG EQU AX • M EQU MOV • …… • MOV AREG ,1234H • M CX, BX
注意: • 在一个源程序中,同一个符号不能用EQU伪指令重新定义. • 例如: • M EQU MOV • …M EQU MUL • 第二条语句在汇编时,会产生符号重新定义的语法错误.
二、等号语句 • 语句格式: 符号=表达式 • 等号语句可以重新定义符号
例如: CONT =10 M=MOV …… CONT =CONT+10 M=MUL
第三节、数据定义伪指令 • 数据定义伪指令语句格式如下; DB 变量名 DW 表达式1,表达式2 DD
例如: 在DATA1数据段中定义了3个变量: DATA1 SEGMENT VAR1 DB 10H VAR2 DW 1234H VAR3 DD 12345678H DATA1 ENDS
段属性 变量的三个属性:偏移量属性 类型属性 (1)段属性SEG 段属性表示变量存放在哪一个逻辑段中, 它是用变量所在的段的段基值表示的.
(2)偏移量属性OFFSET 该属性表示变量在逻辑段中相距段起始 地址的字节数。 上述段和偏移量两个属性就构成了变量 的逻辑地址。
(3)类型属性TYPE 该属性表示变量所占存储单元的字节个数。DB将变量定义为字节型(1个字节),DW将变量定义为字型(2个字节),DD将变量定义为双字型(4个字节)。
数据定义伪指令按照伪指令DB,DW和DD所确定的数据大小来分配相应数量的存储单元,同时给这些存储单元预置由对应表达式确定的初值。表达式 有如下几种情况: • 1.数值表达式 • 2.字符串表达式 • 3.?表达式 • 4.带DUP表达式
例如:DATA数据段中定义了字节、字、双字变量。例如:DATA数据段中定义了字节、字、双字变量。 DATA SEGMENT VARB1 DB 10H VARB2 DB 10,11,12 DB 0FFH,0 VARW DW 1234H,5678H VARD DD 12345678H DATA ENDS
34H VARBW 字 … 12H 10H VARB1 78H 字 VARB2 0AH 56H 0BH 78H VARBW 0CH 56H 双字 FFH 34H 12H 00H ….
例如:以下是3个字符串变量的定义。 DATA_S SEGMENT STRING1 DB ‘ABCD’ STRING2 DW ‘AB’,’CD’,’A’ STRING3 DD ‘AB’ DATA_S ENDS
44H 字 … 43H 41H STRING1 41H 字 42H 00H 43H 42H STRING3 44H 41H 双字 42H STRING2 00H 字 00H 41H …. STRING3 DD ‘AB’ STRING1 DB ‘ABCD’ STRING2 DW ‘AB’,’CD’,’A’
例如:有以下两个变量的定义: VAR_B DB ?,? VAR_W DW ?,? (不需要预设初值)
(4)带DUP表达式 数据定义伪指令语句格式如下: DB 变量名 DW 表达式1 DUP(表达式2) DD DUP可以嵌套 其中,表达式1是重复的次数 表达式2是重复数据的内容
例如:以下是带DUP表达式的变量定义: ARYB1 DB 10H DUP(2) ARYB2 DB 20H DUP(‘ABC’) ARYW DW 10H DUP(?)
… 02H ARYB1 ARYB1 DB 10H DUP(2) 02H 重复10H次,共10H单元 ….. 41H ARYB2 42H 重复20H次,共60H单元 43H ARYB2 DB 20H DUP(‘ABC’) … 43H 00H ARYW 重复10H次,共20H单元 …. ARYW DW 10H DUP(?) ….
————8086/8088CPU DUP操作符允许嵌套使用,即表达式2可以又是一个带DUP的表达式. 例如: ARY_B3 DB 10H DUP(6,3 DUP(5),7) 表示重复10H个数据序列”6,5,5,5,7”,共占用5*10H个字节单元.
第四节、汇编语言数据 1.数值常数 在源程序中,允许数值常数以不同的进制表示.汇编时,由汇编程序将所有的数值常数都转换成二进制表示的目标代码.
(1)二进制数 • 以字母B结尾,由0和1组成的数字序列. • 如10110100B.
(2)八进制数 • 以字母Q或O结尾、由0~7组成的数字序列. • 如146Q,543O.
(3)十进制数 • 由0~9组成的数字序列,结尾可带字母D也可不带字母。如278D,49。
(4)十六进制数 • 以字母H结尾、由0~9和A~F(a~f)组成的数字序列. • 要求十六进制常数的第一个数必须是0~9:如2A19H,0A1H,0FFFFH。
2.字符串常数 • 单引号或双引号引起来
3. 常数的使用 • (1)在指令语句的源操作数中作立即数。如: • ADD AL,0F5H • MOV AX,‘AB’ • MOV CX,’12’
(2)在指令语句中,可作为存储器操作数寻址方式中的位移量。如;(2)在指令语句中,可作为存储器操作数寻址方式中的位移量。如; • MOV AX,DS:[1000H] • ADD 10H[DI],CX • MOV AL,0ABH[BX] • SUB DX,1234H[BP][SI]
(3)在数据定义伪指令中,可作为存储单元的初值。如;(3)在数据定义伪指令中,可作为存储单元的初值。如; • DB 10H,0F4H • DW 1234H • DB ‘ABCD’
二、变量 变量的使用分两种情况; (1)在指令语句中 • 直接引用变量名对变量进行存取操作 • 位移量使用变量名
例如: VAR1 DB 0FFH VAR2 DB ? STRING DB ‘ABCD’ … MOV AL,VAR1 MOV VAR2,AL MOV BL,STRING+1
例如: VAR3 DB 10H DUP(1) VAR4 DW 10H,DUP(?) … MOV AL,VAR3[SI] MOV VAR4[BX][DI],DX
(2)在伪指令中的使用情况: • (偏移量属性和段属性) • 例如:假设DATA数据段的段基值为1000H,段中有以下数据定义语句:
DATA SEGMENT • VARB DB 10H,20H • VARW DW 0FF00H • ARRAY DB 10H DUP(?) • ADR1 DW VARW • ADR2 DD ARRAY • DATA ENDS
第五节、表达式与运算符 表达式的概念:由常数、变量?? 运算符有五种: • 算术运算符 • 逻辑运算符 • 关系运算符 • 数值返回运算符 • 属性与分离字节运算符
例如: • … • CON1 EQU -16+250*3 • CON2 EQU CON1/23 • ORG 20H • VAR2 DB 12,13,‘AB’ • VAR3 DB ? • … • MOV AX,VAR3-VAR2 • MOV BL,17+12*4
例如:在地址表达式中常用的形式是:变量名+/-数值量例如:在地址表达式中常用的形式是:变量名+/-数值量 • MOV AL, DA1+1 • AND DA1-1 ,0FH