加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

复习要点6:DB、DW伪指令与存储分配

(2012-04-16 21:10:33)
标签:

复习2012

分类: 微机

汇编语言程序设计理解:“数据定义伪指令举例”完整的存储分配示意图

   SEGDAT  SEGMENT AT 8000H
   DAT    DB  101,0F0H       ;存入65H,F0H
   EXPR    DB  2*8+7        ;存入17H     
   STR    DB  'Hello!'       ;存入6个字符的ASCII码值
   AB     DB  'AB'         ;存入41H,42H
   BA     DW  'AB'         ;存入42H,41H
   ABDD    DD  'AB'         ;存入42H,41H,00,00
   OFAB    DW  AB          ;存入变量AB的偏移地址
   ADRS    DW  STR,STR+3,STR+5  ;存入3个偏移地址
   TOTAL   DD  DAT          ;先存DAT的偏移地址,再存段地址
   SEGDAT  ENDS

以下是上述定义数据段的存储分配示意图:

     

偏移

存储单元

DAT

65H


0F0H

EXPR

17H

STR

‘H’

 

‘e’

 

‘l’

 

‘l’

 

‘o’

 

‘!'

AB

41H

 

42H

BA

42H

 

41H

ABDD

42H

 

41H

 

00H

 

00H

OFAB

变量AB偏移属性值低字节

 

变量AB偏移属性值高字节

ADRS

变量STR偏移属性值低字节

 

变量STR偏移属性值高字节

 

变量(STR偏移属性值+3)低字节

 

变量(STR偏移属性值+3)高字节

 

变量(STR偏移属性值+3)低字节

 

变量(STR偏移属性值+3)高字节

TOTAL

变量DAT偏移属性值低字节

 

变量DAT偏移属性值高字节

 

变量DAT段属性值低字节

 

变量DAT段属性值高字节

 

汇编语言语句的第一个组成部分是名字。在指令语句中,名字是一个标号。而伪指令语句中的名字则可以是变量名、段名、过程名。

1、指令语句中的标号实质上是指令的符号地址。并非每条指令语句必须有标号,但如果一条指令前面有一标号,则程序中其他地方就可以引用这个标号。标号有三种属性:段、偏移量和类型。
   (1) 标号的段属性是定义标号在程序段的段地址。当程序中引用一个标号时,该标号的段值应在CS寄存器中。
   (2) 标号的偏移量属性表示标号所在段的起始地址到定义该标号的地址之间的字节数。偏移量是一个16位无符号数。
   (3) 标号的类型属性有两种:NEAR和FAR。前一种标号可以在段内被引用,地址指针为2字节;后一种标号可以在其他段被引用,地址指针为4字节。如果定义一个标号时后跟冒号,则汇编程序确认其类型为NEAR。 

2、与指令语句中的标号不同,伪指令语句中的名字并不总是任选的,有些伪指令规定前面必须有名字,有些则不允许有名字,也有一些伪指令的名字是任选的。即不同的伪指令对于是否有名字有不同的规定。伪指令语句的名字后面通常不跟冒号,这是它和标号的一个明显区别。很多情况下伪指令语句中的名字是变量名。变量名代表存储器中一个数据区的名字。变量也有三种属性:段、偏移量和类型。
   (1) 变量的段属性是变量所代表的数据区所在段的段地址。由于数据区一般在存储器的数据段中,因此变量的段地址常常在DS和ES寄存器中。
   (2) 变量的偏移量属性是该变量所在段的起始地址与变量的地址之间的字节数。
   (3) 变量的类型属性有BYTE(字节)、WORD(字)、 DWORD (双字)、 QWORD (四字)、TBYTE(十字)等,表示数据区中存取操作对象的大小。 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有