📄 chapter4.htm
字号:
<blockquote>
<p align="left"><font face="宋体" color="#FFFFFF"><big><big>伪指令:汇编程序在汇编期间处理的操作。</big></big></font></p>
</blockquote>
<p align="left"><font face="宋体" color="#FFFFFF"><big><big>一、指令集选择伪指令</big></big></font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">.8086 .286
.286P .386 .386P .486 .486P</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">.8087 .287
.387</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">二、表达式赋值伪指令</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1、EQU</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: 符号名
EQU 表达式</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:</font></p>
<blockquote>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">MAX_VAL EQU
100</font></p>
</blockquote>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2、=</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: 符号名 =
表达式</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:</font></p>
<blockquote>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">MIN_VAL = 10</font></p>
</blockquote>
</blockquote>
<p align="left"><img src="ii1.gif" alt="ii1.gif (154 bytes)" width="34" height="34"><font
FACE="宋体" size="5" color="#FFFFFF">“EQU”与“=”的区别:</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">EQU不允许对同一个符号名进行重复赋值。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3、PURGE</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">解除赋值和宏定义伪指令</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: PURGE
符号名/宏名</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">三、定义存储单元伪指令</font></p>
<blockquote>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">DB---定义一个字节单元</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">DW---定义一个字单元</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">DD---定义一个双字单元</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">DQ---定义一个四字单元</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">DT---定义一个十字节单元</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: [变量名]
DB 变量初值</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> VAL1 DB
12H,34H</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> VAL2 DW
1234H</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1)单元初值为“空”的表示方法</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">使用“?”来代替具体的初值。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> VAL3
DB ?</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2)多个单元的定义</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: [变量名]
DB 单元个数 DUP(初值)</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> VAL4 DB 5
DUP(0)</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> VAL5 DW 3
DUP(?)</font></p>
</blockquote>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">四、指明存储单元类型伪指令</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1、指明数据类型</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">BYTE 、 WORD 、DWORD</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> MOV BYTE
PTR [BX],0</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2、指明地址类型</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">SHORT 、 NEAR 、 FAR</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> CALL FAR
PTR SUBR1</font></p>
</blockquote>
</blockquote>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">五、过程定义伪指令</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式:</font></p>
<blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFF00">过程名 PROC
NEAR/FAR</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">...</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">过程名 ENDP</font></p>
</blockquote>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">
当过程的定义和调用在同一个段中时,使用NEAR属性,当过程的定义和调用不在同一个段中时,使用FAR属性。</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">六、段定义伪指令</font></p>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">一)完整段定义</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1、格式:</font></p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFF00">段名 SEGMENT [定位类型]
[组合类型] [类别]</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">...</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">段名 ENDS</font></p>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2、定位类型:段从具有何种特征的物理地址处开始。
</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1)PARA---隐含类型,段从小段边界(PA能被16整除)开始。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2)PAGE---段从页边界(PA能被256整除)开始。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3)WORD---段从字边界(偶数地址)开始。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">4)BYTE---段可以从任何地址开始。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3、组合类型/连接类型:不同程序模块中的相同名字的段以何种方式连接。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1)PUBLIC---几个段首尾相连。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2)COMMON---几个段从共同的起始地址开始覆盖。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3)STACK---表明该段为堆栈段,系统对SS和SP赋值。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">4)AT 表达式---利用表达式指明段地址,偏移地址为零。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">5)MEMERY---与PUBLIC相同。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">
若在段的定义中未指明组合类型,则表示该段为独立的段,不与任何的其他分段连接。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3、类别:具有相同类别名字的段放在连续的存储空间。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式:
‘类别名’</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如,代码段均用‘CODE’。
</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">4、指定分段寄存器伪指令</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: ASSUME
段寄存器:段名/组名</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如: </font></p>
<blockquote>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">ASSUME CS:CODE,DS:DATA</font></p>
</blockquote>
</blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">5、组说明伪指令</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: 组名 GROUP
段名1,段名2,...</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">
将指定的几个分段分配在一个物理段的区域之内(64KB)。它们可以共用一个段寄存器,该寄存器通过组名由ASSUME指定。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">二)简化段定义</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">
只能用于MASM5.0以上版本,不能用于*.COM文件。便于汇编语言模块与其他语言模块的连接。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1、指定段次序</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式:DOSSEG</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">
用于主模块前面,各个分段在内存中的顺序按照DOS段次序约定排列。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2、指定内存模式</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: .MODEL
模式类型</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">指定使用的数据段和代码段的个数和长度。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">TINY---所有的段都在一个物理段区域之内,只有一个段,整个文件最大长度为64KB。即*.COM格式。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">FLAT---32位操作系统模式,只有一个段,但段的最大长度为4GB。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">SMALL---小模式。一个数据段,一个代码段。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">MEDIUM---中模式。一个数据段,多个代码段。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">COMPACT---压缩模式。多个数据段,一个代码段。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">LARGE---大模式。多个数据段,多个代码段。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">HUGE---巨模式。多个数据段,多个代码段。并且允许使用大于64KB的数据语句。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3、堆栈段语句</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式: .STACK
[字节长度个数]</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">隐含段名为@STACK,定位类型为PARA</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">组合类型为STACK,类别标志符为‘STACK’</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">隐含长度为1024字节。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">4、代码段语句</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">格式:.CODE [名字]</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">只有一个代码段时,隐含段名为@CODE,定位类型为WORD,</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">组合类型为PUBLIC,类别标志符为‘CODE’</font></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -