亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 匯編.txt

?? 會變語言實現的一些程序
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
           
——引自XXX高人語錄


我總是想這樣去做,可每每照貓畫虎反類犬


以下摘自 老羅的繽紛天地之《組合語言之藝術》
這里下載 http://asp.7i24.com/netcool/laoluo/collections/index.htm
直接下載 http://asp.7i24.com/netcool/laoluo/collections/downloads/eBooks/Assembly%20Art.chm



第四節 指令應用

--------------------------------------------------------------------------------

    匯編語言可以說是未經整理的、原始的計算機語言,讀者們大可下一番功夫,找出
其應用的規則,以發揮最高的效率。在下面,我僅就個人的經驗,提供一些淺見,以供
切磋研討。
    要寫好程序,首先應熟記8088指令的時鐘脈沖(Clock )及指令長度,一般匯編語
言手冊中,都詳列了與各指令相關的數據。「工欲善其事,必先利其器」,此之謂也。
    本節所討論的,是一般程序員容易忽略的細節,所有的例子都是從我所看過的一些
程序中摘錄下來的。看來沒什么大了不起,可是程序的效率,受到這些小地方的影響很
大。更重要的是,任何一個人,只要有「小事不做,小善不為」的習慣,我敢斷言,這
個人不會有什么大成就!
    我最近才查到 Effective Address (EA) 的時鐘值,我覺得沒有必要死記。原則上,
以寄存器為變量,做間接尋址時為5個時鐘,用直接尋址則為6個;若用了兩組變量,
則為7至9個,三組則為11或12個。
    為了便于敘述,下面以"T"表「時鐘脈沖」; "B"表字符。其中
    時鐘脈沖T = 1 / 振蕩頻率

一、避免浪費速度及空間

    匯編語言的效率建立在指令的運用上,如果不用心體會下列指令的有效用法,匯編
語言的優點就難以發揮。
  1,    CALL    ABCD
        RET
    這種寫法,是沒有用心的結果,共享了 4B,23T+20T,完全相同的功能,如:
        JMP     ABCD  或
        JMP     SHORT ABCD
    卻只要 2-3B,15T。
        此外,上述的CALL XXXX 是調用子程序的格式,在直覺認知上,與JMP XXXX完
全不同。對整體設計而言,是不可原諒的錯誤,偵錯的時候,也很難掌握全盤的理念。
        尤其是在精簡程序的時候,很可能會遇到 ABCD 這個子程序完全獨立,是則把
這段程序直接移到 ABCD 前,不僅能節省空間,而且使程序具有連貫性,易讀易用。

  2,    MOV     AX,0
    同樣,這條指令要 3B,4T,如果用:
        SUB     AX,AX 或
        XOR     AX,AX
    只要 2B,3T, 唯一要注意的是,后者會影響旗號,所以不要用在有旗號判斷的指
令前面。
        在程序寫作中,經常需要將寄存器或緩沖器清為0,有效的方法,是使某寄存
器保持為0,以便隨時應用。
        因為,MOV [暫存器],[暫存器] 只要 2B,2T, 即使是清緩沖器,也比直接填
0為佳。
        只是,如何令寄存器保持0,則要下一番功夫了。
        還有一種情況,就是在一回路中,每次都需要將 AH 清0,此時對速度要求很
嚴,有一個指令 CBW 原為將一 個字符轉換為雙字符,只需 1B,2T 最有效率。可是應
該注意,此時 AL 必須小于 80H,否則 AH 將成為負數。
  3,    ADD     AX,AX
    需要 2B,3T不如用:
        SHL     AX,1
    只要2B,2T。

  4,    MOV     AX,4
    除非這時 AH 必為0,否則,應該用:
        MOV     AL,4
    這樣會少一個字符。

  5,    MOV     AL,46H
        MOV     AH,0FFH
    為什么不寫成:
        MOV     AX,0FF46H
    不僅省了一個字符,四個時鐘,而且少打幾個字母!

  6,    CMP     CX,0
    需要 4B,4T, 但若用:
     OR      CX,CX
    完全相同的功能,但只要 2B,3T。再若用:
        JCXZ    XXXX
    則一條指令可以替代兩條,時空都省。不幸這條指令限用于CX ,對其他暫器無效。

  7,    SUB     BX,1
    這更不能原諒,4B,4T無端浪費。
        DEC     BX
    現成的指令,1B,2T為何不用?
        如果是
SUB     BL,1
也應該考慮此時 BH 的情況,若可以用
  DEC     BX
取代,且不影響后果,亦不妨用之。

  8,    MOV     AX,[SI]
        INC     SI
        INC     SI
    這該挨罵了,一定是沒有記熟指令,全部共4B,21T。
        LODSW
    正是為這個目的設計,卻只要 1B,16T。

  9,    MOV     CX,8
        MUL     CX
        寫這段程序之時應先養成習慣,每遇到乘、除法,就該打一下算盤。因為它們
