灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:5024回复:0

[系统教程]经典汇编语言教程:4.5 标号、属性

楼主#
更多 发布于:2012-09-23 09:12
标号是一种特殊的标识符,它代表代码段中的某个具体位置,它主要用于表明转移的目标位置。其说明形式如下:
标号: 汇编语言指令 ;注释
解释:标号必须是一个合法的标识符,在其后面紧跟一个冒号":",冒号与汇编语言指令之间要有分隔符。通常用若干个空格、TAB来作分隔符,一般用分隔符使有关内容对齐为宜。


4.6内存变量和标号的属性

变量是一个符号地质,其值会根据其数据类型来对应从该地址以后的若干个存储单元中所存的数值。标号也是一个符号地址,它所对应的存储单元中存放的是指令代码。虽然它们在某些性质上有所不同,但它们都是一个符号地址,代表一个存储单元的地址,所以,它们都具有存储单元的属性。除此之外,它们还有各自特殊的属性。
下面介绍内存变量和标号的属性及其有关操作符。


4.6.1段属性操作符

段属性操作符(SEG)返回该标识符所在段的段地址。我们一般只会取内存变量所在段的段地址,而很少取标号所在段的段地址。
假设有下面变量定义:
SCORE DW ?
NAME DB 10 DUP(10) ;数据段的变量定义
MOV AX, SEG SCORE;代码段的指令
MOV BX, SEG NAME
由于SCORE和NAME在同一段中定义,所以,寄存器AX和BX的值是相等的。


4.6.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。

喜欢0 评分0
游客

返回顶部