当前位置:文档之家› 汇编常用伪指令

汇编常用伪指令

一、基本段定义格式常用结构STACK SEGMENT PARA
'STACK;
DB 100 DUP('STACK')
STACK ENDS
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,data
MOV DS,AX
MOV ES,AX
MOV AL,4CH
INT 21H
CODE ENDS
END START
------------------------------------------------------------------------------------------------------------------------ 段名segment[定位][组合][段字][‘类别’] ...
段名ends (1)定位
段定位(align)属性——指定逻辑段在主存储器中的边界:
BYTE:段开始为下一个可用的字节地址(xxxx xxxxb),属性值为1
WORD:段开始为下一个可用的偶数地址(xxxx xxx0b),属性值为2
DWORD:段开始为下一个可用的4倍数地址(xxxx xx00b),属性值为4
PARA:段开始为下一个可用的节地址(xxxx 0000b),属性值为16
PAGE:段开始为下一个可用的页地址(0000 0000b),属性值为256
简化段定义伪指令的代码和数据段默认采用WORD定位,堆栈段默认采用PARA定位。

完整段定义伪指令的默认定位属性是PARA。

(2)组合
PUBLIC: 所有此类型的同名段组合成一个逻辑段,公用一个段地址,运行时装入同一个物理段中。

COMMON : 所有此类型的同名段具有相同的起始地址(覆盖),共享相同的存储区域。

AT <数值表达式> : 按绝对地址定位,段地址就是表达式的值。

STACK : 专用于说明堆栈段,组合方式同PUBLIC
NONE : 不组合
MEMORY :置于地址最高处,多个时取第一个,其余作为COMMON
PRIVATE:本段与其他段没有逻辑关系,不与其他段合并。

PUBLIC:连接程序把本段与所有同名同类型的其他段相邻地连接在一起,指定一个共同的段地址。

PRIVATE是完整段定义伪指令默认的段组合方式。

PUBLIC简化段定义伪指令默认的段组合。

3) 类别
用单引号’’括起来的字符串。

所有同类别的段被安排在连续的存储区域中。

二、段定义的简化
常用结构:
程序
.MODEL SMALL ;定义内存模式为小模式
.586 ;选择处理器
.STACK 512 ;定义堆栈段及其尺寸为512字节
.DATA ;数据段开始
;数据在此处定义
.CODE ;代码段开始
.STARTUP ;加载后程序入口点
;代码在此处定义
.EXIT ;返回DOS或父程序
END ;整个程序结束
在MASM5.0以上的版本中,提供了简化的段定义伪指令:
MODLE模式:
TINY 程序和数据在64K字节段内
SMALL 独立的代码段和独立的数据段
MEDIUM 单个数据段,多个代码段
COMPACT 单个代码段,多个数据段
LARGE 多个代码段,多个数据段
三、子程序
常用格式:
子程序名PROC 类型
指令序列
子程序名ENDP
类型:影响汇编程序对子程序调用指令CALL和返回指令RET的翻译方式
NEAR
如果被调用的子程序是NEAR类型,则IP的值入栈,这会使SP减2,然后把IP改成子程序的第一条指令的便宜地址FAR
如果被调用的子程序是FAR类型,把CS寄存器的值入栈,在把IP 入栈,这会使SP-4,然后把CS:IP改为子程序的第一条指令的逻辑地址
CALL
跳转指令。

与无条件跳转指令相同的是,CALL在跳转之前保留了CS:IP或者IP的值存入栈中保存。

RET
通常写在子程序的最后一条指令。

用于返回原程序处继续执行。

相关主题