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

            luqingfei@C++

            為中華之崛起而崛起!
            兼聽則明,偏聽則暗。

            匯編語言--數(shù)據(jù)處理的兩個基本問題

             

            數(shù)據(jù)處理的兩個基本問題

             

            匯編語言中數(shù)據(jù)位置的表達

            在匯編語言中如何表達數(shù)據(jù)的位置?

            匯編語言中用三個概念來表達數(shù)據(jù)的位置:

            1) 立即數(shù)(idata

            2) 寄存器

            3) 內(nèi)存(段地址SA和偏移地址EA

             

             

            尋址方式

            當數(shù)據(jù)存放在內(nèi)存中的時候,我們可以用多種方式來給定這個內(nèi)存單元的偏移地址,這種定位內(nèi)存單元的方法一般被稱為尋址方式。

             

             

            指令要處理的數(shù)據(jù)有多長?

            8086CPU的指令,可以處理兩種尺寸的數(shù)據(jù),byteword

            所以在機器指令中要指明指令進行的是字操作還是字節(jié)操作。

            1) 通過寄存器名指明要處理的數(shù)據(jù)的尺寸。

            2) 在沒寄存器名存在的情況下,用操作符X ptr指明內(nèi)存單元的長度,X在匯編指令中可以為wordbyte。

            3) 其他方法,有些指令默認了訪問的是字單元還是字節(jié)單元,比如,push[1000H]就不用指明訪問的是字單元還是字節(jié)單元,因為push指令只進行字操作。

             

             

            尋址方式的綜合應用

            8086CPU提供的如[bx+si+idata]的尋址方式為結(jié)構(gòu)化數(shù)據(jù)的處理提供了方便。

             

             

            div指令

            div是除法指令。

            1) 除數(shù):有8位和16位兩種,在一個寄存器或內(nèi)存單元中。

            2) 被除數(shù):默認放在AXDXAX中,如果除數(shù)為8位,被除數(shù)則為16位,默認在AX中存放;如果除數(shù)為16位,被除數(shù)則為32位,在DXAX中存放,DX存放高16位,AX存放低16位。

            3) 結(jié)果:如果除數(shù)為8位,則AL存儲除法操作的商,AH存儲除法操作的余數(shù);如果除數(shù)為16位,同AX存儲除法操作的商,DX存儲除法操作的余數(shù)。

            格式如下:

            div reg

            div 內(nèi)存單元

             

            div byte ptr ds:[0]     ;除數(shù)指定為8

            (al) = (ax)/((ds)*16+0)的商;

            (ah)=(ax)/((ds)*16+0)的余數(shù)。

             

            div word ptr es:[0]

            (ax) =( (dx)*10000H+(ax))/((ex)*16+0)的商;

            (dx)= ( (dx)*10000H+(ax))/((ex)*16+0)的余數(shù)。

             

            div byte ptr [bx+si+8]

            (al)=(ax)/((ds)*16+(bx)+(si)+8)的商;

            (ah)= (ax)/((ds)*16+(bx)+(si)+8)的余數(shù)。

             

            div word ptr [bx+si+8]

            (ax)=((dx)*10000H)+(ax))/((ds)*16+(bx)+(si)+8))的商;

            (ax)=((dx)*10000H)+(ax))/((ds)*16+(bx)+(si)+8))的余數(shù)。

             

             

            實踐:100001/100

            被除數(shù)100001大于65535FFFF、十六位),不能用ax寄存器存放,所以我們只能用dxax兩個寄存器聯(lián)合存放100001,也就是說要進行16位的除法,除數(shù)100小于255,可以在一個8位寄存器中存放,但是,因為被除數(shù)是32位的,除數(shù)應為16位,所以要用一個16位寄存器來存放除數(shù)100。

            100001表為十六進制:186A1H。

            mov dx,1

            mov ax,86A1H

            mov bx,100

            div bx

             

            程序執(zhí)行后,(ax)=03E8H(即1000),(dx)=1(余數(shù)為1)。

             

            計算1001/100

            被除數(shù)1001可用ax寄存器存放。除數(shù)100可用8位寄存器存放。即可進行8位的除法。

            mov ax,1001

            mov bl,100

            div bl

            程序執(zhí)行后,(al)=0AH(即10),(ah)=1(余數(shù)為1)。

             

             

            偽指令dd

            db    定義字節(jié)型數(shù)據(jù);define byte 一個字節(jié)表示8個位;

            dw   定義字型數(shù)據(jù);    define word 一個節(jié)表示兩個字節(jié);

            dd    定義雙字型數(shù)據(jù);define dword(double word,雙字)。兩個字。四個字節(jié)。

             

             

            data segment

                   db 1

                   dw 1

                   dd 1

            data ends

             

            data段中定義了三個數(shù)據(jù):

            第一個數(shù)據(jù)為01H,在data:0處,占1個字節(jié);

            第二個數(shù)據(jù)為0001H,在data:1處,占1個字,兩個字節(jié);

            第三個數(shù)據(jù)為00000001H,在data:3處,點2個字,四個字節(jié)。

             

             

            dup

            dup是一個操作符,在匯編語言中同db、dwdd等一樣,也是由編譯器識別處理的符號。它是和db、dw、dd等數(shù)據(jù)定義偽指令配合使用的,用來進行數(shù)據(jù)的重復。如:

            db 3 dup (0)

            定義了3個字節(jié),它們的值都是0,相當于 db 0,0,0

            db 3 dup (0,1,2)

            定義了9個字節(jié),它們是0、12、0、1、20、12,相當于db 0,1,2, 0,1,2, 0,1,2

            db 3 dup (‘abc’, ‘ABC’)

            定義了18個字節(jié),它們是’ abcABC abcABC abcABC’,相當于 db ‘abcABC abcABC abcABC’

             

            dup的使用格式如下:

            db 重復的次數(shù) dup (重復的字節(jié)型數(shù)據(jù))。

            dw 重復的次數(shù) dup (重復的字型數(shù)據(jù))。

            dd 重復的次數(shù) dup (重復的雙字數(shù)據(jù))。

             

            dup是一個十分有用的操作符,比如我們要定義一個容量為200個字節(jié)的棧段。

            stack segment

                   db 200 dup (0)

            stack ends

             

             

            posted on 2010-08-04 10:29 luqingfei 閱讀(536) 評論(0)  編輯 收藏 引用 所屬分類: 匯編語言基礎(chǔ)學習

            導航

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統(tǒng)計

            留言簿(6)

            隨筆分類(109)

            隨筆檔案(105)

            Blogers

            Game

            Life

            NodeJs

            Python

            Useful Webs

            大牛

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久国产精品久久久| 久久久久亚洲AV成人网人人网站 | 精品久久人人爽天天玩人人妻| 亚洲国产精品久久久久网站| 狠狠色丁香久久综合婷婷| 日韩一区二区久久久久久| 国产精品成人精品久久久| 伊人情人综合成人久久网小说| 97精品伊人久久久大香线蕉| 亚洲精品国产第一综合99久久 | 国产成人无码精品久久久久免费 | 国产精品美女久久久久| 久久久久人妻一区精品| 国产精品一区二区久久不卡| 久久久91人妻无码精品蜜桃HD| 亚洲国产精品无码久久一线 | 日产精品久久久一区二区| 久久精品一本到99热免费| 深夜久久AAAAA级毛片免费看| 99精品久久精品一区二区| 日本人妻丰满熟妇久久久久久| 久久婷婷国产剧情内射白浆| 久久精品综合网| 国产精品无码久久久久久| 潮喷大喷水系列无码久久精品 | 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久婷婷五月综合国产尤物app| 一本久久综合亚洲鲁鲁五月天| 久久久久亚洲av成人无码电影| 久久久久综合中文字幕| 日韩影院久久| 97超级碰碰碰久久久久| 久久综合日本熟妇| 久久午夜伦鲁片免费无码| 99久久夜色精品国产网站| 伊人久久大香线蕉av一区| 岛国搬运www久久| 狠狠色综合网站久久久久久久高清| 久久亚洲精品成人AV| 狠狠综合久久综合88亚洲| 精品国产青草久久久久福利|