森林物语 發表於 2020-6-8 09:10:00

汇编语言程序格式之伪操作

<p>汇编语言程序语句除指令以外还可以由伪操作和宏指令组成,它不像机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成如数据定义、分配存储区、指示程序结束等功能。</p>
<br>
<ul>
<li>
<h3 id="处理选择伪操作">处理选择伪操作</h3>
</li>
</ul>
<p><strong>用来告诉汇编程序选择哪一种指令系统</strong></p>
<p>.8086 选择 8086 指令系统<br>
.286 选择 80286 指令系统<br>
.286P 选择保护模式下的 80286 指令系统<br>
.386 选择 80386 指令系统<br>
.386P 选择保护模式下的 80386 指令系统<br>
.486 选择 80486 指令系统<br>
.486P 选择保护模式下的 80486 指令系统<br>
.586 选择 Pentium 指令系统<br>
.586P 选择保护模式下的 Pentium 指令系统</p>
<p>此类伪操作一般放在程序的最前面,若不给出,默认.8086</p>
<br>
<ul>
<li>
<h3 id="段定义伪操作">段定义伪操作</h3>
</li>
</ul>
<p>汇编程序在把源程序转换成目标程序时,必须确定标号和变量(代码段和数据段的符号地址)的偏移地址,并且需要把有关信息通过目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起,形成一个可以执行程序。</p>
<p>格式:<br>
segment-name SEGMENT [定位类型] [组合类型] [使用类型] [‘类别’]<br>
……<br>
…… ; 语句序列<br>
segment-name ENDS</p>
<p>(1)定位类型 align_type<br>
    PARA    BYTE    WORD    DWORD    PAGE<br>
(2)组合类型 combine_type<br>
    PRIVATE    PUBLIC    COMMON    STACK    AT   exp<br>
(3)使用类型 use_type<br>
    USE16    USE32<br>
(4) 类别 ‘class’</p>
<br>
<ul>
<li>
<h3 id="程序开始和结束伪操作">程序开始和结束伪操作</h3>
</li>
</ul>
<p>格式:</p>
<p>​                        开始:NAME module_name / TITLE text</p>
<p>​                        结束:END [ label ]</p>
<br>
<ul>
<li>
<h3 id="数据定义及存储器分配伪操作">数据定义及存储器分配伪操作</h3>
</li>
</ul>
<p>80x86提供了各种数据及存储器分配伪指令,这些伪指令在汇编程序对源程序进行汇编期间,由汇编程序完成数据类型定义及存储器分配等功能。</p>
<p>格式:</p>
<p>​                        [变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释]</p>
<p>助记符字段说明所用伪操作的助记符。 常用的有以下几种:</p>
<p><strong>DB(define byte)</strong>:DB伪指令用来定义字节,对其后的每个数据都存储在一个字节中。</p>
<p><strong>DW(define word)</strong>:DW伪指令用来定义字,对其后的每个数据分配2个字节(1个字)。</p>
<p><strong>DD(define doubleword)</strong>:DD伪指令用来定义双字,对其后的每个数据分配4个字节(2个字)。用DD存入地址时,第一个字为偏移地址,第二个字为段地址。</p>
<p><strong>DQ(define quadword)</strong>:DQ伪指令用来定义4字,即64位字长的数据,DQ之后的每个数据占用8个字节(4个字)。</p>
<p><strong>DT(define ten bytes)</strong>:DT伪指令用来为压缩的BCD数据分配存储单元,它虽然可以分配10个字节(5个字),但最多只能输入18个数字。</p>
<br>
<ul>
<li>
<h3 id="表达式赋值伪操作">表达式赋值伪操作</h3>
</li>
</ul>
<p>当程序中多次出现同一个表达式。可用赋值伪操作给表达式赋予一个名字。</p>
<p>格式:</p>
<p>​                        表达式名    EQU    表达式</p>
<p>如:DATA EQU 256 / DATA EQU </p>
<br>
<ul>
<li>
<h3 id="地址计数器与对准伪操作">地址计数器与对准伪操作</h3>
</li>
</ul>
<p>使用地址计数器保存当前正在汇编的指令的偏移地址。</p>
<p>格式:</p>
<p>​                        ORG   $+8    ;跳过8个字节的存储区<br>
​                        JNE   $+6    ;转向地址是 JNE 的首址 +6<br>
​                        JMP    $+2    ;转向下一条指令</p>
<p>ORG伪操作用来设置当前计数器的值。格式: ORG constant expression</p>
<p>EVEN伪操作使下一个变量/指令开始于偶数字节。</p>
<br>
<ul>
<li>
<h3 id="基数控制伪操作">基数控制伪操作</h3>
</li>
</ul>
<p>汇编程序默认10进制数,为此。当使用其他基数表示的常数时,需要专门标记。</p>
<p>格式:</p>
<p>​                        .RADIX expression</p>
<p>如:.RADIX16</p>
<br><br><br>
来源:https://www.cnblogs.com/axxio/p/13063720.html
頁: [1]
查看完整版本: 汇编语言程序格式之伪操作