九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
80X86尋址方式總結(jié)

一:概論
    80x86匯編程序都是分段程序設(shè)計結(jié)構(gòu),每個程序段都有一個開始地址:段基址。在保護模式下段基址要由16位的段選擇子得到,這些段選

擇子存放在六個段寄存器(CS,SS,DS,ES,F(xiàn)S,GS)中:
    代碼段總是由 CS 段寄存器來指示;
    堆棧段總是由 SS 段寄存器來指示;
    字符處理指令總是使用 ES 段寄存器作為目標操作數(shù)的段寄存器;
    一般的數(shù)據(jù)段可用 DS、ES、FS、GS來指示,但 DS 作為數(shù)據(jù)段的默認段寄存器,用它來尋址比其它幾個段寄存器的效率高,因此最好安排 DS 尋址最常引用的數(shù)據(jù)段,而 ES、FS、GS去尋址一些不常用的數(shù)據(jù)段。

    段內(nèi)偏移地址(某個字節(jié)相對段基址的偏移量)也被稱為有效地址 EA(effective address),它由以下4個部分組成:

    EA  =  基址  +  (變址  *  比例因子)  +  位移量

    基址、變址、位移量的值可正可負,比例因子只能為正。

    1:基址
    (32位尋址):
        1):如果基址寄存器是  ESP或EBP,則段寄存器為 SS;
        2):如果基址寄存器是其它通用寄存器,則段寄存器為 DS;
    (16位尋址):
        基址寄存器可以是  BX  或  BP

    2:變址
    (32位尋址):
        變址寄存器可以為除  ESP  之外的32位通用寄存器
    (16位尋址):
        變址寄存器可以是  SI  或  DI
    3:比例因子
        一個常數(shù),可取  1、2、4、8。
    4:位移量
        一個8位、16位、32位的常數(shù)。

二:詳解
    默認情況下,存儲器尋址使用DS數(shù)據(jù)段,可以使用段寄存器來顯式指出選擇的段。


    1:立即尋址
       對多字節(jié)立即數(shù),高字節(jié)放在寄存器高位,低字節(jié)放在寄存器低位。
       例:
           MOV  BL,43                ;把十進制數(shù)43放入BL中
           MOV  AX,98H             ;把十六進制數(shù)98H放入AX中
           MOV  AL,'A'                 ;把字符'A'的ASCII碼放入AL中
           MOV  CX,'AB'             ;把字符'AB'的ASCII碼放入CX中

    2:寄存器尋址
       指令中必須是同長的寄存器

    3:直接尋址
       指令中直接提供源操作數(shù)的偏移地址,它作為代碼的一部分存放在代碼段中。
       例:
           MOV  BL,DS:[00300H]              ;把DS數(shù)據(jù)段中偏移地址為300H的字節(jié)復(fù)制到BL
           MOV  CX,ES:[00300H]              ;把ES數(shù)據(jù)段中偏移地址為300H的字復(fù)制到CX
           MOV  EAX,DwordVar                 ;把DS數(shù)據(jù)段中DwordVar單元復(fù)制到EAX
           MOV  CL,ByteVar                       ;把DS數(shù)據(jù)段中ByteVar單元復(fù)制到CL


    4: 寄存器間接尋址
       操作數(shù)的有效地址存放在指令指明的寄存器中,能夠用作間接尋址的寄存器有:
       EAX,EBX,ECX,EDX,ESI,EDI --> 使用  DS  作為段寄存器
       ESP,EBP                 --> 使用  SS  作為段寄存器
       例:
           LEA  EBX, ARRAY                  ;把數(shù)組開始地址送EBX
           MOV  AL, [EBX]                   ;訪問數(shù)組的第0個元素,若要訪問其它元素,只需增加數(shù)組索引EBX的值

           MOV  AX, [EBP]                    ;把SS段中EBP指向的字單元復(fù)制到 AX
           MOV  [EBP], AX                    ;把AX的值復(fù)制到SS段中EBP指向的單元
           MOV  [EDI], AL                     ;把AL的值復(fù)制到DS段中EDI指向的單元
           MOV  AL, [EDX]                    ;把DS段中EDX指向的字節(jié)單元復(fù)制到 AL

    5:寄存器相對尋址
       有效地址EA等于寄存器R中的內(nèi)容與位移量X的和,即  EA  =  X  +  [R],該方式適用于數(shù)組、表格處理。
       EAX,EBX,ECX,EDX,ESI,EDI     -->    使用  DS  作為段寄存器
       ESP,EBP                                     -->    使用  SS  作為段寄存器
       例:
           MOV  AX, Table[ESI]                ;Table中存放表的首地址,ESI存放要訪問的表項的索引
           MOV  AX, [Table + ESI]            ;(MOV  AX, [Table + ESI])  == (MOV  AX, Table[ESI])


           MOV  AX, 100H[ESI]                      ;把DS段中ESI加100H的字存儲單元的內(nèi)容復(fù)制到 AX
           MOV  ARRAY[EDI], AL                   ;把AL的值復(fù)制到DS段中ARRAY中的第EDI字節(jié)單元中
           MOV  LIST[EDI+3], AX                 ;把AX的值復(fù)制到DS段中EDI+LIST+3的字單元中
           MOV  ARRAY[EBX],EAX                ;把EAX的值復(fù)制到DS段中ARRAY+EBX的雙字單元中

    6:基址變址尋址
       ESP不能作為變址寄存器。匯編器按如下規(guī)則區(qū)分基址寄存器和變址寄存器:指令的第二操作數(shù)中的第一個寄存器為基址寄存器,第二

