2021-01-02

**

*汇编指令:


**

数据定义伪指令:

(为数据分配存储单元)格式:变量名 数据操作伪指令 操作数1,操作数2,操作数3,操作数4,操作数5,·······
伪指令:DB(字节),DW(字),DD(双字),DQ(4字),DT(5字);
'?'表示预留空间,内容不定。
DUP 表示内容重复的数据,格式: 次数 DUP(被重复内容)可以嵌套使用。

**

符号定义伪指令:

(符号包括变量名、标号名、过程名、寄存器名、指令助记符)
伪指令: EQU , = , LABEL 这三个。
格式: 名字 EQU 表达式 (表达式可以说常数,已定义符号,数值表达式 或 地址表达式)
功能:给表达式起一个名字,用以代替。和C语言中的宏定义类似。
格式: 名字 = 表达式 (表达式可以说常数,已定义符号,数值表达式 或 地址表达式)
功能:给表达式起一个名字,用以代替。和C语言中的宏定义类似。(与EQU的区别是可以个一个名字再定义一次)
例:BUF = 10
MOV AL,BUF
BUF = 5
格式: 变量/标号 LABEL 类型 (类型有: BYTE , WORD, DWORD, DQ, DT ; 标号的类型有:NEAR , FAR)
功能:定义变量或标号的类型,而变量或者标号的段属性和偏移属性由该语句所处的位置确定。(可以使同一块数据区域同时具有两种数据类型)

**

段定义伪指令:


**汇编源程序以段为其基本的组织结构;
相关伪指令:SEGMENT , ENDS , ASSUME

格式: 段名 SEGMENT [定位类型][组合类型][‘类别’] (类别名必须用单引号括起来,类别决定连接时各逻辑段装入的顺序,相同或者没有时按出现的先后顺序装入)
段名 ENDS
功能:定义一个逻辑段。(SEGMENT 和 ENDS 必须成对使用,告诉程序如何确定边界,如何连接几个程序模块)

定位类型:(说明段的起始地址)
1.
BYTE:段可以从任何地址开始
2.
WORD:段的起始地址必须为偶数
3.
PARA:16个字节为一小节,起始地址必须为16的倍数。
4.
PAGE:256个字节为一页,起始地址必须为256的倍数。

组合类型:(说明段的合并方法)

PRIVATE:私有段,连接时不与其他模块中的同名段合并
PUBLIC:将本段和其他同类别名的其他段组装在一起形成一个逻辑段
STACK:和 PUBLIC 一样的作用,但只针对堆栈段
COMMON:连接程序后本段将和同类别名的段,指派相同的基地址,因而各个逻辑段将发生覆盖,最终长度取决于最长的段,内容为最后装入的段。
MEMORY:和 PUBLIC 一样的作用,但是 MEMORY 定义的段默认装在所有同类别名段的最后,出现多个 MEMORY 时,第一个起作用,其余的按 PUBLIC 处理
AT exp: exp 为段地址,长度为16位。不能用于代码段。
格式: ASSUME 段寄存器名:段名[,段寄存器名:段名,········ ]
说明:段寄存器可以是:CS DS ES SS ;段名位以定义的段,凡是程序中使用的段,都应说明它与段寄存器之间的关系。
功能:用于明确段和段寄存器之间的关系。(该指令只是指明各逻辑段对段寄存器的使用情况,并不是对段寄存器进行赋值,DS,ES 用指令语进行赋值,CS,SS由系统负责,SS也可以手动赋值,但CS不允许)****

过程定义伪指令:

格式: 过程名 PROC [类型]
·········
RET
过程名 ENDP
说明:连接之后,过程名表示过程程序的入口程序地址;PROC 和 ENDP 必须成对出现;类型:NEAR 或 FAR 表示该过程是 段内调用 或 段间调用 ,缺省为 NEAR; 一个过程至少有一条过程返回指令。
模块定义和结束伪指令:
在编写规模较大的汇编语言程序时,可以将整个程序划分为几个独立的模块,然后分别将各个模块分别进行汇编,生成各自的目标程序,最后将他们连接为一个完整的程序。
格式: NAME 模块名
功能:为源程序的目标程序指定一个模块名。
格式: END [标号]
功能:表示源程序结束。 (标号:指示程序开始执行的起始地址。只有主程序模块结束的时候才需要标号)

**

**其他指令:


对准伪指令:
格式 :EVEN
功能:使下一个分配地址为偶地址。
定位伪指令:
格式:ORG 表达式(取值范围0~65535)
功能:指定其后的程序段,或数据块所存放的起始地址的偏移量。
基数控制伪指令:
格式:RADIX 表达式(取值范围2~16)
功能:指定汇编程序默认的数制,缺省为10进制。**

你可能感兴趣的:(汇编,后端,c语言,程序人生,经验分享)