(1)存儲模型說明偽指令
在使用簡化的段定義方式之前,必須使用存儲模式說明偽指令來描述源程序所采用的存儲模式。該偽指令說程序所使用的存儲模式,匯編程序將用該存儲模式生成相應的ASSUME和GROUP語句,同時也為其它的簡化段創建等價的預定義。
程序存儲模式說明偽指令的格式如下:
.MODEL 存儲模式[,語言類型] [,操作系統類型] [,堆棧類型]
程序可選的存儲模式有:TINY、SMALL、COMPACT、MEDIUM、LARGE、HUGE和FLAT。
偽指令.MODEL必須寫在源程序的首部,且只能出現一次,其前內容只能是注釋。
如果用偽指令來指定程序所遵循的語言類型,那么,將不允許子程序的嵌套定義。
一、存儲模式
如果要用匯編語言編寫被高級語言調用的子程序,那么,該匯編程序的存儲模式必須與該高級語言編譯(或解釋)程序所使用的存儲模式相匹配。匯編語言程序所能使用的存儲模式、符號及其相關信息如表6.2所列。
在程序中,還可偽指令OPTION SEGMENT和SEGMENT來指定段的規模。
有關存儲模式的具體規定如下:
、TINY
在匯編程序MASM 6.11和TASM 4.0,該存儲類型是為編寫COM文件類型而設置的。程序員還可用匯編命令行選項/AT和連接命令選項/TINY來達到此目的。
、SMALL
所有的數據變量必須在一個數據段之內,所有的代碼也必須在一個代碼段之內。在這種模型下,數據段寄存器的內容保持不變,所有轉移也都是段內轉移。
該存儲類型是獨立匯編語言源程序常用的存儲模型。
、MEDIUM
所有的數據變量必須在一個數據段之內,但代碼段可以有多個。在這種模型下,數據段寄存器的內容保持不變,轉移可以是段間轉移。
、COMPACT
數據段可以有多個,但代碼段只能有一。
、LARGE
數據段和代碼段都可以有多個,但一個數組的字節數不能超過64KB。
、HUGE
數據段和代碼段都可以有多個,一個數組的字節數也可以超過64KB。
、FLAT
FLAT存儲模式在創建執行文件時,將使該程序僅含一個包括程序數據和代碼的32位段,并且只能在80386及其以后的計算機系統中運行。該程序的文件類型為EXE。
在使用該存儲模式之前,必須先用偽指令.386、.486或其它偽指令來說明更高性能的CPU類型。也就是說:FLAT模式僅在386及其以后CPU模式下才能使用。
在該程序中,所有代碼和數據位距的缺省值都是NEAR,子程序的類型也是NEAR,并且標識符@CodeSize,@DataSize和@Model的值分別為:0、0和7。
在FLAT存儲模式下,程序將不使用段寄存器FS和GS。匯編程序在處理說明語句“.MODEL FLAT”時,將自動生成下列段寄存器說明語句:
ASSUME CS:FLAT, DS:FLAT, SS:FLAT, ES:FLAT, FS:ERROR, GS:ERROR
當然,程序員也可把該段寄存器說明語句寫在其指令序列之中。
二、語言類型
如C。
三、操作系統類型
OS_DOS是當前唯一支持的選項值,也是該選項的缺省值。
四、堆棧類型
堆棧類型的值主要影響偽指令.STARTUP所生成的指令序列。該選項有二個可選值:NEARSTACK和FARSTACK。其中:NEARSTACK是該選項的缺省堆棧類型。
、NEARSTACK——堆棧段和數據段是同一段;
、FARSTACK——堆棧段和數據段是不同的段,且堆棧不在段組DGROUP中。
例如:
.MODEL SMALL, C, OS_DOS, FARSTACK
(2)具體的偽指令說明形式及其功能描述如下:
1、代碼段定義
.CODE
作用:說明其下面的內容是代碼段中內容。
2、堆棧段定義
.STACK [堆棧字節數]
其中,“堆棧字節數”可以不寫,其缺省值為1024B。
3、數據段定義
.DATA / .DATA? / .CONST
作用:說明其下面的內容是數據段中的變量定義。
在一個源程序中,可以有多個偽指令.DATA定義的數據段,這就好象在源程序中定義多個同段名的數據段一樣。
偽指令.DATA?說明下面是一個未初始化數據段的開始,偽指令.CONST說明下面是一個常數數據段的開始。這二條偽指令很少使用,除非在與高級語言編寫的程序相結合時,為了遵守高級語言的某些約定,而需要特殊說明時才使用。
匯編程序在處理簡化的堆棧段和數據段定義時,它會自動地把偽指令.STACK、.DATA、.DATA?和.CONST所定義的段組合成一個段組。如果想定義一個獨立的、不與其它段組合在一起的數據段的話,那么,就可選用下面的數據段定義方式。
4、遠程數據段定義
.FARDATA [段名] / .FARDATA? [段名]
其中:“段名”是可選項,如果不指定的話,則該段名就取其缺省段名。
作用:說明一個獨立的數據段。
偽指令.FARDATA?說明下面是一個未初始化的、獨立數據段的開始。
posted on 2007-07-16 20:46
merlinfang 閱讀(2345)
評論(0) 編輯 收藏 引用 所屬分類:
匯編語言