李超

cc编程笔记本。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
标识符和表达式是程序设计经常用到的两个概念,在用高级语言编程的时候,如果程序要对某个变化的量进行处理时,通常要对该变化的量定义一个具有某种数据类型的符号名,用该符号名也就是使用了该变化量,在汇编语言中也是这样,不同的只是说明和引用的方式。

一 标识符
在汇编语言中,标号,内存变量名,子程序名和宏名等都是标识符,一般最多由31个字母,数字以及规定的特殊字符(? @ _ $)等组成,并且不能用数字开头,通常情况下汇编语言并不区分标识符中字母的大小写。

和高级语言的变量名一样,一般要求标识符的名字比较有意义,会改善程序的可读性,并且有助于对程序的理解,但是标识符不能是汇编语言的保留字,汇编语言的保留字主要是:指令助记符,伪指令定义符,寄存器名以及一些具有特殊含义的字符串等。

二 简单内存变量的定义
在编程时,往往要根据程序的需要定义一些内存单元。在高级语言中要给存储单元一个符号名,然后通过引用该符号名来访问其所对应的存储单元,而在汇编语言程序中要灵活一些,它可以给存储单元取符号名,也可以不取符号名。当给存储单元取符号名,则可通过该符号名来访问其对应的存储单元,当不给存储单元取符号名时,则可通过存储单元的偏移量来访问它。

在汇编语言中,常用的数据类型有字节,字和双字等。

1. 内存变量定义的一般形式
定义数据变量语句是在程序中经常使用的伪指令语句,其一般的格式为:

[变量名] 定义符 表达式1[, 表达式2] ;注释

(1) 变量名必须是一个合法的标识符 可以写,也可以不写(不写的时候只能通过内存单元的偏移量来访问)
(2) 数据定义符用于确定内存单元的数据类型 常用的定义符有 DB DW DD等
(3) 表达式是定义内存单元时的初值表达式 一个定义语句可以有多个初值表达式 各个表达式之间用,分隔开,如果某个存储单元没有初值也必须用一个问号?来表示
(4)在定义语句的后面可以书写注释内容 当然也是可选的

在定义变量时,虽然变量名是可选的,但一定要写,否则寻址很不方便(用偏移量肯定不如直接用标识符方便)


2 字节变量
定义字节变量的定义符是DB/BYTE,每个字节只占用一个字节单元。其中BYTE是MASM6.0及其以后的版本的数据类型说明符。
例如:
COUNTER DB 6
               DB 'A', 'D', 0Dh, '$'
TABLE      DB 1, 3, 5, 7, 9, 11

上面的定义语句经过汇编后产生的内存单元如下:

06

41

44

0D

24

01

03

05

07

09

0B


COUNTER指向第一个格子06,'A'的ASCII码是41,所以第二个内存单元是41,TABLE指向01的格子。
定义语句的第二行没有给出变量名,访问这些存储单元的时候可以用COUNTER向后偏移,或者用TABLE向前偏移。这点和高级语言不一样,高级语言要用某个标识符来说明变量,也必须用该变量名来访问某个存储单元。

用定义符DB还可以定义字符串,在定义字符串的时候,必须用单引号或双引号把所要的字符括起来,引号内的字符一次放在字节单元里。
比如:
MSG1 DB "I am a student."
汇编后产生的内存单元:
'I' ' ' 'a' 'm' ' ' 'a' ' ' 's' 't' 'u' 'd' 'e' 'n' 't'

(实际上上面的格子里都应该是ASCII码,这样写只是比较直观)
3. 字变量
定义字变量的定义符为DW/WORD,每个字占用连续的两个内存空间。
比如:
Word1    DW    89H,1989H, -1
              DW    0abcdH, ?, 0
内存分配如下:
89 00 09 89 FF FF CD AB -- -- 00 00


4. 双字变量
定义双字变量的定义符是DD/DWORD,每个双字变量占用四个内存空间。
比如:
DW1    DD    12345678H,?
DW2    DD    0abcd1243H
78 56 34 12 -- -- -- -- 43 12 CD AB

5. 多字变量
六字变量:DF
八字变量:DQ
十字变量:DT
posted on 2008-02-29 17:49  coderlee  阅读(1496)  评论(1编辑  收藏  举报