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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM