<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MASM中Group的作用及內(nèi)存模型

      Masm5以后推出的simplified segment模式及.model標(biāo)準(zhǔn)模型中,都將段組合成一個(gè)group,group的作用及優(yōu)點(diǎn)是什么呢?

      一、Group的作用

      ??將組(group)后的所有段加入一個(gè)組,位于這些段內(nèi)的的label(標(biāo)號(hào))或variables(變量)的偏移地址都參照Group的起始地址進(jìn)行計(jì)算,而不是所在段的起始地址進(jìn)行計(jì)算:

      ??1、多數(shù)據(jù)段代碼舉例如下

      assume cs:codesg,ss:stacksg,ds:datasg1,es:datasg2
      ;-------------------------------------------
      stacksg segment stack
          db 100 dup (0)
      stacksg ends
      ;-------------------------------------------
      datasg1 segment 
          var1 db 6
      datasg1 ends
      ;-------------------------------------------
      datasg2 segment 
          var2 db 9
      datasg2 ends
      ;-------------------------------------------
      codesg segment
          start:
      ;-------------------------------------------
          mov al,var1
          mov al,var2
      ;-------------------------------------------
          mov ax,4c00h
          int 21h
      codesg ends
      end start

      ??如果不定義組,則var1和var2的偏移地址都是0000,編譯后代碼如下:

      ??如將datasg1和datasg2編入組:

      mygroup group datasg1,datasg2
      assume cs:codesg,ss:stacksg,ds:mygroup

      ??則編譯后代碼如下:

      ??可見,編入組后var1和var2都參照mygroup的起始地址計(jì)算偏移地址。?

      ??2、多代碼段代碼舉例如下

      assume cs:codesg,ss:stacksg,ds:datasg
      ;-------------------------------------------
      stacksg segment stack
          db 100 dup (0)
      stacksg ends
      ;-------------------------------------------
      datasg segment 
          var1 db 6
      datasg ends
      ;-------------------------------------------
      codesg segment
          start:
      ;-------------------------------------------
          mov al,var1
          jmp far ptr funone
      ;-------------------------------------------
          mov ax,4c00h
          int 21h
      codesg ends
      ;-------------------------------------------
      assume cs:excode
      excode segment
          funone:
          mov ax,2222h
      excode ends
      ;-------------------------------------------
      end start

      ??其中jmp funone由于已經(jīng)跨段,所以應(yīng)該是jmp far ptr funone,如果改成jmp funone,編譯就會(huì)出現(xiàn)錯(cuò)誤

      ??

      ??將2個(gè)代碼段加到一個(gè)組中,則可以直接jmp funone,代碼如下:

      cgroup group codesg,excode
      assume cs:cgroup,ss:stacksg,ds:datasg
      ;-------------------------------------------
      stacksg segment stack
          db 100 dup (0)
      stacksg ends
      ;-------------------------------------------
      datasg segment 
          var1 db 6
      datasg ends
      ;-------------------------------------------
      codesg segment
          start:
      ;-------------------------------------------
          mov al,var1
          jmp  funone
      ;-------------------------------------------
          mov ax,4c00h
          int 21h
      codesg ends
      ;-------------------------------------------
      excode segment
          funone:
          mov ax,2222h
      excode ends
      
      end start

      ??邏輯上codesg和excode組合成一個(gè)段,段地址是cgroup的首地址(也就是組中第一個(gè)代碼段的地址)。

      ??注意:

      ??1、assume ds:mygroup、assume cs:cgroup語句不能少(即將段地址和組地址進(jìn)行關(guān)聯(lián)),否則組定義無意義。

      ??2、加入組的第一個(gè)段和最后一個(gè)段之間的距離不能超過65535Byte(想想為什么)

      ??3、Group并不改變段在內(nèi)存的位置,只是改變組內(nèi)代碼和數(shù)據(jù)的訪問方式:因?yàn)槎x在不同段的代碼需要通過far ptr來跨段訪問 ,數(shù)據(jù)則需要改變段寄存器來訪問,即使根據(jù)實(shí)際位置并不需要這么做。group將所有屬于組內(nèi)的代碼和數(shù)據(jù)在邏輯上按屬于同一段的方式來訪問,這個(gè)段的段地址就是group的首地址。

      二、Group的優(yōu)點(diǎn)

      ??這樣做的好處是cpu在代碼跳轉(zhuǎn)或數(shù)據(jù)訪問時(shí),段寄存器不用變更(都參照group的起始地址),減少跨段訪問操作,加快程序的執(zhí)行速度。

      三、Group知識(shí)擴(kuò)展

      ??Mams5后對段的定義即劃分進(jìn)行了簡化,并給出了標(biāo)準(zhǔn)化建議。如按照標(biāo)準(zhǔn)化定義段,還可以與c、basic、pascal等高級(jí)語言進(jìn)行相互調(diào)用。

      ??.model tiny/small/medium/compat/large/huge(6種內(nèi)存模型)

      ??tiny,代碼和數(shù)據(jù)在一個(gè)段中,整個(gè)程序只有一個(gè)段。

      ??small,代碼只有一個(gè)段,數(shù)據(jù)只有一個(gè)段。

      ??medium,數(shù)據(jù)只有一個(gè)段,代碼可存在多個(gè)段。

      ??compat,代碼只有一個(gè)段,數(shù)據(jù)可存在多個(gè)段。

      ??large,代碼和數(shù)據(jù)都可以有多個(gè)段。

      ??huge,代碼和數(shù)據(jù)都可以有多個(gè)段,且data array可以超過64K。

      ??

      ??.model指令還自動(dòng)定義group和assume指令,將相應(yīng)的段加入group,并將段寄存器與group關(guān)聯(lián),如.model small,就會(huì)自動(dòng)生成

      dgroup group _data,const,_bss,stack
      assume ds:dgroup。

      ??但注意,這里需要手動(dòng)為ds賦值:

      mov ax,dgroup
      mov ds,ax
      posted @ 2024-05-15 00:42  美洲象  閱讀(89)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产午夜福利精品视频| 电影在线观看+伦理片| 精品无码一区二区三区在线| 九九热在线免费视频观看| 国产成人午夜精品永久免费| 激情国产一区二区三区四区小说| 99久久精品费精品国产一区二| 国产精品国语对白一区二区| 国产色悠悠在线免费观看| 无码人妻一区二区三区AV| 欧美国产日韩久久mv| 少妇人妻精品无码专区视频| 亚洲日本VA午夜在线电影| 香港| 亚洲精品一区三区三区在| 国产一区二区高清不卡| 99久久久无码国产精品免费| 少妇爽到呻吟的视频| 免费人成在线观看品爱网| 99久久er热在这里只有精品99 | 国产乱精品一区二区三区| 国产高清自产拍AV在线| 博乐市| 网友自拍视频一区二区三区| 高清中文字幕国产精品| 欧美、另类亚洲日本一区二区| av无码久久久久不卡网站蜜桃| 国内精品久久久久影院网站| www夜片内射视频日韩精品成人| 欧美成人精品手机在线| 日韩精品国产精品十八禁| 丝袜美腿亚洲综合在线观看视频| 色九九视频| 国产一区二区三中文字幕| 久热这里只有精品视频3| 欧美国产日韩在线三区| 午夜精品一区二区三区成人| 国产欧美另类精品久久久| 日本夜爽爽一区二区三区| 久久亚洲精品国产精品尤物| 香蕉亚洲欧洲在线一区|