汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终为CPU
所执行。而伪指令没有对应的机器指令,最终不被CPU所执行,
它只是用来告诉编译器进行相关的编译工作。
看下面代码:
assume cs:codesg
codesg segment
MOV AX, 0123H
MOV BX, 0456H
ADD AX, BX
ADD AX, AX
MOV AX, 4C00H
INT 21H
codesg ends
end
1.
xxx segment
:
:
:
xxx ends
segment 和ends是一对成对使用的伪指令,这是在写可被编译器的汇编程序时,必须要用到
的一对伪指令。segment和ends的功能是定义一个段,segment 说明一个段开始,ends 说明
一个段结果。 一个段必须有一个名称来标识,使用格式为:
段名 segment
:
:
段名 ends
看上面代码, 定义了一个名称为codesg的段.
2. end
end 是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令
end,就结束对源程序的编译,所以,在我们写程序的时候,如果程序写完了,要在结尾
处加上伪指令end.否则,编译器在编译程序时,无法知道程序在何处结束。
3. ASSUME
这条伪指令的含义为“假设”它假设某一段寄存器和程序中的某一个用segment...ends
定义的段相关联。通过assume说明这种关联,在需要的情况下,编译程序可以将段寄存
器和某一个具体的段相联系。用assume将有特定用途的段和相关的段寄存器关联起来。
看上面代码 codesg段与cs段寄存器关联了(assume cs:codesg), 根据cs段寄存器的功能可以知道codesg就是代码段
用法:ASSUME CS:段名, DS:段名, SS:段名, ES:段名
3 标号
汇编源程序中,除了汇编指令和伪指令外,还有一些标号,比如“codesg"。一个标号指代
了一个地址。比如 codesg在segment的前面,做为一个段的名称,这个段的名称最终将被编
译、连接程序处理为一个段的段地址。