太浪費時間。8位的要七十多個時鐘,16位則要一百多。所以若有可能,盡量設法用簡
單的指令取代。
        SHL     AX,1
        SHL     AX,1
        SHL     AX,1
     原來要 5B,137T,現在只要 6B,6T。如果CX能夠動用的話,則寫成:
   MOV     CL,3
   SHL     AX,CL
     這樣更佳,而且CL之值越大越有利。用CL作為計數專 用暫存器,不僅節省空間,
且因指令系在 CPU中執行,速 度也快。
        可是究竟快了多少? 我們做了些測試,以 SHL為例,在10MHZ 頻率的機器上,
作了3072 ×14270次,所測得時間為:
    指  令 :SHL   AX,CL         SHL   AX,n
          CL = 0 , 23 秒     n = 0 , 無效
   CL = 1 , 27 秒     n = 1 , 14 秒
          CL = 2 , 32 秒     n = 2 , 28 秒
          CL = 3 , 36 秒     n = 3 , 42 秒
          CL = 4 , 40 秒     n = 4 , 56 秒
          CL = 5 , 44 秒     n = 5 , 71 秒
          CL = 6 , 49 秒     n = 6 , 85 秒
          CL = 7 , 54 秒     n = 7 , 99 秒
        由此可知,用CL在大于2時即較分別執行有效。
        此外,亦可利用回路做加減法,但要算算值不值得,且應注意是否有調整余數
的需要。

10,    MOV     WORD PTR BUF1,0
        MOV     WORD PTR BUF2,0
        MOV     WORD PTR BUF3,0
        MOV     BYTE PTR BUF4,0
        ..
        我見過太多這種程序,一見就無名火起! 在程序中,最好經常保留一個寄存器
為0,以便應付這種情況。即使沒有,也要設法使一寄存器為0,以節省時、空。
        SUB     AX,AX
        MOV     BUF1,AX
        MOV     BUF2,AX
        MOV     BUF3,AX
        MOV     BUF4,AL

     14B,59T取代了 24B,76T,當然值得。只是,還是不 如事先有組織,考慮清楚各
個緩沖器間的應用關系。以前面舉的例來說,假定各緩沖器內數字,即為其實際位置關
系,則可以寫成:
      MOV     CX,3
  如已知 CH 為0,則用:
MOV     CL,3
        SUB     AX,AX
        MOV     DI,OFFSET BUF1
        REP     STOSW
        STOSB
    這段程序越長越占便宜,現在用10B,37T,一樣劃算。

11,子程序之連續調用:
        CALL    ABCD
        CALL    EFGH
        如果 ABCD,EFGH 都是子程序,且調用的次數甚多,則上述調用的方式就有待
商榷了。因為連續兩次調用,不僅時間上不劃算,空間也浪費。
        若ABCD一定與EFGH連用,應將ABCD放在EFGH之前:
        ABCD:
            ..
        EFGH:
            ..
        像這樣,只要調用ABCD就夠了,但這種情形多半是程序員的疏忽所致,如兩個
子程序必需獨立使用,而上述連續調用的機會超過兩次以上,則應該改為:
        CALL    ABCDEF
        而ABCDEF則應為:
        ABCDEF:
               CALL    ABCD
        EFGH:
            ..
        這樣的寫法速度不會變慢,而空間的節省則與調用的次數成正比。

12,常有些程序,當從緩沖器中取數據時,必須將寄存器高位置為0。如:
        SUB     AH,AH
        MOV     AL,BUFFER
     這時應該將 BUFFER 先設為:
        BUFFER  DB  ?,0
     然后用:
        MOV     AX,WORD PTR BUFFER
        如此,不但速度快了,空間也省了。

13,有時看來多了一個指令,但因為指令的特性,反而更為精簡。如:
OR ES:[DI],BH
OR ES:[DI+1],BL
    這樣需要8B,32T,如果改用下面的指令:
XCHG BL,BH
OR ES:[DI],BX
XCHG BH,BL
    則需7B,28T。

14,PUSH  及 POP  是保存寄存器原值的指令,都只需一個字符,但卻很費時間。
        PUSH  占 15T,POP 占12T,除非不得已,不可隨便使用。有時由于子程序說明
不清楚,程序員為了安全,又懶得檢查,便把寄存器統統堆在堆棧上。尤其是在系統程
序或子程序中,經常有到堆棧上堆、取的動作。實際上,花點功夫,把寄存器應用查清
楚,就可以增進不少效率。
        要知道,系統程序及某些子程序常常應用,有關速度的效率甚大,如果掉以輕
心,就是不負責任!
        保存原值的方法很多,其中較有效率的是放到一些不用的寄存器里。以我的經
