1.内存模式和简化段定义伪指令

确定用户程序中代码和数据在内存中的存放方式。
格式: .MODEL <内存模式>,[函数调用方法]
6种模式:

模式 说明
Tiny 微模式 一个既包含代码又包含数据的段。文件扩展名为 .com 的程序使用该模式
Small 小模式 一个代码段和一个数据段。默认情况下,所有代码和数据都为近属性
Medium 中模式 多个代码段,一个数据段
Compact 紧凑模式 一个代码段,多个数据段
Large 大模式 多个代码段和数据段
Huge 巨模式 与大模式相同,但是各个数据项可以大于单个段
flat 平坦模式 保护模式。代码与数据使用 32 位偏移量。所有的数据和代码(包括系统资源)都在一个 32 位段内,代码段和数据段使用同一个4GB段

函数调用方式:

区别 C sysCall stdcall BASIC FORTRAN PASCAL
入栈顺序 从右到左 从右到左 从右到左 从左到右 从左到右 从左到右
堆栈恢复者 调用者 子程序 子程序 子程序 子程序 子程序
是否可用vararg

vararg表示实参数个数是可变的,如scanf,printf等函数。
C调用方式堆栈恢复由调用者(主程序)完成
常用Add ESP,4*n指令实现,其它调用方式由子程序完成

2、简化段定义伪指令

使用简化段定义伪指令之前必须使用内存模式伪指令MODEL。
格式如下:
.CODE [段名] ;代码段
.DATA ;数据段,已初始化数据
.DATA? ;数据段,未初始化数
.CONST ;常数段
.FARDATA [段名] ;远数据段,已初始化数据
.FARDATA? [段名] ;远数据段,未初始化数据
.STACK[长度] ;堆栈段
程序举例:
. MODEL SMALL
. STACK 20H ;定义堆栈段
. DATA ;定义数据段


.CODE ;定义代码段
BEGIN:……


MOV AH ,4CH
INT 21H
END BEGIN