一共有七个属性操作符,每个属性操作符都有固定的意思。
变量是一个符号地址,其值会根据其数据类型来对应从该地址以后的若干个存储单元中所存的数值。标号也是一个符号地址,它所对应的存储单元中存放的是指令代码。虽然它们在某些性质上有所不同,但它们都是一个符号地址,代表一个存储单元的地址,所以,它们都具有存储单元的属性。除此之外,它们还有各自特殊的属性。
下面介绍内存变量和标号的属性及其有关操作符。
1、段属性操作符
段属性操作符(SEG)返回该标识符所在段的段地址。我们一般只会取内存变量所在段的段地址,而很少取标号所在段的段地址。
假设有下面变量定义:
SCORE DW ?
NAME DB 10 DUP(10) ;数据段的变量定义
…
MOV AX, SEG SCORE ;代码段的指令
MOV BX, SEG NAME
由于SCORE和NAME在同一段中定义,所以,寄存器AX和BX的值是相等的。
2、偏移量属性操作符
偏移量属性操作符(OFFSET)返回该标识符离它所在段的段地址有多少字节。一般情况,程序员只会取内存变量的偏移量,而不太关心标号的偏移量。
假设有下面变量定义:
FIRST DD 12345678H, 0 ;数据段的变量定义
SCORE DW ?, 12H
NAME DB 10 DUP(10)
…
MOV AX, OFFSET SCORE ;代码段的指令
MOV BX, OFFSET NAME
…
假设FIRST是数据段的第一个被定义的变量名,它的偏移量为0,SCORE的偏移量为8,因为它要跳过二个双字,其它如此类推。
由于NAME在SCORE之后,且SCORE之后有二个字,占四个字节,所以,BX的值要比AX的值大4。
3 类型属性操作符
类型属性操作符(TYPE)是返回该变量所占字节数,或标号的“远”(FAR)、“近”(NEAR)类型。
标识符种类---TYPE的值
字节变量-----:1
字变量------:2
双字变量-----:4
近标号(NEAR)---:-1
远标号(FAR)-- --:-2
例如: PEASON STRUC
NO DD ?
NAME DB 10 dup (?)
DW 1
PEASOM ENDS
…
B1 DB 1, 2, 3
W1 DW 200 DUP(1,2,30 DUP(10,20)), 101H, -1
PEOPLE PEASON <>
按属性TYPE的含义,TYPE B1、TYPE W1和TYPE PEOPLE的值分别为:1,2和16。
4、长度属性操作符
长度属性操作符(LENGTH)是针对内存变量的操作符,它返回重复操作符DUP中的重复数。如果有嵌套的DUP,则只返回最外层的重复数;如果没有操作符DUP,则返回1。
如上例所示,根据属性LENGTH的含义,LENGTH B1、LENGTH W1和LENGTH PEOPLE的值分别为:1,200和1。
5、容量属性操作符
容量属性操作符(SIZE)也是针对内存变量的操作符。它的返回值按下列公式计算:
SIZE 变量 = (LENGTH 变量) × (TYPE 变量)
如上例所示,SIZE B1、SIZE W1和SIZE PEOPLE的值分别为:1,400和16。
6、强制属性操作符
在程序中,我们有时需要对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需要显式指定等,这时,我们就需要强制属性操作符PTR。该操作符的作用有点象C语言中的类型强制方法。
对于指令:MOV [BX], 1H,其目标操作数[BX]是寄存器间接寻址方式,它指向一个存储单元。在作传送操作时,是把“1H”扩展成8位作字节传送,还是扩展成16位作字传送呢?这就使该指令具有二义性,因为[BX]指向的存储单元可以字节或字的首地址。含有该指令的程序在汇编时,可能会产生警告或出错信息。
为了使指令中存储单元操作数具有明确的属性,我们可以使用强制属性操作符PTR。其一般格式为:
数据类型 PTR 地址表达式
其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等。
为了明确指令中存储单元的属性,可把指令“MOV [BX], 1H”可改写成:
MOV byte ptr [BX], 1H 或 MOV word ptr [BX], 1H
在指令中用操作符PTR强制后,不管其后的地址表达式原数据类型是什么,在本指令中就以PTR前面的类型为准。该强制属性只在本指令有效,是一种临时性的属性,它不会改变原内存单元的定义属性。
例如:
W1 DW 1234H, 5678H
B1 DB 2
DB 5
D1 DD 23456789H
…
MOV AX, word ptr b1 ;把B1开始的二个字节拼接成一个字,执行后,(AX)=0502H
MOV BH, byte ptr w1 ;把字W1的低字节传送给BH,执行后,(BH)=34H
MOV CH, byte ptr w1+1 ;把字W1的高字节传送给CH,执行后,(CH)=12H
MOV word ptr d1, 12H ;把双字D1的低字修改成0012H,执行后,(D1)=23450012H
上面指令中的强制属性是临时属性,它不能改变这些变量在定义时的永久属性。
7、存储单元别名操作符
由上一节的内容,我们知道:在程序中,如果需要以另一种数据类型来访问某一存储单元时,可用强制属性操作符PTR来实现。但如果在程序中要经常以某种其它的数据类型来访问该存储单元的话,那么,就必须在每次访问时都要加上强制属性操作符PTR。这样做虽然可行,但在编写程序时就显得比较麻烦。
为了克服上述不便,汇编语言提供了另一种操作符THIS,它为同一存储单元取另一别名,该别名可具有其自身的数据属性,但其段地址和偏移量是不变的。
操作符THIS的一般格式为:
THIS 数据类型
其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等。
例如:
WBUFFER EQU THIS WORD ;EQU是一个等价符号定义语句。
BUFFER DB 20 DUP(?)
这样就给同一片存储单元,取了二个具有不同数据类型的变量名。于是,在指令中,引用不同的变量名,就使用其不同的数据属性:
* 如果引用变量名WBUFFER,则是按“字”属性来访问;
*如果引用变量名BUFFER,则是按“字节”属性来访问。
如此一来,指令“MOV AX, word ptr BUFFER”和“MOV AX, WBUFFER”是等效的,所不同的是:当以“字”属性访问BUFFER存储区时,不必使用强制属性符PTR,而改用“字”属性变量WBUFFER即可。
温馨提示:内容为网友见解,仅供参考
汇编属性操作符是什么
长度属性操作符(LENGTH)是针对内存变量的操作符,它返回重复操作符DUP中的重复数。如果有嵌套的DUP,则只返回最外层的重复数;如果没有操作符DUP,则返回1。如上例所示,根据属性LENGTH的含义,LENGTH B1、LENGTH W1和LENGTH PEOPLE的值分别为:1,200和1。5、容量属性操作符 容量属性操作符(SIZE)也是...
汇编中属性操作符 ptr 的英文全称是什么?
pointer——指针
汇编语言常用指令
关系运算操作符: EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于);汇编语言中的表达式不能单独构成语句,只能是语句的组成部分;注意:语句中表达式的求值不是在语句执行时完成的,而是在对源程序进行汇编链接时完成的.所以,语句中各表达式的值必须在汇编或链接时就是确定的,也就是说,表达...
汇编语言中,如何进行强制类型转换?
为了使指令中存储单元操作数具有明确的属性,我们可以使用强制属性操作符PTR。其一般格式为:数据类型 PTR 地址表达式 其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等。mov byte ptr [bx],100这是字节数据 mov word ptr [bx],100这是字数据 mov dword pt...
汇编语言中:mov ax,0x00ff 就这一段中,什么是操作符,什么是操作数,什么...
操作符(Operator):mov 如同数学+ - 符号 操作数(operand):ax、0x00ff ax 目的操作数 0x00ff 源操作数 如同a*b中的a和b 操作码(opcode: operation code):mov ax,0x00ff 对应的计算机执行的二进制代码(一般十六进制表示)。立即数(immediate operand):0x00ff 初学汇编不用这么较真,...
汇编操作符:PTR是临时强制指定变量或标号的类型?
PTR是把TEST1开始的两个字节作为一个字来访问。不加PTR的话,编译器会热内TEST1的属性是byte型,编译出错
汇编语言学习笔记(四)——汇编语言格式与段
汇编代码由四个主要部分构成:标号与名称:用户自定义的标号,以英文冒号前的符号表示,最长可达31字节,编译时会被替换为地址。例如,'again'会被替换为其所在位置的地址。助记符:类似于伪指令,用于方便理解和定位,命名规则与标号相同。如数据段声明时的string。操作符与参数:这部分是汇编的核心,大...
PTR汇编指令
汇编语言通过特定方式来明确指令操作的维度。首先,寄存器可以明确指示操作类型。例如,`mov ax,1` 进行字操作,而 `mov al,1` 则为字节操作。在没有寄存器名的情况下,可以使用操作符 "ptr" 后跟 "word" 或 "byte" 来指定内存单元长度,如 `mov word ptr ds:[0],1` 用于字操作,`mov byte...
汇编,TYPE,SIZE,LENGTH
那几个都是数值回送操作符。这些操作符把一些特征或存储器地址的一部分作为数值回送。(1)TYPE格式:TYPE expression如果该表达式是变量,则汇编程序将回送该变量的以字节数表示的类型:DB(字节)为1,DW(字)为2,DD(双字)为4,DF(六字节的字)为6,DQ(4字)为8,DT(10个字节)为10。如果表达式是标号,则汇编程序将回...
汇编中DUP和EQU指令的含义是什么?
DUP是伪指令,EQU是等于指令。dup是一个操作符,在汇编语言中同db、dw、dd等一样,也是由编译器识别处理的符号。是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复。EQU 伪指令把一个符号名称与一个整数表达式或一个任意文本连接起来。