80X86学习笔记常用伪指令语句

(1)符号定义语句

1.等价语句EQU

格式:

符号名 EQU 表达式

例:

COUNT EQU 100  ;  符号COUNT就代表常数100

BUFF_LEN EQU 4*COUNT  ;  COUNT是已定义的符号常数

HELLO EQU “HELLO WORLD!”

MOVE EQU MOV

COUNT EQU CX

用EQU可以用MOVE代替MOV,用COUNT代替寄存器CX.

注意:第一,等价语句不另外给符号分配存储单元;第二,等价语句定义的符号不能与其他符号相同,也不能被重新定义,否则汇编程序会认为出现符号重复定义错误。

2.等号语句(=)

等号语句用来定义符号常数、

格式:

符号名= 数值表达式

用符号语句定义的符号可被重新定义。

3.定义符号名语句

格式:

符号名 LABEL 类型

类型可以是BYTE WORD DWORD NEAR FAR等

该语句的功能是定义有符号名指定的符号,使该符号的段属性和偏移属性与下一个紧接着的存储单元的段属性和偏移属性相同,使该符号的类型为参数所规定的类型。

例:

BUFFER LABEL WORD

BUFF DB 100 DUP (0)

BUFFER的类型是WORD,段属性和偏移属性与BUFF相同。

例:

QUIT LABEL FAR

EXIT: MOV AH, 4CH

MOV AH, 4CH有两个标号QUIT和EXIT,但它们类型不同。

(2)段定义语句

为了与存储器的分段结构相对应,汇编语言的源程序也是由若干个段组成。

1.段开始和结束语句

格式:

段名 SEGMENT [定位类型][组合类型][‘类型’]

   ………

段名  ENDS

段名的命名方法与一般符号命名方法相同。

一个简单的数据段如下所示:

DSEG SEGMENT

         MESS DB ‘HELLO’, 0DH, 0AH, ‘$’

DSEG ENDS

承上:

CSEG SEGMENT

         MOV AX, DSEG

         MOV DS, AX

         MOV DX, OFFSET MESS

         MOV AX, 9

         INT 21H

         MOV AH, 4CH

         INT 21H

CSEG ENDS

2.段使用设定语句

汇编程序根据段开始语句和段结束语句判断出源程序的段划分,为了有效地产生目标代码,汇编程序还要了解各程序段与段寄存器的对应关系。段寄存器与程序段的对应关系由段设定语句说明。

ASSUME 段寄存器名:段名[,段寄存器:段名…]

段寄存器名可以是CS, DS ES,SS。

例:

CS对应CSEG段,DS对应DSEG段。

ASSUME CS: CSEG, DS: DSEG

ASSUME伪指令中的段名域也可以是一个特别的关键字NOTHING,它表示某个段寄存器不再与任何段有对应关系。

DESEG1 SEGMENT

             VARW DW 12H

DESEG1 ENDS

DSEG2 SEGMENT

            XXX DW 0

            YYY DW 0

DSEG2 ENDS

CSEG SEGMENT

ASSUME CS: CSEG, DS:DSEG1, ES:DSEG2

MOV AX, DSEG1

MOV DS, AX

MOV AX, DSEG2

MOV ES, AX

MOV AX, VARW

MOV XXX, AX

ASSUME DS: DSEG2, ES:NOTHING

MOV AX, DSEG2

MOV DS, AX

MOV AX, XXX

MOV YYY, AX

CSEG ENDS

3.ORG语句

汇编程序在对源程序汇编的过程中,使用地址计数器来保存当前正在汇编指令或变量的地址偏移。

格式:

ORG 数值表达式

例:

TESTSEG SEGMENT

ORG 100H

BEGIN: MOV AX, 1234H

             ORG 500H

VAR DW 1234H

      …….

TESTSEG ENDS

汇编语言中用“$”表示地址计数器的值。

例:表示跳过8个字节的存储区

ORG $+8

当$用在伪指令的参数中时,它表示地址计数器的当前值。

例:

ARRAY DW 1, 2, $+4, 3, 4, $+4

原文地址:https://www.cnblogs.com/seebro/p/2437472.html