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

            內存尋址

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


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

             


            |---------->0B1F就是"樓房"------>段地址
            |
            |???????? ?|------>右邊的就是"單元號"--->偏移地址
            |??????? ? |
            |???????? ?|??????????? |-------->這部分就是"門戶號"----->變地址
            |???????? ?|????????? |<------------------------------------------>|
            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
            '
            '
            '
            [省略]

            看完這個圖之后,是不是就很明了呢?但是聰明的人就會有疑問,那我們怎么走進"門戶號(家)"呢?問得好,所以了為了可以走進"門戶號(家)",就出現了一個叫做"尋址方式"的概念!說白了,就是教你如何找到這個"門戶號(家)".呵呵!

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

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

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

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

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


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


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


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

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


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

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

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

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

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

            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 ;建立輸入字符串緩沖區
            mov ah,0ah
            int 21h
            xor si,si
            xor bx,bx
            mov bx,dx
            mov cx,[bx+si+1] ;看這個就是"寄存器間接尋址方式"
            xor ch,ch ;其目的就是取實際輸入字符個數
            mov di,cx
            lop: mov ah,2
            mov dx,[bx+di+1];看這又是"寄存器間接尋址方式"
            int 21h ;其目的就是取輸入字符串的最后一個字符
            dec di
            loop lop ;依次循環倒著輸出字符
            mov ah,4ch
            int 21h
            code ends
            end start

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

            posted on 2007-03-23 15:00 lele 閱讀(254) 評論(0)  編輯 收藏 引用

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆檔案

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久AⅤ人妻少妇嫩草影院| 亚洲欧美一区二区三区久久| 亚洲精品无码久久毛片| 国产AⅤ精品一区二区三区久久 | 国产精品99久久精品爆乳| 77777亚洲午夜久久多喷| 亚洲午夜久久久久久久久电影网| 国产成人精品综合久久久| 2021最新久久久视精品爱| 久久精品亚洲AV久久久无码| 久久久久久久久久久久久久| 一本色道久久99一综合| 久久综合噜噜激激的五月天| www性久久久com| 精品无码人妻久久久久久| 久久人人爽人人精品视频| 午夜精品久久久久久| 国产精品99久久久精品无码| 91精品国产综合久久久久久| 精品熟女少妇aⅴ免费久久| 亚洲国产精品综合久久网络 | 国产精品一区二区久久精品无码 | 青青青青久久精品国产| 免费一级欧美大片久久网 | 久久亚洲国产中v天仙www| 国产亚洲精久久久久久无码AV| 亚洲人成无码久久电影网站| 一本色道久久综合狠狠躁| 亚洲国产成人久久精品动漫| 亚洲国产成人久久综合野外| 粉嫩小泬无遮挡久久久久久| 久久久青草青青国产亚洲免观| 国产69精品久久久久9999APGF| 99久久精品免费看国产一区二区三区| 欧美日韩成人精品久久久免费看| 色偷偷88888欧美精品久久久 | 青青草原精品99久久精品66| 国产精自产拍久久久久久蜜| 亚洲AV成人无码久久精品老人| 久久99精品久久久久久不卡| 久久精品人人做人人爽电影蜜月 |