汇编代码格式举例
简化格式
使用MASM 6.x版本的简化版本定义源程序格式
;eg101.asm
.model small;程序的存储模型是small model,其中有一个代码段和一个数据段,每个段不大于64KB
.stack ;定义代码段
.data ;定义数据段
msg db 'Hello, Assembly !',13,10,'$';数据定义
.code ;定义代码段
.startup ;程序执行起始,同时设置数据
mov dx,offset msg ;指定字符串在数据段的偏移地址
mov ah,9 ;9号功能
int 21h ;中断调用指令
.exit ;程序执行结束,返回DOS
end ;汇编结束
1、程序的存储模型
.model 存储模型,语言类型
2、逻辑段的简化定义
堆栈段定义伪指令.STACK创建一个堆栈段,使用下面的格式定义堆栈段大小,默认1KB
.stack 数据大小
数据段定义伪指令.DATA创建一个数据段,数据段名可用@DATA预定义操作符表示,而用data segment定义的数据段,则数据段名为DATA
代码段定义伪指令.CODE
3、程序执行的开始
MASM6.0引入的.STARTUP指令指明了本程序开始的执行的位置,并同时使数据段寄存器DS等于数据段的段基地址。
如果不使用.STARTUP
指令,通常可以用下面的两条语句代替:
start: mov ax, @data
mov ds, ax
@data
存储在存储器中,想要赋值给ds
必须通过ax
4、程序的终止
应用程序执行结束,应该将控制权还给操作系统,
.EXIT
指令完成此功能,其实际上是利用了DOS功能调用的4CH号功能实现的
可以用以下两条语句替代:
mov ah, 4ch
int 21h
5、汇编程序结束
如果使用.STARTUP
,则只需要END
进行结束
如果使用START:
,则需要END START
6、DOS功能调用
DOS提供给程序员的编程资源是以中断调用方法使用的各种子程序。
中断是一种增强处理器功能的机制,中断调用是借助中断机制改变程序执行顺序的方式,类似于汇编语言的子程序调用
非简化版格式
;example.asm in DOS
assume cs:code,ds:date
;数据段
date segment
msg db "hello world!$"
date ends
;代码段
code segment
start: mov ax,date
mov ds,ax
;9号功能调用
mov dx,offset msg
mov ah,9
int 21h
;程序执行中止
mov ax,4c00h
int 21h
code ends
end start