個寄存器為變址寄存器。比如 MOV  EAX, [EDX][ESI](或MOV  EAX, [EDX+ESI])中,EDX  為基址寄存器,ESI  為變址寄存器。該方式適用

于數(shù)組、表格的處理。
       例:
           MOV  AX, [EBX+ESI]                 ;DS段中地址為EBX+ESI的存儲單元的字數(shù)據(jù)送AX
           MOV  AX, [EBP+ESI]                 ;SS段中地址為EBP+ESI的存儲單元的字數(shù)據(jù)送AX
           MOV  AX, ES:[EBX+ESI]           ;ES段中地址為EBX+ESI的存儲單元的字數(shù)據(jù)送AX

    7:相對基址變址尋址
       該方式適用于二維數(shù)組的尋址。
       EA  =  X  +  [BP]  +  [IR]
       例:
           MOV  AX,  Disp[EBX][EDI] 或
           MOV  AX,  Disp[EBX+EDI] 或
           MOV  AX,  [Disp+EBX+EDI]

    以下三種方式中,任何32位通用寄存器都能用作基址寄存器,除ESP之外的32位通用寄存器均可作為變址寄存器;
    若比例因子為1,指令的第二操作數(shù)中的第一個寄存器為基址寄存器,第二個寄存器為變址寄存器。若基址寄存器為EBP或ESP,則默認的段
寄存器是SS;若基址寄存是其它的寄存器,則默認的段寄存器是DS。
    若比例因子為2、4、8,則與比例因子相乘的那個寄存器是變址寄存器。

    8:比例變址尋址方式
       EA  =  X  +  [IR  *  K]
       和寄存器相對尋址相比增加了比例因子,優(yōu)點在于:對元素大小為2、4、8字節(jié)的數(shù)組,可在變址寄存器中給出數(shù)組元素的下標。
       例:
           MOV  EAX,  ARRAY[ESI*4]           ;將ARRAY數(shù)組中第  (ESI)  個元素送EAX,其中ARRAY數(shù)組中元素大小為4

    9:基址比例變址尋址
       EA  =  [BR]  +  [IR  *  K]
       例:
           LEA  EBP, ARRAY                         ;把數(shù)組開始地址送EBX
           MOV  EAX,  [EBP][ESI*4]           ;將ARRAY數(shù)組中第  (ESI)  個元素送EAX,其中ARRAY數(shù)組中元素大小為4

    10:相對基址比例變址尋址
       EA  =  X  +  [BR]  +  [IR  *  K]
       例:
           MOV  AL,  0040400H[EBX][ESI*2]          

           MOV  [EAX+EDI*2+15H],  DX              ;  把DX寄存器的內(nèi)容復(fù)制到數(shù)據(jù)段的一存儲單元,
                                                                                  ;  該存儲單元EA = EAX+EDI*2+15H

           MOV  AL, [EBP+ESI*2-30H]                     ;  把堆棧中的一字節(jié)單元的內(nèi)容復(fù)制到AL中,
                                                                                  ;  該存儲單元EA = EBP+ESI*2-30H


參考資料:<Win32匯編語言程序設(shè)計教程>    機械工業(yè)出版社    嚴義、包健、周尉等編著
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
匯編語言之寄存器(詳細介紹)
匯編學習 1 寄存器的作用 尋址方式 - DraculaW - JavaEye技術(shù)網(wǎng)站
七種尋址方式(立即尋址、寄存器尋址)
匯編的8種尋址方式,以及2個默認段寄存器
80386ASM程序設(shè)計基礎(chǔ)(二)
計算機指令系統(tǒng)的指令格式、尋址方式、指令種類及與C代碼的對照
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服