青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

小默

ASM - 段定義偽指令

  段定義偽指令是表示一個段開始和結束的命令,80x86有兩種段定義的方式:完整段定義和簡化段定義,分別使用不同的段定義偽指令來表示各種段。

 4.2.1.1 完整的段定義偽指令

  完整段定義偽指令的格式如下:

  段名 SEGMENT
    .
    .
    .
  段名 ENDS

  段名由用戶命名。對于數據段、附加段和堆棧段來說,段內一般是存儲單元的定義、分配等偽指令語句;對于代碼段中則主要是指令及偽指令語句。

  定義了段還必須說明哪個段是代碼段,哪個段是數據段。ASSUME偽指令就是建立段和段寄存器關系的偽指令,其格式為:

  ASSUME 段寄存器名: 段名,…

  段寄存器名必須是CS、DS、ES和SS中的一個,而段名必須是由SEGMENT定義的段名。

 
·定位類型:說明段的起始邊界值(物理地址)。
  
  ·組合類型:說明程序連接時的段組合方法。

  ·類別:在單引號中給出連接時組成段組的類型名。連接程序可把相同類別的段的位置靠在一起。

例4.1

  ; * * * * * * * * * * * * * * * * * * * * * * *
  data_seg1 segment        ; 定義數據段
            .
            .
            .
  data_seg1 ends
  ; * * * * * * * * * * * * * * * * * * * * * * *
  data_seg2 segment        ; 定義附加段
            .
            .
            .
  data_seg2 ends
  ; * * * * * * * * * * * * * * * * * * * * * * *
  code_seg segment         ; 定義代碼段

   assume cs:code_seg, ds:data_seg1, es:data_seg2

  start:              ; 程序執行的起始地址
  ; set DS register to current data segment
     mov   ax, data_seg1   ; 數據段地址
     mov   ds, ax       ; 存入DS寄存器

  ; set ES register to current extra segment
     mov   ax, data_seg2   ; 附加段地址
     mov   es, ax       ; 存入ES寄存器
            .
            .
            .
   code_seg ends          ; 代碼段結束
  ; * * * * * * * * * * * * * * * * * * * * * * * * * *
     end   start

  由于ASSUME偽指令只是指定某個段分配給哪一個段寄存器,它并不能把段地址裝入段寄存器中,所以在代碼段中,還必須把段地址裝入相應的段寄存器中:

  MOV    AX,DATA_SEG1    ; 數據段地址
  MOV    DS,AX        ; 存入DS寄存器
  MOV    AX,DATA_SEG2    ; 附加段地址
  MOV    ES,AX        ; 存入ES寄存器

  如果程序中還定義了堆棧段STACK_SEG,也需要把段地址裝入SS中:
  MOV    AX,STACK_SEG    ; 堆棧段地址
  MOV    SS,AX        ; 存入ES寄存器

  注意,在程序中不需要用指令裝入代碼段的段地址,因為在程序初始化時,裝入程序已將代碼段的段地址裝入CS寄存器了。

  為了對段定義作進一步地控制,SEGMENT偽指令還可以增加類型及屬性的說明,其格式如下:

  段名   SEGMENT  [定位類型][組合類型]['類別']
             .
            .
            .
  段名   ENDS

  [ ]中的內容是可選的,一般情況下,這些說明可以不用。但是,如果需要用連接程序把本程序與其他程序模塊相連接時,就需要提供類型和屬性的說明。

表4.2.1 ·定位類型:說明段的起始邊界值(物理地址)。
定位類型
說 明
BYTE
段可以從任何地址邊界開始
WORD
段從字邊界開始,即段的起始邊界值為偶數
DWORD
段從雙字的邊界開始,即段的起始邊界值為4的倍數
PARA
段從小段邊界開始,即段的起始邊界值為16 (或10H) 的倍數
PAGE
段從頁邊界開始,即段的起始邊界值為256 (或100H) 的倍數

  注意:
  定位類型的缺省項是PARA,即在未指定定位類型的情況下,則連接程序默認為PARA。BYTE和WORD用于把其它段(通常是數據段)連入一個段時使用;DWORD一般用于運行在80386及后繼機型上的程序。