驗,堆棧器用途最少,正好用作臨時倉庫。但最好的辦法,還是把程序中寄存器的應用
安排得合情合理,不要浪費,以免堆得太多。
        還有一種方法,是在該子程序中,不用堆棧的手續,但另設一個入口,先將寄
存器堆起,再來調用不用堆棧的子程序。這兩個不同的入口,可以分別提供給希望快速
處理,或需要保留寄存器原值者調用。
        當然,更簡單有效的方法,則是說明本段程序中某些寄存器將被破壞,而由調
用者自行保存之。

二、程序要條理通順

  1,在比較判斷的過程中,鄰近值不必連比。
        CMP     AL,0
        JE      ABCD0
        CMP     AL,1
        JE      ABCD1
        CMP     AL,2
        JE      ABCD2
        ..
    應為:
        CMP     AL,1
        JNE     ABCD0
    ABCD1:
        ..
    在標題為ABCD0 中,再作:
        JA      ABCD2
    這種做法端視時間效益而定,似此 ABCD1之速度最快。

  2,未經慎思的流程:
        ADD     AX,4
    ABCD:
        STOSW
        ADD     AX,4
        ADD     DI,2
        LOOP    ABCD
        ..
    稍稍動點腦筋,就好得多了:
    ABCD:
        ADD     AX,4
        STOSW
        INC     DI
        INC     DI
        LOOP    ABCD
        ..

  3,錯誤的處理方式:
        MOV     BX,SI
    ABCD:
        MOV     BX,[BX]
        OR      BX,BX
        JZ      ABCD1
        MOV     SI,BX
        JMP     ABCD
    ABCD1:
        LODSW
        ..
    上例應該寫成:
        MOV     BX,SI
    ABCD:
        LODSW
        OR      AX,AX
        JZ      ABCD1
        MOV     SI,BX
        JMP     ABCD
    ABCD1:
        ..

  4,錯誤的流程:
        TEST    AL,20H
        JNZ     ABCD
        CALL    CDEF[BX]
        JMP     SHORT ABCD1
    ABCD:
        CALL    CDEF[BX+2]
    ABCD1:
        ..
