汇编语言(三)——汇编语言程序格式

本文介绍了汇编语言程序的功能,包括汇编过程、程序格式和伪指令。详细讲解了指令语句、伪指令语句的基本格式,以及伪指令的作用如处理器选择、存储模式定义等。还探讨了标号和变量的属性,并提供了数据定义和存储器分配的伪操作实例。

4.1 汇编程序功能

4.1.1 汇编语言程序的建立和汇编过程

  • 汇编:用汇编语言编写的源程序在输入计算机后,需要将其翻译成目标程序,计算机才能执行。这个歌过程称为汇编。
  • 汇编程序:完成汇编任务的程序称为汇编程序。
    在这里插入图片描述
  • 汇编程序的输入和输出
    输入:以汇编语言源程序文件作为输入
    输出:两种输出文件:1.目标程序文件。2.源程序列表文件。
    在这里插入图片描述

4.2 汇编语言程序格式

4.2.1 汇编语言语句的基本格式

  • 一个汇编语言源程序中有3种基本语句:指令语句、伪指令语句和宏指令语句(宏指令语句就是由若干条指令语句形成的语句)
  • 指令语句:计算机中指令系统的各条指令,每条指令语句在汇编时都产生一个供CPU执行的机器目标代码。格式如下图:
    在这里插入图片描述
  • 伪指令语句:指示汇编程序在汇编源程序时完成某些工作,比如完成数据定义、分配存储区、知识程序结束等。在汇编时,不产生目标代码,在程序汇编成目标程序后,他就不符存在了。格式如下图:在这里插入图片描述
  • 伪指令与指令的主要区别:
    1.伪指令语句经汇编后不产生机器目标代码,而指令语句经汇编后将产生相应的机器目标代码;
    2.伪指令语句所指示的操作实在程序汇编时完成的,而指令语句的操作必须在程序运行时才能完成。

标号和变量都具有三种属性:段属性、偏移属性及类型属性

  • 段属性:定义了标号或变量的段起始地址,此值必须在一个段寄存器中。
  • 偏移属性:标号或变量所在的地址距段基址的偏移量。
  • 类型属性:1.用来指出该标号在本段内引用还是在其他段中引用,段内引用称为NEAR,指针长度为2个字节;段外引用称为FAR,指针长度为4个字节。2.变量的类型属性定义该变量所保留的字节数。

注意:在同一个程序中,同样的标号或变量的定义允许出现一次。

4.3 伪指令

伪指令的定义:

  • 无相应的目标代码
  • 说明性语句或管理语句
  • 汇编程序对源程序进行汇编时处理的操作,完成 处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束 等功能。

格式如下图:
在这里插入图片描述

  • 定位类型:告诉了汇编程序如何确定逻辑段的边界在存储器中的位置。(有PAGE、PARA、DWORD、WORD、BYTE五种类型,其中默认为PARA类型)

  • 组合类型:在多模块程序设计中表示该段和其他同名段间的组合连接方法。(PRIVATE(MEMORY)、PUBLIC、COMMON、STACK,其中PRIVATE为默认)

  • 使用类型:只适用于386以后的机型,用于说明使用16为寻址方式还是32位寻址方式。(USE16(默认)、USE32)

  • 类名:任选的一个字符串,使用时必须用单引号括起来,连接时将把不同模块中的相同类名的各段在物理地址上相邻的连接在一起(并不合并)。

  • ASSUME伪指令:指出各逻辑段应该装填的地址,但并未真正将段基址装入相应的段寄存器中。
    格式如下图:
    在这里插入图片描述
    或者

在这里插入图片描述
段寄存器可以是CS、DS、ES、SS。

  • MODEL伪指令:
    格式:
    在这里插入图片描述

  • GROUP伪指令:允许用户自行指定数组
    格式:
    在这里插入图片描述
    数据定义及存储器分配伪操作

  • 助记符:DB DW DD DF DQ DT

  • 复制操作符:DUP
    格式:在这里插入图片描述
    例:
    在这里插入图片描述
    注意:DUP指令可以嵌套使用。

  • PTR伪指令:指定操作数的类型属性。
    在这里插入图片描述
    其中 type可以是BYTE、WORD、DWORD、FWORD、QWORD、TWORD等。
    例子:
    在这里插入图片描述

  • LABEL伪操作:定义操作数类型。
    在这里插入图片描述
    例:
    在这里插入图片描述
    注意:LABEL和PTR可以同时对同一个地址进行声明。声明时可以使用不同的变量名指向该地址。

  • 表达式赋值伪操作:EQU不允许重复定义,而“=”可以重复定义。(类似于C中的define)
    在这里插入图片描述
    地址计数器与对准伪操作:

  • 地址计数器**$**:保存当前正在汇编的指令的地址,每处理一条指令,地址计数器就增加一个值(此值为该指令所需要的字节数)。

  • 1.当其用在指令中时,表示本条指令的第一个字节的地址。
    例:JNE $+6;//转向地址是JNE的首址 +6。

  • 2.当其用在伪操作的参数字段时,表示地址计数器的当前值。
    例:ARRAY DW 1,2,$+4,3,4
    此例中,ARRAY首地址是0074,操作到&+4时,该值为0078+4=7C,及存入0078的地址为7C。

  • ORG伪指令:用于设置当前地址计数器的值。
    格式:ORG 数值表达式

  • 基数控制伪操作:.RADIX伪指令可以把默认的技术改变为2~16范围内的任何基数。(即该变程序中默认的数为多少进制的)
    格式:.RADIX 表达式

表达式操作符

格式:
在这里插入图片描述

  • 算术操作符:+、-、*、/、Mod

  • 关系操作符:EQ、NE、LT、LE、GT、GE。计算结果为逻辑值:真 0FFFFH、假 0000H
    格式:
    在这里插入图片描述

  • 逻辑和移位操作符:AND、OR、XOR、NOT
    格式:
    在这里插入图片描述

  • 数值回送操作符:TYPE、LENGTH、SIZE、OFFSET、SEG
    格式:
    在这里插入图片描述

  • TYPE:返回变量以字节数表示(这里和该变量的数量无关,只和类型有关):DB-1,DW-2,以此类推。

  • LENGTH:使用DUP则返回对应大小,其他情况则返回1.

  • SIZE:返回TYPE * LENGTH 的值。

  • OFFSET:回送偏移地址

  • SEG:回送段地址

  • 属性操作符:SHORT、HIGH、LOW、HIGHWORD、LOWWORD

附上思维导图

主要部分:
在这里插入图片描述
程序格式:

在这里插入图片描述
数据定义及存储器分配伪操作:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值