表4.2.2 ·組合類型:說明程序連接時的段組合方法。
組合類型
說 明
PRIVATE
該段為私有段,連接時將不與其它模塊中的同名段合并
PUBLIC
該段連接時將與其它同名段連接在一起,連接次序由連接命令指定
COMMON
該段在連接時與其它同名段有相同的起始地址,所以會產生覆蓋
AT 表達式
段地址=表達式的值,其值必為16位但AT不能用來指定代碼段
MEMORY
與PUBLIC同義
STACK
將多個同名堆棧段連接在一起,SP設置在第一個堆棧段的開始

  注意:組合類型的缺省項是PRIVATE。

例4.2 在連接之前已定義兩個目標模塊如下:

  模塊1   SSEG  SEGMENT  PARA  STACK
       DSEG1 SEGMENT  PARA  PUBLIC 'Data'
       DSEG2 SEGMENT  PARA
       CSEG  SEGMENT  PARA 'Code'

  模塊2   DSEG1 SEGMENT  PARA PUBLIC 'Data'
       DSEG2 SEGMENT  PARA
       CSEG  SEGMENT  PARA 'Code'

  以上兩個模塊分別匯編后產生 .OBJ 文件,經連接程序連接后產生的 .EXE模塊如下:

  模塊1   CSEG  SEGMENT  PARA 'Code'
  模塊2   CSEG  SEGMENT  PARA 'Code'
  模塊1+2  DSEG1 SEGMENT  PARA PUBLIC 'Data'
  模塊1   DSEG2 SEGMENT  PARA
  模塊2   DSEG2 SEGMENT  PARA
  模塊1   SSEG  SEGMENT  PARA STACK

------------------------------------------------------
4.2.1.2 存儲模型與簡化段定義偽指令

  較新版本的匯編程序(MASM5.0與MASM6.0)除支持完整段定義偽指令外,還提供了一種新的簡單易用的存儲模型和簡化的段定義偽指令。

  
1. 存儲模型偽指令
  存儲模型的作用是什么呢?存儲模型決定一個程序的規模,也確定進行子程序調用、指令轉移和數據訪問的缺省屬性(NEAR或FAR)。當使用簡化段定義的源程序格式時,在段定義語句之前必須有存儲模型 .MODEL語句,說明在存儲器中應如何安放各個段。

  MODEL偽指令的常用格式如下:
.  .MODEL 存儲模型
表4.2.3 MASM 5.0和MASM 6.0支持的存儲模型:
存儲模型
功 能
適用操作系統
Tiny (微型) 所有數據和代碼都放在一個段內,其訪問都為NEAR型,整個程序≤64K,并會產生.COM文件。 MS-DOS
Small (小型) 所有代碼在一個64KB的段內,所有數據在另一個64KB的段內(包括數據段,堆棧段和附加段)。 MS-DOS
Windows
Medium (中型) 所有代碼>64K時可放在多個代碼段中,轉移或調用可為FAR型。所有數據限在一個段內,DS可保持不變。 MS-DOS
Windows
Compact(緊湊型) 所有代碼限在一個段內,轉移或調用可為NEAR型。數據>64K時,可放在多個段中。 MS-DOS
Windows
Large (大型) 允許代碼段和數據段都可超過64K,被放置在有多個段內,所以數據和代碼都是遠訪問。 MS-DOS
Windows
Huge (巨型) 單個數據項可以超過64K,其它同Large模型 MS-DOS
Windows
Flat (平展型) 所有代碼和數據放置在一個段中,但段地址是32位的,所以整個程序可為4GB。MASM 6.0支持該模型。 OS/2
WindowsNT

  注意:Small 模型是一般應用程序最常用的一種模型,因為只有一個代碼段和一個數據段,所以數據和代碼都是近訪問的。這種模型的數據段是指數據段、堆棧段和附加段的總和。

  在DOS下用匯編語言編程時,可根據程序的不同特點選擇前6種模型,一般可以選用SMALL模型。另外,TINY模型將產生COM程序,其他模型產生EXE程序。FLAT模型只能運行在32位x86 CPU上,DOS下不允許使用這種模型。當與高級語言混合編程時,兩者的存儲模型應當一致。


  2. 簡化的段偽指令
  簡化的段定義語句書寫簡短,語句.CODE、.DATA和.STACK分別表示代碼數據段和堆棧段的開始,一個段的開始自動結束前面一個段。采用簡化段指令之前必須有存儲模型語句.MODEL。
表4.2.4 簡化段偽指令的格式如下表:

