06、汇编语言--指令格式

指令格式

汇编指令的代码格式(Instruction Format)也称为机器代码(Machine Code)格式。它由操作码和地址码组成:

其中,mod reg r/m表示寻找操作数的方法,'位移量'表示相对基地址的偏移量,而立即数表示操作数本身。

1、数据传送指令的助记符MOV功能是将数据从一个位置传送到另一个位置:

mov dest,src		;dest <-- src

其中src表示要传送的数据,称为源操作数(Source);dest表示数据将要传送到的位置,称为目的操作数(Destination)。

2、将16位寄存器BX的数据传送到AX寄存器的指令:

mov ax,bx	;指令功能:AX <-- BX

语句格式

汇编语言每条语句占据一行,每行不超过132个字符(MASM6.0是512字符)。

汇编语言的语句由分隔符分成的四个部分组成,有两种格式,分包是处理器指令和汇编程序伪指令。

1、执行性语句--表达处理器指令的语句:

标号: 处理器指令助记符 操作数,操作数 ;注释

2、说明性语句--表达汇编程序命令的语句:

名字 伪指令助记符 参数,参数,,...... ; 注释

汇编语言的自定义标志符(Identifier)有如下规则:

一般由31个字母、数字及规定的特殊符号组成。
不能以数字开头。
不能使用汇编语言中的关键字(Key Word)和保留字等。

汇编语言大小写不敏感,程序中一般使用小写字母形式,功能注释、文字说明通常采用大写字母形式。

注意:MASM也支持续行符“”,表示本行内容与上一行内容属于同一个语句。

源程序框架

汇编语言编程时也常将源程序分成代码段、数据段或堆栈段。

MASM各版本支持多种汇编语言源程序格式,MASM 6.x版本的简化段定义源程序格式,程序模板如下:

;example.asm in DOS
	.model small		;定义程序的存储模型(small表示小型模型)
	.stack				;定义堆栈段(默认是1KB空间)
	.data				;定义数据段
	......				;数据定义(待填)
	.code				;定义代码段
	.startup			;程序执行起始,同时设置数据段寄存器DS执行程序的数据段
	......				;主程序(执行填)
	.exit				;程序执行结束,返回DOS
	......				;子程序(指令待填)
	end					;汇编结束

针对代码中出现的字段,下面会详细的讲述。

  • 存储模型

存储模型(Memory Model)决定程序的规模,也确定进行子程序调用、指令转移和数据访问的默认属性。

当使用简化段定义的源程序格式时,必须有存储模型.MODEL语句,且位于所有简化段定义语句之前。其格式为:

.model 存储模型,语言类型

.MODEL语句确定了程序采用的存储模型,MASM有7种可以选择:

运行于DOS下的应用程序可以根据需要选择前六种模型。FLAT模型只用于32位Windows程序中。

  • 逻辑段

堆栈段定义伪指令.STACK创建一个堆栈段,段名是:STACK。堆栈段名可用@STACK预定义操作符表示。

数据段定义伪指令.DATA创建一个数据段,段名是:_DATA。数据段名可用@DATA预定义操作符表示。

代码段定义伪指令.CODE创建一个代码段,后可选一个标识符型参数指定该代码段的段名。如果没有给出段名,则采用默认段名,默认的代码段名是:_TEXT。代码段名可用@CODE预定义操作符表示。

  • 执行开始

MASM 6.0引入的.STARTUP指令指明了本程序开始执行的位置,并同时使数据段寄存器DS等于用.DATA伪指令定义的数据段的段基地址。

如果不使用.STARTUP指令,通常可以用如下两条语句代替:

start:	mov ax,@data	;@DATA表示数据段的段地址,先传送给AX寄存器
		mov ds,ax		;设置DS等于AX,即数据段的段地址

标号start也可以使用其他标志符,需要利用最后结束的END指令作为参数来指明开始执行的位置。

  • 程序终止

程序的终止有两种意义上的终止,一种是程序的终止,一种是源程序的汇编结束。

1、程序执行终止使用.exit实现,其实是调用4CH号功能实现:

mov ah,4ch ;DOS功能调用的4CH号

int 21h ;主要以第21H号中断的形式使用

2、源程序的汇编结束表示将源程序翻译成目标模板代码的过程,并不是程序的终止。

end start ;前面使用start标号的结束方式

例:现在我们用上述程序格式,编写一个在屏幕上显示信息的程序。将这段代码内容填入程序开始执行指令之后,就形成了完整的MASM汇编语言的源程序。

;hello.asm(文件名)
.model small
.stack
.data 
	msg db'Hello,Assembly!',13,10,'$'	;定义要显示的字符串
.code
.startup
	mov dx,offset msg	;指定字符串在数据段的偏移地址
	mov ah,9			;AH赋值9
	int 21h				;利用功能调用显示信息
.exit
end

注意:DOS功能9号调用要求以字符“$”结尾,无法显示“$”本身。

其中8086支持255个中断,即中断0-中断255。在DOS系统中主要分配21H号中断。

下面罗列在DOS中使用的基本功能:

原文地址:https://www.cnblogs.com/pengjingya/p/15022479.html