指令性语句和指示性语句 名字、变量、标号

本文深入讲解汇编语言的指令性语句与指示性语句,包括名字、变量、标号的概念及其属性,以及如何通过PTR、THIS和LABEL命令重新定义变量和标号的类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分段结构

8086/8088 的程序最多可由为 4 段组成,并分别由段寄存器 CS、DS、ES、SS 的内容作为段基值,每段所占内存容量最大可达 64KB。
各段由命令 SEGMENT 开始,并由命令 ENDS 结束。
如:
数据段:
DATA SENGMENT AT 2000H
DATA ENDS
堆栈段:
STACK SENGMENT
STACK ENDS
代码段:
CODE SENGMENT
CODE ENDS

汇编语言程序的语句有两大类:指令性语句 和 指示性语句。

  1. 指令性语句。指令性语句是主要由指令构成的语句。
    格式为:
    【标号:】 操作码 【操作数】【,操作数】【;注释】
    其中 操作码 和 操作数 是用助记符表示的指令的两个部分。
    标号:标号具有该语句指令所在内存地址的属性,通常在转移指令中用作目的地址。用冒号 “ : ” 结尾。
  2. 指示性语句。指示性语句是主要由命令(亦称 伪指令)构成的语句。是用来指示汇编程序进行汇编操作的。
    格式为:
    【名字/变量】 命令 【参数】【;注释】
    命令:命令指示汇编程序进行某种汇编操作,参数是有关数据。
    如:
    DATA SENGMENT AT 2000H
    DATA ENDS
    其中命令 SENGMENT 指出这是一个段的开始,参数 AT 2000H 指定该段的段基值为 2000H ,而 DATA 则是该段的名字,命令 ENDS 表明了段名为 DATA 的段的结束。

名字、变量、标号

1. 名字

名字有 文件名、标题名、段名、过程名、符号常量 等,它们都是程序员编程时按标识符规定来命名的,其中有些名字可在编程时引用,以方便编程

(1)段名 :是在源程序的定义语句中命名取定的

源程序在进行汇编连接时,系统分配给该段一个段基值,设为 2000H 。这时,段名就可以作为段基值 2000H 被引用
定义语句:
DATA SEGMENT

(2)过程名 :是在源程序的过程定义语句中命名的。

汇编连接时源程序时,系统分配给过程一个地址,即该过程第一条指令所在内存单元的地址,亦即该过程的入口地址,这也就是调用该过程的 CALL 指令中的目的地址
定义语句:
SORT PROC NEAR
过程名在汇编语言程序中可作为调用指令的目的地址使用,

(3)符号常量:符号常量是在源程序的符号常量定义语句中命名的,定义语句:

COUNT EQU 20

2. 变量

变量是数据定义语句中的一项,它是由程序员在编程是按照标识符规定取定的
当在数据定义语句的第一项对变量命名后,该变量就是已定义了的,已定义的变量具有下列五种属性

(1)段属性

表示格式:SEG 变量
它表示变量所在的段基值

(2)偏移地址属性

表示格式: OFFSET 变量
它表示变量所在处的偏移地址

(3)类型属性

表示格式:TYPE 变量
它表示变量所在内存数据的类型(用 DB、DW、DD、DQ、DT 予以定义)
字节数据时(DB): TYPE = 1
字数据时(DW): TYPE = 2
双字数据时(DD): TYPE = 4
8 字节数据时(DQ): TYPE = 8
10 字节数据时(DT):TYPE = 10

(4)长度属性

表示格式:LENGTH 变量
它表示变量所在数组的数据元素个数。只有当数据用复制符 DUP 定义时,LENGTH 才等于数组的元素个数,否则 LENGTH 就等于 1 。

(5)规模属性

表示格式:SIZE 变量
它表示变量所在数组的字节总数。
SIZE = LENGTH x TYPE
同以上 LENGTH 的情况,只有当数据用复制符 DUP 定义时,LENGTH 才等于数组的元素个数,否则 LENGTH 就等于 1 。

3. 指令性语句

指令性语句:由指令组成,是构成代码段的基础,只在代码段中才有,在数据段、附加段、堆栈段中是没有指令性语句的。
程序运行时,CPU 执行指令性语句中的指令,而指示性语句在程序运行时,是不由 CPU 执行的,指示性语句是用来指示汇编程序进行汇编操作的
指令性语句的格式为:
【 标号: 】 操作码 【 操作数 】 【 ; 注释】
其中操作码和操作数就是指令

4. 标号

标号是程序员编程时按标识符规定取定的,并常常具有它在程序中的作用的含义,如 NEXT 、AGAIN 等,并且标号一定要用冒号(:)结尾
标号的三种属性:

(1)段属性

表示格式: SEG 标号
它表示标号所在段的段基值

(2)偏移地址属性

表示格式: OFFSET 标号
它表示标号所在位置的偏移地址,即该语句的指令的第一字节所在内存单元的偏移地址

(3)类型属性

表示格式:TYPE 标号
标号通常用作转移指令对的目的操作数(即转移去的目的)地址
类型有两种:
NEAR 时,TYPE = -1
FAR 时, TYPE = -2

5. 变量和标号的类型的重新定义

(1)用 PTR 重新定义

格式:类型 PTR exp
如:
重新指定变量类型
BUFW DW 1234H ,5678H
下列指令均为合法的
MOV AX , BUFW ; AX <-- 1234H
MOV AL , BYTE PTR BUFW ; AL <-- 34H

(2)属性指定运算符 THIS

格式: THIS 类型
THIS 和 EQU 一起用来定义一个新变量,它与原变量具有相同的段属性和偏移地址属性,但类型属性不同
如:
BUFB EQU THIS BYTE
BUFW DW 1234H , 5678H
这样,BUFB 和 BUFW 具有相同的段属性和偏移地址属性,但 BUFB 的类型属性是字节,
注意:BUFB 语句和 BUFW 语句必须是紧邻的且 BUFB 语句在 BUFW 语句的前面

(3)命令 LABLE

格式: 变量/ 标号 LABLE 类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值