• 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中使用的基本功能:

  • 相关阅读:
    trie树
    单调队列
    网络流24题——试题库问题
    费用流的简单应用
    Manacher算法
    KMP算法
    网络流之最小费用最大流
    网络流之二分图匹配【转】
    网络流之最大流
    矩阵快速幂优化菲波那切数列
  • 原文地址:https://www.cnblogs.com/pengjingya/p/15022479.html
Copyright © 2020-2023  润新知