應該寫成:
        TEST    AL,20H
        JZ      ABCD
        INC     BX
        INC     BX
    ABCD:
        CALL    CDEF[BX]
    ABCD1:
        ..

  5,下面是時間的損失:
        PUSH    DI
        MOV     CX,BX
        REP     STOSB
        POP     DI
        PUSH,POP 很費時間,應為:
        MOV     CX,BX
        REP     STOSB
        SUB     DI,BX
        同理,很多時候稍稍想一下,就可省下一些指令:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区久激情瑜伽| 色哟哟精品一区| 久久99热这里只有精品| 三级在线观看一区二区| 亚洲国产va精品久久久不卡综合| 亚洲欧美精品午睡沙发| 国产精品理伦片| 国产精品久久久久久久午夜片| 国产精品免费aⅴ片在线观看| 欧美国产激情一区二区三区蜜月| 久久精品一区四区| 国产精品大尺度| 亚洲精品一二三四区| 亚洲一区二三区| 日日夜夜一区二区| 精品一区二区影视| 国产精品一区专区| 成人app在线| 色噜噜狠狠色综合欧洲selulu| 色狠狠一区二区三区香蕉| 在线观看亚洲精品视频| 3d成人动漫网站| 欧美电视剧在线观看完整版| 精品噜噜噜噜久久久久久久久试看 | 91国偷自产一区二区开放时间 | 一区二区三区国产精品| 一区二区三区高清| 日韩高清国产一区在线| 激情小说亚洲一区| 99久久er热在这里只有精品66| 欧美体内she精视频| 91精品久久久久久蜜臀| 欧美激情中文字幕| 亚洲成在人线在线播放| 狠狠网亚洲精品| 一本色道久久综合亚洲aⅴ蜜桃| 欧美日韩高清一区二区三区| 久久亚洲春色中文字幕久久久| 国产精品情趣视频| 亚洲福利视频三区| 国产精品一区二区果冻传媒| 91福利在线播放| 欧美电视剧免费全集观看| 国产农村妇女精品| 日韩精品欧美精品| 成人avav影音| 欧美大片免费久久精品三p| 亚洲天堂精品在线观看| 免费高清视频精品| 一本色道久久综合亚洲精品按摩| 日韩欧美亚洲另类制服综合在线| 国产精品久久久久影院老司| 日韩精品每日更新| 99久久久久免费精品国产| 日韩欧美一区在线观看| 亚洲欧美另类图片小说| 久久精品国产精品亚洲精品| 色香蕉久久蜜桃| 国产日韩v精品一区二区| 亚洲一卡二卡三卡四卡无卡久久| 极品美女销魂一区二区三区| 欧美日韩一区二区在线观看视频| 久久久99久久精品欧美| 丝袜诱惑制服诱惑色一区在线观看| 成人av电影在线| 久久综合久久综合亚洲| 午夜激情久久久| 色综合天天综合| 亚洲国产精品精华液2区45| 日本视频一区二区三区| 欧美亚洲国产bt| 亚洲欧美日韩一区二区三区在线观看| 麻豆国产91在线播放| 欧美色网一区二区| 亚洲图片欧美激情| 国产sm精品调教视频网站| 日韩免费看网站| 日韩制服丝袜av| 欧美精选一区二区| 亚洲午夜精品网| 在线免费观看视频一区| 国产成人一区二区精品非洲| 色婷婷综合久久久中文一区二区| 久久精品人人做人人爽人人| 精品一区二区免费视频| 91.xcao| 日日噜噜夜夜狠狠视频欧美人| 色老头久久综合| 樱桃视频在线观看一区| 99精品视频在线观看| 久久九九99视频| 国产九九视频一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产成人夜色高潮福利影视| 日韩美女主播在线视频一区二区三区| 亚洲一区二区偷拍精品| 在线观看国产精品网站| 亚洲精品v日韩精品| 色综合久久中文综合久久牛| 日韩码欧中文字| 一本一本大道香蕉久在线精品 | 国产亚洲精品aa午夜观看| 激情图区综合网| 久久综合九色综合久久久精品综合 | 国产美女精品一区二区三区| 亚洲精品在线观看网站| 国产美女久久久久| 欧美国产精品劲爆| 99re热这里只有精品免费视频 | 成人免费av资源| 中文字幕一区日韩精品欧美| 99精品视频一区| 亚洲欧美aⅴ...| 在线观看欧美日本| 天天综合色天天综合| 日韩西西人体444www| 狠狠色综合色综合网络| 中文字幕不卡在线| 一本久道久久综合中文字幕| 亚洲综合色成人| 欧美精品乱码久久久久久按摩| 美腿丝袜亚洲三区| 久久久www成人免费无遮挡大片| 懂色av一区二区在线播放| 亚洲欧美成人一区二区三区| 欧美日韩一区小说| 国产做a爰片久久毛片| 国产精品无人区| 欧美影视一区在线| 韩国v欧美v亚洲v日本v| 中文文精品字幕一区二区| 91在线小视频| 香蕉久久夜色精品国产使用方法 | 亚洲国产一区二区三区青草影视| 欧美日韩一区 二区 三区 久久精品| 日韩成人精品在线| 国产人成亚洲第一网站在线播放 | 久久精品视频免费观看| 亚洲午夜一区二区三区| 91免费视频观看| 午夜精品aaa| 国产欧美视频在线观看| 色噜噜狠狠一区二区三区果冻| 日本成人在线一区| 中文字幕久久午夜不卡| 欧美日韩视频在线第一区| 国产伦理精品不卡| 一区二区三区在线高清| 精品久久久久久久久久久久包黑料 | 国产精品九色蝌蚪自拍| 欧美日韩小视频| 国产盗摄一区二区三区| 亚洲成人av一区| 国产欧美一区二区精品性| 欧美性极品少妇| 成人晚上爱看视频| 日韩国产精品91| 18涩涩午夜精品.www| 精品久久国产老人久久综合| 在线欧美一区二区| 岛国精品在线播放| 蜜臀99久久精品久久久久久软件| 亚洲天堂2014| 久久久国际精品| 欧美一级一区二区| 色综合色狠狠天天综合色| 国产综合色视频| 日产欧产美韩系列久久99| 一区二区三区四区中文字幕| 欧美国产日产图区| 精品久久久久一区| 3d成人h动漫网站入口| 91毛片在线观看| 国产suv一区二区三区88区| 奇米一区二区三区| 亚洲一区二区三区精品在线| 国产精品乱码一区二三区小蝌蚪| 337p粉嫩大胆噜噜噜噜噜91av| 91精品一区二区三区久久久久久 | 中文字幕精品综合| 欧美精品一区二区蜜臀亚洲| 欧美日韩精品一区二区| 在线免费观看不卡av| 粉嫩av亚洲一区二区图片| 韩日欧美一区二区三区| 日本亚洲电影天堂| 亚洲成人自拍网| 亚洲主播在线播放| 亚洲精品欧美在线| 中文字幕中文字幕一区| 欧美激情一区二区三区蜜桃视频| 欧美成人精品二区三区99精品| 3d成人h动漫网站入口| 欧美疯狂做受xxxx富婆| 欧美亚洲愉拍一区二区| 91在线视频网址| 91小宝寻花一区二区三区| 国产不卡高清在线观看视频| 国产传媒日韩欧美成人| 国产乱子轮精品视频|