簡化段偽指令
功 能
注釋
.CODE [段名] 創建一個代碼段 段名為可選項,如不給出段名,則采用默認段名。對于多個代碼段的模型,則應為每個代碼段指定段名。
.DATA 創建一個數據段 段名是:_DATA
.DATA? 創建無初值變量的數據段 段名是:_BSS
.FARDATA [段名] 建立有初值的遠調用數據段 可指定段名,如不指定,則將以FAR_DATA命名。
.FARDATA? [段名] 建立無初值的遠調用數據段 可指定段名,如不指定,則將以FAR_BSS命名。
.CONST 建立只讀的常量數據段 段名是:CONST
.STACK [大小] 創建一個堆棧段并指定堆棧段大小 段名是:stack。如不指定堆棧段大小,則缺省值為1KB


  3.與簡化段定義有關的預定義符號
  匯編程序給出了與簡化段定義有關的一組預定義符號,它們可在程序中出現,并由匯編程序識別使用。有關的預定義符號如下:
  (1)@code 由.CODE 偽指令定義的段名或段組名。
  (2)@data 由.DATA 偽指令定義的段名,或由 .DATA 、.DATA?、
    .CONST和 .STACK所定義的段組名。
  (3)@stack 堆棧段的段名或段組名。

  下面的舉例說明預定義符號的使用方法。在完整的段定義情況下,在程序的一開始,需要用段名裝入數據段寄存器,如例4.1中的
       mov   ax,data_seg1
       mov   ds,ax
  若用簡化段定義,則數據段只用.data來定義,而并未給出段名,此時可用
       mov   ax,@data
       mov   ds,ax
  這里預定義符號@data就給出了數據段的段名。


  4.簡化段定義舉例

例4.3
   
.MODEL   SMALL
   .STACK   100H    ; 定義堆棧段及其大小
   .DATA         ; 定義數據段
       .
       .
       .
   .CODE         ; 定義代碼段
 START:           ; 起始執行地址標號
   MOV     AX, @DATA ; 數據段地址
   MOV     DS, AX   ; 存入數據段寄存器
       .
       .
       .
   MOV    AX, 4C00H
   INT    21H
   END    START    ; 程序結束


  從例4.3可以看出,簡化段定義比完整的段定義簡單得多。但由于完整的段定義可以全面地說明段的各種類型與屬性,因此在很多情況下仍需使用它。


posted on 2009-12-25 13:29 小默 閱讀(2547) 評論(0)  編輯 收藏 引用 所屬分類: Language

導航

統計

留言簿(13)

隨筆分類(287)

隨筆檔案(289)

