常量
常量是指在汇编阶段便已经确定的值,这个值是在指令中的不在存储器中,而变量实在程序运行中才能确定这个变量的值。
汇编语言中的常量的表达形式
- 常数:直接给出数
- 字符和字符串:ascii字符
- 符号常量:用标识符代替数值
- 数值表达式:经运算得到的数值,每项都要是常量
使用常数表示常量
常数可以有以下几种形式
- 使用二进制表示:使用二进制表示时后面需要带上单位B eg:01110001B
- 使用十进制表示:使用十进制表示时后面即可带D表示单位也可以什么都不带 eg:12 12D
- 使用十六进制表示:表示从0->9和a->f来进行表示,在后面需要带上单位H,还有需要注意的如果第一个是字母,我们需要在字母的前面带上0,防止和寄存器的名字相同产生二义性 eg:32H 0aH
使用字符和字符串表示常量
这里的每个字符都要是ascii,下面举几个例子
eg:
'a'
'b'
"u"
'abdns'
'sahds'
"dsdf"
可以看到我们使用单引号或双引号来包含字符和字符串,使用单引号和双引号的效果是相同的。
使用符号常量来表示常量
我们可以使用下面几种方法来定义一个符号常量
- 符号名 = 数值表达式
- 符号名 equ 数值表达式
- 符号名 equ <字符串>
我们使用这三种方式来定义符号常量
a = 1
a equ 1
a equ <hello world>
使用数值表达式表示常量
可是使用运算符加减乘除来连接几个常量构成数值表达式来表示常量
变量
表示在程序的运行中才能确定的值,和常量的保存在指令中不同,变量保存在存储器中,因此变量是可以改变的。
变量定义的格式
变量名 变量定义伪指令 初值表
变量名:表示申请空间的标识符,是首元素的逻辑地址
变量定义伪指令:通常有 byte word dword等来表示这个变量的类型
初始表:变量的定义便是申请一段存储空间,使用初始表来对申请的这段空间进行初始化
变量定义的作用:从存储器申请一定的空间,还可以对存储空间进行初始化,而且变量名表示这个申请空间的逻辑地址,这段申请的空间是在数据段进行申请的。
下面我们是用byte伪指令进行定义变量
msg byte 1,2,3h
msg byte 10 dup(1)
msg byte 10 dup('a')
msg byte 10 dup(?)
msg byte ?
msg byte 2 dup(1,2 dup(1)),1
我们还可以使用word和dword来定义变量,这三种定义变量是相似的,只是byte伪指令表示是字节来进行定义变量的,word和dword是字和双字来进行定义的。
变量的应用
存储器的最小单位是位,每个字节占八位,存储器是按照字节进行编址的,因此每个字节是一个存储单元,当我们存储一个byte类型的数据时,可以直接将一个数据存入内存中,但是如果我们存入的是一个word类型的数据时,便会有两种情况,可以将数据的高位存入高地址,低位存入低地址,我们称为小端方式。如果将数据的高位存入低地址,数据的低位存入高地址,这样我们称之为大端方式。
我们的X8086系列的存储器是使用小端方式存储的。
变量的地址属性及地址操作符
变量的地址属性表示逻辑地址,逻辑地址是由段基地址和偏移地址组成的,通过地址操作符获得变量的地址属性值。