资源描述:
《变量和标号的属性》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、变量和标号的属性 1.标号由一组放在语句前头的标识符后跟一个“:“来定义,用以指定相应程序段在内存的首地址位置。 任何一个标号一经定义就具有3种属性: 标号的段地址; 标号的偏移地址; 标号的类型;1)NEAR--该标号只能在段内转移;2)FAR--在段间使用; 标号和名字一经定义便具有以下两类三种属性: ①段值 标号和名字对应存储单元的段地址 ②偏移值 标号和名字对应存储单元的偏移地址 ③类型 标号、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间 2.变量的属性: 变量一经定义,通常具有5种
2、属性(即特征): 1)变量的段地址(SEG);2)变量的偏移地址(OFFSET); 3)变量类型(TYPE):所定义变量所占字节数;由DB、DW、DD、DQ、DT伪指令定义的变量类型分别为1,2,4,8,10。前3种类型又分别称为BYTE类、WORD类、DWORD类。 4)变量长度(LENGTH):所定义变量的个数; 5)变量大小(SIZE):定义中分配给同一变量名所有变量的总字节数; 变量定义实质上是对数据区内存的一种安排,这种安排对汇编语言编程是非常重要的,它是在汇编过程中完成的。编写程序时,直接引用变量的名字,而汇编过程中,对
3、任何变量的引用,都自动转换为变量相应的偏移地址。 变量名的类型可以是BYTE(字节)、WORD(字)和DWORD(双字)等 地址操作符 取得名字或标号的段地址和偏移地址两个属性 []将括起的表达式作为存储器地址 $当前偏移地址 :采用指定的段地址寄存器 OFFSET名字/标号 返回名字或标号的偏移地址 SEG名字/标号 返回名字或标号的段地址 org$+10 arraydb45,45h .code movax,segarray movds,ax movbx,offsetarray ;等价于leabx,arra
4、y movcl,array+4 ;等效于movcl,array[4] movax,es:[2000h] moval,byteptrw_var;w_var是一个字变量 jmpfarptrn_label;n_label是一个标号 使用PTR操作符,可以临时改变名字或标号的类型 THIS类型名 利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指定的类型 b_varequTHISbyte ;按字节访问变量b_var,但与w_var的地址相同 w_vardw10dup(0);按字访问变量w_var f_jumpequTH
5、ISfar ;用f_jump为段间转移(f_jumplabelfar) n_jump:movax,w_var ;用n_jump为段内近转移,但两者指向同一条指令 LABEL伪指令的功能等同于“EQUTHIS” SHORT标名 指定标号作为-128~+127字节范围内的短转移 jmpshortn_jump 当然,如果标号实际上超出了这个范围,则出错。 TYPE名字/标名 返回表明名字或标号类型的一个字量数值 对字节、字和双字变量依次返回1、2和4; 对短、近和远转移依次返回ff01h、ff02h和ff05h movax
6、,TYPEw_var;汇编结果为movax,2 movax,TYPEn_jump ;汇编结果为movax,0ff02h(near标号) 操作符SIZEOF返回整个变量占用的字节数 LENGTHOF返回整个变量的数据项数(即元素数) SIZEOF=LENGTHOF×TYPE .modelsmall .stack .data v_byteequthisbyte ;v_byte是字节类型,与变量v_word的地址相同 v_worddw3332h,3735h ;v_word是字类型的变量 targetdw5dup(20h)
7、 ;分配数据空间2×5=10字节 crlfdb0dh,0ah,’$’ flagdb0 n_pointdwoffsets_label ;取得标号s_label的偏移地址 例:属性及其应用 .code .startup moval,byteptrv_word ;用PTR改变v_word的类型,否则类型不匹配 decal movv_byte,al ;对v_word的头一个字节操作,原为32H、现为31H n_label:cmpflag,1 jzs_label;flag单元为1转移 incflag jmpshortn_
8、label;进行短转移 s_label:cmpflag,2 jznext;flag单元为2转移 incflag jmpn_point ;段内的存储器间接寻