漏洞

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产裸体写真av一区二区| 亚洲一区成人| 中文国产成人精品| 日韩一级欧洲| 亚洲尤物视频网| 午夜精品福利视频| 久久国产一区二区三区| 可以看av的网站久久看| 美女被久久久| 亚洲国产精选| 亚洲作爱视频| 亚洲欧美国产视频| 久久久夜夜夜| 欧美视频中文在线看| 国产欧美精品一区二区三区介绍| 国产亚洲精品福利| 91久久久久久久久久久久久| 亚洲天堂视频在线观看| 香蕉成人啪国产精品视频综合网| 久久久久网址| 日韩系列欧美系列| 午夜一级久久| 欧美精品免费观看二区| 国产丝袜美腿一区二区三区| 在线观看一区二区精品视频| 亚洲视频一二区| 狼狼综合久久久久综合网| 日韩午夜高潮| 久久久亚洲国产天美传媒修理工| 欧美另类videos死尸| 国产亚洲欧美另类一区二区三区| 亚洲精品日日夜夜| 久久网站免费| 亚洲系列中文字幕| 欧美国产一区二区在线观看| 国产精品一区二区女厕厕| 亚洲国产精品va在线看黑人| 欧美在线免费观看亚洲| 一区二区日韩| 蜜臀久久99精品久久久画质超高清 | 国产一区二区三区最好精华液| 在线观看国产日韩| 欧美一区二区三区视频在线| 亚洲精品视频在线观看免费| 久久手机免费观看| 国产精品私房写真福利视频| 一区二区欧美亚洲| 欧美黄色一区| 久久综合久久美利坚合众国| 国产欧美日韩精品a在线观看| 中文网丁香综合网| 99xxxx成人网| 欧美日韩在线不卡一区| 99ri日韩精品视频| 91久久在线| 欧美连裤袜在线视频| 日韩视频欧美视频| 最新亚洲视频| 欧美日韩精品高清| 亚洲图片欧美日产| 夜色激情一区二区| 国产精品男人爽免费视频1| 午夜精品久久久久久久久久久久| 一区二区三区四区国产| 欧美日韩一区二区三区在线视频| 99综合在线| 一区二区欧美国产| 国产精品成人免费精品自在线观看| 中文在线资源观看视频网站免费不卡| 亚洲激情视频在线| 欧美三级在线视频| 午夜在线观看免费一区| 亚洲一区二区黄色| 国产亚洲福利| 另类春色校园亚洲| 美女精品自拍一二三四| 亚洲黄页视频免费观看| 亚洲美女免费精品视频在线观看| 欧美日韩亚洲一区二区三区四区| 亚洲影院在线| 久久精品国产亚洲a| 亚洲高清在线播放| 亚洲每日更新| 国产精品自拍三区| 亚洲电影免费观看高清| 欧美日韩一区二区三区四区在线观看 | 亚洲国产成人在线播放| 91久久嫩草影院一区二区| 国产精品家庭影院| 欧美综合国产精品久久丁香| 久久国产精品久久w女人spa| 亚洲成人影音| 一区二区三区久久精品| 黄色成人在线观看| 日韩一级大片| 狠狠色丁香久久婷婷综合丁香| 欧美成人中文字幕| 国产精品成人久久久久| 女同一区二区| 国产精品初高中精品久久| 免费在线亚洲| 国产欧美精品va在线观看| 你懂的网址国产 欧美| 国产精品v亚洲精品v日韩精品 | 欧美亚洲在线| 最新亚洲电影| 欧美在线电影| 亚洲午夜电影网| 久久综合久久久久88| 午夜精品美女自拍福到在线| 欧美成人午夜激情在线| 久久久国产精彩视频美女艺术照福利| 欧美黄色片免费观看| 久久久精品性| 国产精品腿扒开做爽爽爽挤奶网站 | 亚洲国产欧美另类丝袜| 亚洲一区二区三区免费观看| 亚洲精品影视在线观看| 欧美中文字幕不卡| 午夜精品久久久| 欧美猛交免费看| 亚洲国产精品电影| 久久国产精品亚洲va麻豆| 亚洲欧美日韩精品| 欧美日韩高清一区| 欧美激情一区在线观看| 在线成人激情黄色| 欧美在线观看一区二区三区| 午夜精品影院| 欧美特黄一区| 制服丝袜亚洲播放| 亚洲一区高清| 欧美伦理影院| 99视频精品全国免费| 一级成人国产| 欧美精品黄色| 亚洲精品在线免费| 在线视频一区观看| 欧美三级欧美一级| 亚洲特级片在线| 亚洲欧美日韩久久精品| 国产精品久久久久天堂| 亚洲网站在线观看| 欧美一区二区三区男人的天堂| 国产精品女人久久久久久| 亚洲一区三区在线观看| 欧美亚洲网站| 国产日韩在线看| 久久伊人亚洲| 欧美激情国产精品| 一本久久综合亚洲鲁鲁五月天| 欧美日韩另类国产亚洲欧美一级| 日韩视频三区| 午夜精品久久久99热福利| 国产精品实拍| 久久久一区二区| 亚洲精品国产精品乱码不99按摩| 中文av一区特黄| 国内精品久久久久影院薰衣草| 麻豆av一区二区三区久久| 亚洲精品日产精品乱码不卡| 亚洲欧美日韩国产成人| 黄色日韩精品| 欧美片第1页综合| 亚洲综合精品四区| 男人的天堂亚洲| 亚洲在线播放| 亚洲高清免费| 国产精品国产三级国产aⅴ入口| 午夜精品视频在线| 欧美国产日产韩国视频| 亚洲一区二区三区在线观看视频| 国产亚洲欧美一区二区| 欧美激情一二三区| 欧美一区二区视频免费观看 | 亚洲一区二区在线观看视频| 久久影院午夜片一区| 亚洲在线成人精品| 在线观看视频日韩| 国产精品嫩草影院av蜜臀| 美女成人午夜| 亚洲欧美电影在线观看| 91久久精品美女| 久久综合狠狠| 亚洲免费视频观看| 最新日韩在线| 狠狠久久亚洲欧美专区| 国产精品久久久一本精品| 理论片一区二区在线| 午夜精品久久久久影视| 日韩视频一区二区三区在线播放| 久久亚洲综合色一区二区三区| 中日韩高清电影网| 亚洲第一伊人| 狠狠色狠色综合曰曰| 国产精品国产三级欧美二区| 欧美韩国在线| 欧美成人69av| 欧美a级大片| 久久久之久亚州精品露出|