当前位置:文档之家› 汇编语言程序格式

汇编语言程序格式


汇编语言程序格式
2.语句的格式
(1)执行性语句
– 标号:硬指令助记符 操作数,操作数 参数,参数…. ;注释 ;注释
(2)说明性语句
– 名字 伪指令助记符
汇编语言程序格式
二、完整段定义格式
8086按照逻辑段组织程序,具有代码段、数据段、 附加段和堆栈段
一个汇编语言源程序可以包括若干个代码段、数 据段或堆栈段
END
START
系统自动将START所在段的段地址送CS寄存器,将 START所在段内的偏移地址送IP寄存器。
汇编语言程序格式
(3) SS的装入 方法1:由系统自动装填。要求在定义堆栈段时,必须把 参数写全。这时,将程序装入内存,系统会自动地把堆 栈段地址和堆栈指针置入SS和SP中,因而可以不在代码 段中装入SS和SP的值。
格式:ASSUME 段寄存器名:段名[,段寄存器名:段名[……]] 例如:ASSUME CS:CODE,DS:DATA,SS:STACK
汇编语言程序格式
3.段寄存器的装入
ASSUME伪指令只是指出各段和段寄存器之间的关系,
但并未真正将段基地址装入相应的段寄存器中,所以在程
序的代码段开始处就应该先进行段基址的装入 数据段DS、附加段ES和堆栈段SS的段基址由用户程序
模式类型说明代码段、数据段在程序中如何安排;
代码、数据的寻址是近还是远。 根据它们的不同组合,模式类型可以有如下5种。
汇编语言程序格式
① Tiny模式:也叫微模式,所有数据及代码放入同一个物 理段内,该模式用于编写较小的源程序,这种模式的源程 序最终可以形成COM文件。 ② Small:也叫小模式,所有数据放入一个 64KB的段中,
汇编语言程序格式
三、简化段定义格式
简化的段定义书写简单,有利于实现汇编语言程序模块
与高级语言程序模块的连接,它可以由操作系统自动安排段
序,自动保证名字定义的一致性。
汇编语言程序格式
1.存储模式选择伪操作(﹒MODEL)
格式:﹒MODEL 功能: 本语句一般放在段定义之前,用来说明在存储器中 是如何安放各个段的。 模式类型
ASSUME START: MOV MOV MOV
AX,STACK1 SS,AX SP,OFFSET ┇ TOP ;堆栈段的段地址送SS ;堆栈段的栈顶地址送SP
TOP是该堆栈的初始栈顶部地址。
汇编语言程序格式
4.操作系统下可执行程序的正常结束
方法1(非标准方法): 在CODE ENDS之前增加如下语句:
格式:
段名 ┇ 段名
SEGMENT
[定位类型] [组合类型] [‘类别名’]
ENDS
注意: SEGMENT和ENDS总是成对出现
中间省略部分称为段体。对代码段来说,则主要是程序代码; 对其它段来说,一般用于变量、符号等的定义
方括号中的为可选项,当有可选项时各项顺序不能错,可选 项之间用空格隔开
汇编语言程序格式
④ STACK:表示该段是堆栈段的一部分。把所有相同 ‘类 别名’的具有STACK组合类型的段连接成一个连续段,该段 长度为各原有段的总和。将连续段首地址送SS,段内最大 偏移地址送SP(SP指向栈顶)。当定义了STACK属性后,在 主程序中可省略对SS和SP的初始化。
⑤ MEMORY:与PUBLIC同义。
×××× B ×××× B ×××× B
汇编语言程序格式
(3)
组合类型
当程序有多个段时,组合类型用来说明段与段之间是 怎样连接和定位的,共有6种组合类型:
① 不指定或称隐含方式:表示本段与其他模块中的同名 段无连接关系,它将作为一个独立的段运行。
② PUBLIC:本段与其他模块中说明为PUBLIC方式的同名 段顺序连接,组成一个大的逻辑段,它们共用同一个段起 始地址。 ③ COMMON:本段与其他模块中说明为COMMON方式的同名 段从同一地址开始重叠连接,段长是同名段中最长的段的 长度。
MOV
INT 方法2 (标准方法):
AX,4C00H
21H
MAIN
PROC
PUSH MOV PUSH DS
FAR
;保存原来的PSP段地址 ;0送AX ;0压栈
AX,0H AX ┇
RET MAIN ENDP
;返回DOS
汇编语言程序格式 完整段定义的源程序格式
DATA SEGMENT ;定义数据段DATA STRING DB ‘Hello,Everybody !’,0DH,0AH,’$’ 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 INT 21H MOV AH,4CH ;利用系统功能调用返回DOS INT 21H CODE ENDS ;代码段结束 END START ;汇编结束
汇编语言程序格式
汇编语言程序格式
汇编语言程序格式
一、汇编语句类型和格式
1.语句类型 –硬指令语句(指令性语句) 是指能产生目标代码,CPU可以执行的,能完成 特定功能的语句,它主要由CPU指令组成 –伪指令语句(指示性语句) 是一种不产生目标代码的语句,它仅仅在汇编过 程中告诉汇编程序应如何汇编 –宏指令语句 是一个指令序列,汇编时凡有宏指令语句的地方 都将用相应的指令序列的目标代码插入
汇编语言程序格式
2.数据段定义伪指令(.DATA)
格式:.DATA [名字]
定义一个数据段,如果有多个数据段,则用名字来 区别:只有一个数据段时,隐含段名为@DATA。 3.堆栈段定义伪指令(.STACK)
格式:.STACK
[长度]
定义一个堆栈段,并形成SS及SP的初值,SP的默认 值为1024,隐含段名为@STACK。可选的长度参数指定堆 栈段所占存储区练习
在数据段定义一字节变量,存储一个0-9之间的十进制数 (1)编写汇编语言源程序,将该十进制数显示到屏幕上 (2)用debug将汇编生成的可执行文件调入内存,查看 数据段的内容 (3)在内存中修改数据段中定义的十进制数,用t或g命
令显示运行结果
思考: (1)如何在屏幕上显示一个两位的十六进制数 (2)如何在屏幕上显示一个两位的十进制数
汇编语言程序格式
4.代码段定义伪指令(.CODE)
格式:.CODE [名字]
定义一个代码段,如果有多个代码段,则用名字来 区 别:只有一个代码段时,隐含段名为@CODE。 5.程序开始伪指令(.STARTUP)
格式:.STARTUP
产生程序开始执行的代码,同时还指定了程序开始执 行的起点。 在小模式下,可以省略将数据段基址装入DS的语句。
STACK1
DB STACK1
SEGMENT
50H DUP(?) ENDS
PARA
STACK
‘STACK’
汇编语言程序格式
方法2:手动装填
STACK1 DW TOP STACK1 CODE SEGMENT 50H LABEL ENDS SEGMENT CS:CODE,SS:STACK1 PARA
DUP(?) WORD ;TOP属性为WORD
代码装入
代码段CS在加载程序后由系统自动装入
汇编语言程序格式 (1) DS、ES的装入 MOV AX,DATA ;数据段段基地址送AX寄存器
MOV
或 MOV
DS,AX
AX,SEG X
;AX寄存器的内容送数据段寄存器DS
;变量X所在数据段的段基址送AX寄存器
MOV
DS,AX
汇编语言程序格式
(2) CS的装入 对CS和IP的装入方法是利用END后的标号来完成的。 如: START: ┇
汇编语言程序格式 简化段定义的源程序格式
.MODEL SMALL ;定义程序的存储模式 .STACK ;定义堆栈段 .DATA ;定义数据段 STRING DB ’Hello,Everybody !’,0DH,0AH,’$’ ;在数据段定义要显示的字符串 .CODE ;定义代码段 Start: MOV AX,@DATA MOV DS,A ;说明程序起始位置,并建立DS、SS内容 MOV DX,OFFSET STRING ;指定字符串在数据段的偏移地址 MOV AH,9 INT 21H ;利用DOS功能调用显示信息 MOV AH,4cH INT 21H ;程序结束点,返回DOS END start ;汇编结束
选择类型: ① BYTE:段的起始地址可以从任何地址开始。
段起始地址(20位):××××
××××
××××
××××
××××
B
② WORD:段的起始地址必须以偶地址开始 段起始地址(20位):×××× ×××× ×××× ×××0 ×××× B
汇编语言程序格式
③ DWORD:段的起始地址必须为4的倍数 段起始地址(20位):×××× ×××× ×××× ××0 0 ④ PARA:段的起始地址必须从小段边界开始 段起始地址(20位):×××× ×××× ×××× 0 0 0 0 ⑤ PAGE:段的起始地址必须从页的边界开始 段起始地址(20位):×××× ×××× 0 0 0 0 0 0 0 0 如未指定定位类型,则汇编程序默认为PARA。
段与段之间的顺序可以随意排列。
逻辑段用汇编语言源程序中的段定义伪指令来定 义
汇编语言程序格式
二、完整段定义格式
完整段定义伪指令 指定段寄存器伪指令
段寄存器的装入
可执行程序的正常结束
汇编语言程序格式
1.完整段定义伪指令(SEGMENT、ENDS)
作用:控制汇编程序和连接程序在内存中组织代码和数据的方式。
相关主题