2、数据定义伪指令 ◇由数据定义伪指令DB或者Dw后面的操作数确定变量 的初值,常用的有以下几种形式: ◆常数或数值表达式 ◆ASCI码字符串。 ◆♀表示定义的变量无确定。可用DS预留存储空间(见后) 或用 EQU, DATA定义一个存储单元地址见后) ◇汇编程序中的常数,可采用不同的数制和不同表示方法: ◆十进制数:数字的后面加一个字母“D”( Decimal,表 示是十进制数;或者什么也不加,默认为是十进制数。 ◆二进制数:数字的后面加一个字母“B” Binary),如 10101001B
7:59:36 2、数据定义伪指令 由数据定义伪指令DB或者DW后面的操作数确定变量 的初值,常用的有以下几种形式: 常数或数值表达式。 ASCII码字符串。 ? 表示定义的变量无确定值。可用DS预留存储空间(见后) 或用EQU, DATA定义一个存储单元地址(见后) 15 04:34:02 汇编程序中的常数,可采用不同的数制和不同表示方法: 十进制数:数字的后面加一个字母“D”(Decimal),表 示是十进制数;或者什么也不加,默认为是十进制数。 二进制数:数字的后面加一个字母“B”(Binary),如 10101001B
2、数据定义伪指令DB,DW 十六进制数:数字后面加一个字母“H”( Hexadecimal), 而且,当十六进制数字不是以数字0~9开始,而是以 字母(A~F)开头时,前面要再加一个前导数字0,这是 为了在进行汇编时,以区别是数字,不是符号名。 ◆ASCI常数:应将字符放在单引号中,例如‘A’,“8′等。 ◆汇编语言语句中表达式为数值表达式,由数值和运算 符组成,产生一个数值结果。运算符为算术运算符, 常用算术运算符有:十(加),-(减),*(乘),(除) ◆注意,作为操作数部分的项或项表,若为数值,其取值 范围为00~0FFH(对DB或0~0 FFFFH对DW)
7:59:36 2、数据定义伪指令 十六进制数: 数字后面加一个字母“H” (Hexadecimal), 而且,当十六进制数字不是以数字0~9开始,而是以 字母(A~F)开头时,前面要再加一个前导数字0,这是 为了在进行汇编时,以区别是数字,不是符号名。 ASCII常数: 应将字符放在单引号中, 例如‘A’,‘8’等。 16 04:34:02 汇编语言语句中表达式为数值表达式, 由数值和运算 符组成, 产生一个数值结果。运算符为算术运算符, 常用算术运算符有: 十(加), –(减), *(乘), /(除)。 注意, 作为操作数部分的项或项表, 若为数值, 其取值 范围为00~0FFH(对DB)或0~0FFFFH (对DW) 。 DB, DW
49.1伪指令 3、等值伪指令EQU( Equate) 标号EQU表达式 功能:将语句操作数值赋于本语句标号。格式中表达式 可以是一常数、符号、数值表达式或地址表达式等。 若源程序中需多次引用某一表达式,则可用EQU伪指令 给其赋一个标号(名字,在以后的代码中,可用该标号来 代替上述表达式,从而使程序更加简洁,便于阅读。 如欲改变表达式的值,也只需在EQU指令处修改一次, 而不必修改多处,使程序易于调试、修改和维护, 注意:此伪指令中的标号后面不能加冒号“:
7:59:36 4.9.1 伪指令 3、等值伪指令EQU(Equate) 标号 EQU 表达式 功能: 将语句操作数值赋于本语句标号。格式中表达式 可以是一常数、符号、数值表达式或地址表达式等。 若源程序中需多次引用某一表达式, 则可用EQU伪指令 给其赋一个标号(名字), 在以后的代码中, 可用该标号来 代替上述表达式,从而使程序更加简洁,便于阅读。 如欲改变表达式的值,也只需在EQU指令处修改一次, 而不必修改多处,使程序易于调试、修改和维护。 17 04:34:02 注意:此伪指令中的标号后面不能加冒号 “:
3、等值伪指令EQU( Equate)【例】 COLUMN EQU 32H ◇(该程序段稍改一下才适于 ROW EQU 68H BUEEER 2 51单片机) BUFFER EOU 40H ◇执行后,就把 COLUMN和 或用DATA伪指令 ROW的乘积放在了单元 MOV A#COLUMN MOV B #ROW BUFFER和 BUFFER+中。 MUL AB 只要改变 COLUMN和 MOV BUFFER. A ROW的值就可以计算不同 MOV(BUFFER+1, B 可用直接寻址40H,41H 数据的乘积。 ◇注意:在同一程序中,用EQU伪指令对标号赋值后, 该标号的值在整个程序中不能再改变
7:59:36 3、等值伪指令EQU(Equate) COLUMN EQU 32H ROW EQU 68H BUFFER DB ? BUFFER EQU 40H MOV A, #COLUMN MOV B, #ROW MUL AB MOV BUFFER, A MOV BUFFER+1, B ┊ 18 04:34:02 (该程序段稍改一下才适于 51单片机) 执行后, 就把COLUMN 和 ROW 的乘积放在了单元 BUFFER和BUFFER+1中。 只要改变COLUMN 和 ROW的值就可以计算不同 数据的乘积。 注意:在同一程序中,用EQU伪指令对标号赋值后, 该标号的值在整个程序中不能再改变。 【例】 或用DATA伪指令 可用直接寻址40H, 41H
3、等值伪指令EQU( Equate)【例】 COLUMN EQU 32H ◇在这里 BUFFER地址只能用 ROW EQU 68H BUFFER:DS2在数据段(存 DSEG AT0X40;数据段始于40H储器)里定义,数据段里不允许 BUFFER:DBS号2 用 BUFFER:DB0H定义 ◇若在代码段里定义 BUFFER CSEG AT0100h代码段起始地址(无论是用 BUFFER:DB0IH MOV A #COLUMN 还是用 BUFFER:DS2定义) MO B #ROW 在这里 BUFFER地址都不能 AB 被识别, BUFFER不能用作目 MOV BUFFER.A 的操作数地址,因不能向程序 MOV BUFFER+1. B 存储器里写数据,只能从程序 存储器读数据。 ◇注意:在同一程序中,用EQU伪指令对标号赋值后, 该标号的值在整个程序中不能再改变
7:59:36 3、等值伪指令EQU(Equate) COLUMN EQU 32H ROW EQU 68H DSEG AT 0x40 ;数据段始于40H BUFFER: DBS ? 2 CSEG AT 0100h ;代码段起始地址 MOV A, #COLUMN MOV B, #ROW MUL AB MOV BUFFER, A MOV BUFFER+1, B ┊ 19 04:34:02 在这里BUFFER地址只能用 BUFFER: DS 2在数据段(存 储器)里定义,数据段里不允许 用BUFFER: DB 01H定义, 若在代码段里定义BUFFER (无论是用BUFFER: DB 01H 还是用BUFFER: DS 2定义), 在这里BUFFER地址都不能 被识别,BUFFER不能用作目 的操作数地址,因不能向程序 存储器里写数据, 只能从程序 存储器读数据。 注意:在同一程序中,用EQU伪指令对标号赋值后, 该标号的值在整个程序中不能再改变。 【例】