汇编语言源程序中以语句表示指令,语句有三种基本类型:

  1、指令:汇编后形成一条机器语言指令,它们之间是一一对应的,在程序执行时指令得以执行。

  2、伪指令:只是告诉汇编程序如何进行汇编,汇编后没有生成机器语言指令,他在程序汇编时得以执行。

  3、宏指令:它是由用户自己定义的指令,由指令和伪指令构成,他在程序汇编进行时宏展开,以相应的指令和伪指令替代宏指令。

1/1、汇编语言中语句的组成

  汇编语言中的语句由以下四部分组成:

    名称 空格或:          操作助记符  空格 操作数  ;注释

   注 : 每条语句可以有名称,也可以没有名称。这种名称有两种含义:

    1. 标号: 当语句中名称与助记符之间以冒号间隔时,该名称表示标号,用于表示指令的地址(段地址、偏移地址)。

    2. 变量名: 当语句中名称与助记符之间以空格间隔时,该名称表示变量名,用于表示存放数据的储存空间。

1/2、汇编语言中的常数与表达式

  常数 :

    数值:B(二进制)、 D(十进制)、 H(十六进制)

    字符串: 单引号内部 ,表示各字符的ASCII 码

  表达式 : 由操作数和操作符组成

  

"""
算数操作符:+、-、*、/、MOD
逻辑操作符:AND  OR   NOT  XOR
关系操作符:EQ(相等)、  EN (不等)
                  LT (小于)、  GT (大于)
                  LE (小于等于)、GE(大于等于)
"""
            

 

1/3 标号、变量            

#标号用于指示相应指令的地址,与助记符之间用冒号间隔
例 :
    START:MOV AX,1000
注:
     标号START代表了指令“ START:MOV AX,1000”的地址,这样,可以使用转移语句JMP START ,转移到改地址。

 

#变量由伪指令来定义,之间用空格而不是冒号
格式为: 变量名 DB/DW/DD/DQ/DT 表达式  ;定义(8/16/32/64/80)
注: 
    1、变量名可有可无
    2、一个或多个表达式或常数之间用逗号分隔
    3、一个、多个问号(?),这是表示只给变量分配存储空间
    4、重复方式,这时表达式的形式为
                                                    重复次数 DUP (表达式)
  5、$ 出现在表达式中时,表示当前汇编语句的偏移地址
  6、伪指令 DW DD 的特殊用法
    伪指令DD DW 除定义变量外,还可以用来预置变量的段内偏移地址
      DW 用法格式 : 变量名1 DW 变量名2
        例: AD2 DW AD1 ; AD2指向AD1的起始地址
      DD 用法格式和上面用法相同
        例: AD4 DD AD1 ; AD4指向AD1的起始地址(只是DD为双字,第一个字内存放段内偏移地址,第二个字为段地址)


 1/4 属性操作符和PTR 操作符

  PTR操作符可以用来暂时改变已经定义过的变量或标号的类型(包括BYTE字节型、WORD字型、DWORD双字型,也可以取标号的类型NEAR近型、FAR远型)

  使用格式 : 类型 PTR 表达式

  

#属性操作符

SEG             取出段地址
OFFSET        取出偏移地址
TYPE             取出其类型
LENGTH        取出变量重复的次数
SIZE              取出变量的大小

 

2/1 数据与转移地址的寻址方式

 1、数据的寻址方式:寻找指令操作所需数据的方法

 2、转移地址的寻址方式: 寻找转移指令所需程序地址的方法

#数据的寻址方式
8086CPU指令系统的常用数据寻址方式有8种:立即寻址、寄存器寻址、存储器寻址(5种:直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、基址变址且相对寻址)、隐含寻址

以下通过一些例子介绍较难理解的寻址方式:
    #寄存器相对寻址
        MOV CX,VAR1[BX] ; (CX)<--((BX)+OFFSET VAR1)
        MOV AL,VAR2[DI-15]  ; (AL)<--((DI)+(OFFSET VAR2 -15))
        MOV 5[SI+24],DX   ;((SI)+(5+24))<--(DX)    
    #基址变址寻址
        MOV DX,[BX][SI]   ;(DX)<--((BX)+(SI))
        MOV AX,[BP][SI]   ;(AX)<--((BP)+(SI))  BP默认段地址在SS段
    #基址变址且相对寻址
        MOV VAR1[BP][DI],AX  ;((BP)+(DI)+OFFSET VARI)<--AX
    #隐含寻址
        MOVSB  ;指令含义:从(DS:SI)的存储单元中取出一个字节,传送             到(ES:DI)存储单元,并且SI和DI的内容自动增1(当DF=1)时,或自动减1(当DF=1时)
#转移地址的寻址方式
转移地址的寻址方式有4种:段内直接方式与间接方式、段间直接方式与间接方式

 

 2/1

数据传送类指令  :通用传送类指令    MOV  

         获取有效地址指令    LEA

         获取地址指针指令      LDS, LES

         标志传送指令     LAHF, SAHF

         数据交换指令     XCHG

         字节转换指令     XLAT

         堆栈操作指令     PUSH, POP, PUSHF, POPF  

#通用传送指令
格式MOV DST,SRC ;
说明:将源操作数中的一个字节或一个字传送到目的操作数所指定的位置。
注意:MOV指令不能直达的路径:
(1)、立即数    段寄存器 
(2)、存储单元  存储单元
(3)、段寄存器   段寄存器
如果要完成以上这些数据的传送,可以分以下步骤完成
立即数--通用寄存器--段寄存器
"""
MOV AX,3A01H
MOV DS,AX
"""
存储单元--通用寄存器--存储单元
"""
MOV AX,VAR1
MOV VAR2,AX
"""
段寄存器--通用寄存器--段寄存器
"""
MOV AX,CS
MOV DS,AX
"""
(CS寄存器不能用作目的寄存器)

对于双操作指令,两个操作数的类型必须匹配:
~两者都指定了类型,则必须一致,否则出错
~两者之一指定了类型,一般指令无措
~两者都无类型,则指令出错

对于操作数的类型
~立即数是无类型的
~不含变量名的直接寻址、寄存器相对寻址、寄存器间接寻址、基址变址寻址、基址变址且相对寻址的操作数也是无类型的
~利用PTR操作符可指定或暂时改变存储单元的类型

从形式上看,立即数有:由常数等组成的表达式、所有由属性操作符得到的标号或变量的属性(OFFSET   SEG  LENGTH  TYPE  等 )
MOV

相关文章:

  • 2021-11-12
  • 2021-11-13
  • 2021-11-03
  • 2021-11-03
  • 2021-11-23
  • 2021-12-04
  • 2021-11-13
猜你喜欢
  • 2021-12-04
  • 2021-12-04
  • 2021-10-08
  • 2021-05-09
  • 2021-11-13
  • 2021-09-12
  • 2021-12-18
  • 2021-09-12
相关资源
相似解决方案