assume
作用:
- 编写程序,需要经过编译软件,经过编译后,才形成机器码,再去控制CPU。但对于assume语句,并不生成机器码。因此,代码中仍必须有给段寄存器的操作。
- assume对除了CS以外的其他段寄存器,仅仅只是关联了段名,以便在访问段内变量时程序可以知道用哪个段寄存器,并没有在程序加载时将段地址装入段寄存器。
换句话说,assume的作用是让编译器知道在代码段中使用的变量来自于哪个段,从而可以利用段寄存器寻址。而将段地址装入段寄存器的任务仍然要在代码中实现。
db,dw,dd
作用:
db定义字节类型变量,一个字节数据占1个字节单元
dw定义字类型变量,一个字数据占2个字节单元
dd定义双字类型变量,一个双字数据占4个字节单元
segment系列指令
定义格式:
segment_name segment [定义类型] [组合类型] [类别名]
… ;这里写代码
segment_name ends
作用:
segment是段,是段定义的伪指令
1.定位类型
指明段开始的边界,如para,它使段定位在小段的边界,段首地址正好能被16整除,定位类型未指明时默认为para。
段的定位类型又4种,分别是:
(1)page(页起始),起始地址以00H结尾,能被256整除
(2)para(节起始),起始地址以0H结尾,能被16整除
(3)word(字起始),起始地址末尾为0,是偶地址
(4)byte(字节起始),起始地址为任意边界
2.组合类型
决定本段是否要和其他段组合在一起,组合类型有:stack, common, public
3.类别名
连接时用于相关段组合在一起,如代码段 ’code’ ,数据段 ‘data’ ,堆栈段 ‘stack’
变量定义命名方法
格式:
变量名 db/dd/dw 数据
(代码中可使用)
type 变量名
seg 变量名
size 变量名
offset 变量名
作用:
type可以获取变量的类型,如果是db定义的则为1,dw定义的则为2,以此类推。
seg可以获得变量的段地址
offset可以获得变量的偏移地址
length对于变量中使用DUP的情况,返回分配的单元数(例如 3 dup(?))则返回3
size为 type*length
$
$为地址计数器伪指令,用于表示下一个可用单元的地址
equ
格式:
<符号名> equ <表达式>
作用:
equ为等值伪指令,用于给符号定义一个值,别的符号名、表达式或指令助记符
struc
格式:
结构体名 struc
成员名 dw/dd/db 默认值
结构体名 ends
作用:
定义结构体
例子
dup
dup是一个操作符,用来进行数据重复