最新汇编语言程序格式
INT 21H
MOV AH,4CH ;利用系统功能调用返回DOS
INT 21H
CODE ENDS
;代码段结束
END START ;汇编结束
汇编语言程序格式
三、简化段定义格式
简化的段定义书写简单,有利于实现汇编语言程序模块 与高级语言程序模块的连接,它可以由操作系统自动安排段 序,自动保证名字定义的一致性。
汇编语言程序格式
(2) CS的装入 对CS和IP的装入方法是利用END后的标号来完成的。
如: START: ┇ END START 系统自动将START所在段的段地址送CS寄存器,将
START所在段内的偏移地址送IP寄存器。
汇编语言程序格式
(3) SS的装入
方法1:由系统自动装填。要求在定义堆栈段时,必须把 参数写全。这时,将程序装入内存,系统会自动地把堆 栈段地址和堆栈指针置入SS和SP中,因而可以不在代码 段中装入SS和SP的值。
⑤ MEMORY:与PUBLIC同义。
汇编语言程序格式
(4) ‘类别名’
类别名必须用单引号括起来。连接时对不同模块、 不同名的程序段只要‘类别名’相同,则放在一个连续 的物理空间,但每段之间是独立的,不进行组合。
汇编语言程序格式
2.指定段寄存器伪指令(ASSUME)
作用:明确段和段寄存器之间的关系,即告诉汇编程序, 在运行期间通过哪个段才能找到所要的指令和数据
STACK1 SEGMENT PARA STACK ‘STACK’
DB 50H DUP(?)
STACK1
ENDS
汇编语言程序格式
方法2:手动装填
STACK1 SEGMENT PARA
DW 50H DUP(?)
TOP LABEL WORD
;TOP属性为WORD
STACK1 ENDS
CODE SEGMENT
MOV AX,4C00H
INT 21H
方法2 (标准方法):
MAIN PROC FAR
PUSH DS
;保存原来的PSP段地址
MOV AX,0H ;0送AX
PUSH AX
;0压栈
┇Leabharlann RET;返回DOS
MAIN ENDP
汇编语言程序格式
完整段定义的源程序格式
DATA SEGMENT
;定义数据段DATA
STRING DB ‘Hello,Everybody !’,0DH,0AH,’$’
ASSUME CS:CODE,SS:STACK1
START:
MOV AX,STACK1
MOV SS,AX
;堆栈段的段地址送SS
MOV SP,OFFSET TOP
;堆栈段的栈顶地址送SP
┇
TOP是该堆栈的初始栈顶部地址。
汇编语言程序格式
4.操作系统下可执行程序的正常结束
方法1(非标准方法):
在CODE ENDS之前增加如下语句:
汇编语言程序格式
1.存储模式选择伪操作(﹒MODEL) 格式:﹒MODEL 模式类型 功能: 本语句一般放在段定义之前,用来说明在存储器中
是如何安放各个段的。 模式类型说明代码段、数据段在程序中如何安排;
代码、数据的寻址是近还是远。 根据它们的不同组合,模式类型可以有如下5种。
② PUBLIC:本段与其他模块中说明为PUBLIC方式的同名 段顺序连接,组成一个大的逻辑段,它们共用同一个段起 始地址。
③ COMMON:本段与其他模块中说明为COMMON方式的同名 段从同一地址开始重叠连接,段长是同名段中最长的段的 长度。
汇编语言程序格式
④ STACK:表示该段是堆栈段的一部分。把所有相同 ‘类 别名’的具有STACK组合类型的段连接成一个连续段,该段 长度为各原有段的总和。将连续段首地址送SS,段内最大 偏移地址送SP(SP指向栈顶)。当定义了STACK属性后,在 主程序中可省略对SS和SP的初始化。
⑤ PAGE:段的起始地址必须从页的边界开始 段起始地址(20位):×××× ×××× ×××× 0000 0000 B
如未指定定位类型,则汇编程序默认为PARA。
汇编语言程序格式
(3) 组合类型
当程序有多个段时,组合类型用来说明段与段之间是 怎样连接和定位的,共有6种组合类型:
① 不指定或称隐含方式:表示本段与其他模块中的同名 段无连接关系,它将作为一个独立的段运行。
数据段DS、附加段ES和堆栈段SS的段基址由用户程序 代码装入
代码段CS在加载程序后由系统自动装入
汇编语言程序格式
(1) DS、ES的装入 MOV AX,DATA MOV DS,AX
或 MOV AX,SEG X MOV DS,AX
;数据段段基地址送AX寄存器 ;AX寄存器的内容送数据段寄存器DS
;变量X所在数据段的段基址送AX寄存器
格式:ASSUME 段寄存器名:段名[,段寄存器名:段名[……]] 例如:ASSUME CS:CODE,DS:DATA,SS:STACK
汇编语言程序格式
3.段寄存器的装入
ASSUME伪指令只是指出各段和段寄存器之间的关系, 但并未真正将段基地址装入相应的段寄存器中,所以在程 序的代码段开始处就应该先进行段基址的装入
汇编语言程序格式
汇编语言程序格式
一、汇编语句类型和格式
1.语句类型 –硬指令语句(指令性语句) 是指能产生目标代码,CPU可以执行的,能完成 特定功能的语句,它主要由CPU指令组成 –伪指令语句(指示性语句) 是一种不产生目标代码的语句,它仅仅在汇编过 程中告诉汇编程序应如何汇编 –宏指令语句 是一个指令序列,汇编时凡有宏指令语句的地方 都将用相应的指令序列的目标代码插入
DATA ENDS
;数据段结束
CODE SEGMENT
;定义代码段CODE
ASSUME CS:CODE,DS:DATA
;确定CS、DS、SS指向的逻辑段
START:MOV AX,DATA ;设置数据段的段地址DS
MOV DS,AX
MOV DX,OFFSET STRING;利用功能调用显示信息
MOV AH,9
汇编语言程序格式
汇编语言程序格式
汇编语言程序格式
汇编语言程序格式
汇编语言程序格式
汇编语言程序格式
汇编语言程序格式
③ DWORD:段的起始地址必须为4的倍数 段起始地址(20位):×××× ×××× ×××× ×××× ××0 0 B
④ PARA:段的起始地址必须从小段边界开始 段起始地址(20位):×××× ×××× ×××× ×××× 0 0 0 0 B