• <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>

            任我行

            一天一個(gè)腳印......
            每日一句:
            posts - 54, comments - 218, trackbacks - 1, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            關(guān)于在8086/88內(nèi)存尋址方式

            ?Writer:HSLY
            ?Excerpt:80x86匯編小站
            ?Preface:
            在學(xué)匯編時(shí),很多初學(xué)者對(duì)PC的尋址方式和很不理解......
            ?Content:

            ??? 在學(xué)匯編時(shí),很多初學(xué)者對(duì)PC的尋址方式和很不理解,甚至是很難理解。的確,這方面的知識(shí)是很抽象的,需要比較強(qiáng)的空間想象能力。尤其是我們?cè)谳斎胱址畷r(shí),那這些字符是如何進(jìn)行排列的呢?對(duì)于,這個(gè)問題,我相信很多初學(xué)者也是很難想象是如何排列。但是,我可以這樣比喻:內(nèi)存就是有很多棟“樓房”,“樓房”又是由“單元號(hào)”,“門戶號(hào)”組成,那“樓房”就相當(dāng)于內(nèi)存地址的段地址,“單元號(hào)”就相當(dāng)于內(nèi)存的的 偏移地址,“門戶號(hào)(家)”就相當(dāng)于“變地址”,而每個(gè)單元有16個(gè)"門戶號(hào)(家)",又當(dāng)我們找到"門戶號(hào)(家)"后,走進(jìn)這個(gè)"門戶號(hào)(家)"就會(huì)見到里面會(huì)有"人",而我們所說的人就是寄存器所指的"內(nèi)容"了,我畫個(gè)圖給你們看就會(huì)一目了然了。


            用DEBUG的D命令得出這樣的效果:

             


            |---------->0B1F就是"樓房"------>段地址
            |
            |???? |------>右邊的就是"單元號(hào)"--->偏移地址
            |???? |
            |???? |??????????? |-------->這部分就是"門戶號(hào)"----->變地址
            |???? |????????? |<------------------------------------------>|
            0B1F:0100 00 80 FF 02 75 05 C6 46-00 00 C3 E8 8C EB B4 3B
            0B1F:0110 CD 21 72 39 8B FA 33 C0-8B C8 49 26 34 00 0E 0B
            '
            '
            '
            [省略]

            看完這個(gè)圖之后,是不是就很明了呢?但是聰明的人就會(huì)有疑問,那我們?cè)趺醋哌M(jìn)"門戶號(hào)(家)"呢?問得好,所以了為了可以走進(jìn)"門戶號(hào)(家)",就出現(xiàn)了一個(gè)叫做"尋址方式"的概念!說白了,就是教你如何找到這個(gè)"門戶號(hào)(家)".呵呵!

            好現(xiàn)在都明白了嗎?那你們就看看我是怎么理解PC的尋址方式(通俗易懂):
            在這我就只介紹比較難理解的:

            1:寄存器直接尋址:
            你就想成:其實(shí)你已經(jīng)站在你要找的"門戶號(hào)(家)"面前了,直接敲門進(jìn)去就OK了!
            例子: MOV AX,[2000H]
            MOV AX,2000H -->2000H為存放操作數(shù)單元號(hào)的符號(hào)地址
            上面兩者是不等效的

            2:寄存器間接尋址方式:
            你就想成:你已經(jīng)站在你要找的"門戶號(hào)(家)"的"單元號(hào)",你要找到它,必須知道它在當(dāng)前"單元號(hào)"幾樓.假如它在6樓,那你就上到6樓就OK了!!注意,最高只有16樓,因?yàn)槭裁茨?那就用DEBUG的D命令看看呀,慢慢數(shù)哦,呵呵!!
            例子: MOV AX,[BX]

            計(jì)算公式: 物理地址=16d*(DS)+(BX)
            物理地址=16d*(DS)+(SI)
            物理地址=16d*(DS)+(DI)
            物理地址=16d*(SS)+(BP)

            3:寄存器相對(duì)尋址方式:
            你就想成:你要找的"門戶號(hào)(家)"其實(shí)就在你家的樓上或者樓下,你要找到它,就 必須知道它在你樓上幾樓,或者在樓下幾樓!就OK了!
            例子: MOV AX,COUNT[SI]
            MOV AX,[COUNT+SI]
            其中 COUNT為位移量的符號(hào)地址


            計(jì)算公式: 物理地址=16d*(DS)+(BX)+8位位移量
            或+(SI) 或 16位位偏移量
            或+(DI)


            物理地址=16d*(SS)+(BP)+8位偏移量


            4:基址變址尋址方式:
            你就想成:你要找的"門戶號(hào)(家)"是跟住在同一棟樓的不同"單元號(hào)",你要找到它,就必須知道它是該棟的哪個(gè)"單元號(hào)",并且住在幾樓!那樣你就可以找到它了 !
            例子: MOV AX,[BX][DI]
            MOV AX,[BX+DI]

            計(jì)算公式: 物理地址=16d*(DS)+(BX)+(SI)
            或+(DI)
            物理地址=16d*(SS)+(BP)+(SI)
            或+(DI)


            5:相對(duì)基址變址尋址方式:
            你就想成:你就想成:你要找的"門戶號(hào)(家)"是跟住在同一棟樓的不同"單元號(hào)",它比你高幾層樓或者低幾層樓,然后用的你目前的樓數(shù)+/-就可以得出你要找的住在幾樓了!
            例子: MOV,AX,MASK[BX][SI]
            MOV,AX,MASK[BX+SI]
            MOV,AX,[MASK+BX+SI]
            以上三個(gè)例子是等效的!!

            計(jì)算公式: 物理地址=16d*(DS)+(BX)+(SI)+8位位移量
            或+(DI) 或 16位位偏移量
            物理地址=16d*(SS)+(BP)+(SI)+8位位移量
            或+(DI) 或 16位位偏移量
            ---------------------------------------------------------------------
            呵呵,終于寫完了這篇教程,好累哦!! 是不是覺得我的思維很另類呀,要?jiǎng)?chuàng)新呀!
            書上太理論了,我就創(chuàng)新一個(gè),不知道你們看得懂嗎?
            呵呵,反正你們不要
            !@##)(#$*!@(@我就行了,我很努力寫了!!!

            下面,我舉個(gè)程序例子,讓你們加深印象!!!

            ----------------------------------------------------------------------
            編程步驟:
            1: 建立緩沖區(qū),為輸入字符串(最多能輸入9個(gè))
            2: 取緩沖區(qū)的首地址,以便后面進(jìn)行"寄存器間接尋址方式"
            3: 利用"寄存器間接尋址方式"取得實(shí)際輸入字符個(gè)數(shù),以便確認(rèn)循環(huán)次數(shù)
            4: 利用"寄存器間接尋址方式"輸入字符串的最后一個(gè)字符
            5: 利用LOOP指令和2號(hào)顯示功能來進(jìn)行倒著顯示
            ----------------------------------------------------------------------

            ;程序功能:任意輸入幾個(gè)字符(最多能輸入9個(gè)),按回車則倒著輸出!

            data segment
            user_string db 10,0,10 dup(?)
            data ends
            code segment
            assume cs:code,ds:data
            start: mov ax,data
            mov ds,ax
            lea dx,user_string ;建立輸入字符串緩沖區(qū)
            mov ah,0ah
            int 21h
            xor si,si
            xor bx,bx
            mov bx,dx
            mov cx,[bx+si+1] ;看這個(gè)就是"寄存器間接尋址方式"
            xor ch,ch ;其目的就是取實(shí)際輸入字符個(gè)數(shù)
            mov di,cx
            lop: mov ah,2
            mov dx,[bx+di+1];看這又是"寄存器間接尋址方式"
            int 21h ;其目的就是取輸入字符串的最后一個(gè)字符
            dec di
            loop lop ;依次循環(huán)倒著輸出字符
            mov ah,4ch
            int 21h
            code ends
            end start

            -----------------------------------------------------------------------
            完工了

            少妇熟女久久综合网色欲| 国产精品久久99| 久久亚洲AV永久无码精品| 久久久久高潮综合影院| 久久大香香蕉国产| 久久精品三级视频| 久久久久久久97| 久久婷婷五月综合色99啪ak| 中文字幕无码精品亚洲资源网久久| 精品一区二区久久久久久久网站| 国产毛片久久久久久国产毛片| 免费久久人人爽人人爽av| 91精品国产综合久久香蕉 | 一本一本久久A久久综合精品 | 久久人搡人人玩人妻精品首页| 狠狠色丁香久久婷婷综合_中| 99久久国产综合精品麻豆| 怡红院日本一道日本久久 | 中文字幕久久精品| 久久免费美女视频| 欧美一区二区三区久久综合 | 国产精品美女久久久| 久久亚洲中文字幕精品一区四| 国产精品久久国产精麻豆99网站| 四虎久久影院| 久久WWW免费人成—看片| 欧美久久精品一级c片片| 久久精品国产第一区二区三区 | 99re久久精品国产首页2020| 99精品久久久久久久婷婷| 无码8090精品久久一区| 女同久久| 久久综合亚洲色HEZYO社区| 久久天天躁狠狠躁夜夜2020老熟妇 | 欧美黑人激情性久久| 无码人妻久久一区二区三区免费丨| 亚洲欧美精品一区久久中文字幕| 久久天天日天天操综合伊人av | 久久精品蜜芽亚洲国产AV| 久久久久女人精品毛片| 久久国产精品99国产精|