3 1 2 用伪指令LABEL定义变量
格式: 变量名 LABEL BYTE/WORD/DWORD 例如: BUF LABEL BYTE DB 21 它等价于 BUF DB 21 3 1 3 用伪指令EQU定义变量 格式:变量名 EQU THIS BYTE/WORD/DWORDTHIS是定义任意类型算符,它同LABEL一样用于建立变量或标号类型属性,而其段属性为语句所在段的段地址,偏移属性为所在位置的下一个能分配到的可用偏移地址.例如: STACK SEGMENT DW 100 DUP(? TOP EQU THIS WORD(或TOP LABEL WORD) STACK END 变量TOP被定义为字类型,它的偏移量应为STACK段定义100个字后的下一个字的偏移量,它恰就是堆栈指针SP的初值,因此经常用这种方法为SP赋初值.
3 1 4 双重定义变量名利用隐含方式和显示方式的双重方式,可以对同一位置定义为双重变量.
格式 〈变量名〉 EQU THIS〈类型〉 〈变量名〉 DB/DW/DD… 例如: AB EQU THIS BYTE (或AB LABEL BYTE) AW DW 50 DUP(0)AW定义为字变量,在AW前使用了THIS BYTE,定义了一个字节类型变量,访问同一个位置,用AB按字节访问,用AW则按字访问.
3 2 变量的访问
3 2 1 变量名作为存储单元的直接地址
变量名用直接寻址时,变量的类型必须与指令的要求相符合. 例如:AB已定义字节变量,AW定义为字变量,用变量名作直接寻址形式如下: MOV AH,AB MOV AX,AW 3 2 2 用合成运算符PTR临时改变变量类型 接上例用 MOV CX,WORD PTR AB MOV CL,BYTE PTR AW 则可临时把AB变为字类型,AW变为字节类型,但段和偏移属性不变. 3 2 3 变量名作为相对寻址中的偏移量 例如: MOV AX,AB〔SI〕 MOV AX,AW[BX][SI] 在这里AB,AW分别表示它们的偏移量而不是它们所表示的数据,常用于数组或表格操作中,AB[SI]就表示AB数组中第SI个元素. 3 2 4 属性分离符
其中SEG和OFFSET用法和标号相同,分别表示取变量所在段的段地址和变量的偏移地址.而TYPE运算符,将回送该变量类型所表示的字节数. 例如:设AB为字节变量,AW为字变量,则: MOV AH,TYPE AB即MOV AH,1 MOV AX,TYPE AW即MOV AX,2
3 2 5 取变量数据项个数运算符LENGTH对于变量定义时使用DUP的情况,汇编程序将回送DUP前的重复次数,即分配给该变量的单元数,若表达式有多个DUP,则取第一个DUP项,其它情况则回送1. 例如:ARRAY DW 50 DUP(0)则 MOV CX,LENGTH ARRAY即MOV CX,50 ARRAY1,DW1,2,3 则 MOV CX,LENGTH ARRAY1 即MOV CX,1 可见LENGTH表示数组元素个数,而不管其类型.
3 2 6 取变量数据项长度算符SIZE
SIZE算符,汇编程序将回送分配给该变量的字节数,即 SIZE=LENGTH TYPE
例如: ARRAY DW 50 DUP(0) 则 SIZE ARRAY=50 2=100
要注意:对字符串变量求其长度,使用SIZE不能达到目的. 例如: ST DB 'ABCDEFG' 则 SIZE ST值为1而不是7,欲求字符串长可用COUNT EQU $-ST,则COUNT值为7,其中$为定义ST一串字符后下一个可用的偏移地址.
3 2 7 变量名仅对应数据区第一个数据项 例如: WORD DW 20 DUP(?) MOV AX,WORD;第一个元素送AX, MOV AX,WORD+38;第20个元素送AX. 其它符号
除标号和变量外,符号还可表示常量、段名、过程名、寄存器名和指令助记符等.
(1)符号常数常数也常以符号形式出现,使之更具有通用性且便于修改.例: COUNT EQU 100 则COUNT就表示常数100. (2)符号表示指令助记符.例: MOV EQU MOV则MOVE就表示指令MOV (3)符号表示寄存器,例:COUNT EQU CX则COUNT就代表寄存器CX. (4)符号作为段名,例: DATA SEGMENT - - - -- - - - - - - - - - - DATA ENDS DATA 是段名,引用DATA表示段地址. (5)符号作为过程名,例:SUBR PROC NEAR/FAR - - - -- - - - - - - - - - - SUB ENDP SUB为过程名,它同样具有段、偏移量和距离类型三个属性 .(6)符号作为宏指令名 宏定义格式宏指令名 MACRO [形式参数] - - - -- - - - - - - - - - - ENDM 宏调用格式: 宏指令名 [实参数] 每当引用宏指令名则汇编程序对宏调用作宏展开,就是用宏定义体取代源程序中的宏指令并用实参数取代宏定义中的形式参数
 
2/2 首页 上一页 1 2 |