在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 匯編入門(mén)學(xué)習(xí)筆記 (六)—— si、di,雙重循環(huán)

            匯編入門(mén)學(xué)習(xí)筆記 (六)—— si、di,雙重循環(huán)

            作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
            瘋狂的暑假學(xué)習(xí)之 匯編入門(mén)學(xué)習(xí)筆記 (六)—— si、di雙重循環(huán)

            本文引用地址:http://www.biyoush.com/article/201611/317780.htm

            參考: 《匯編語(yǔ)言》 王爽 第7章

            1. and和or指令,與[bx+idata]

            and和or,就不多說(shuō)了。

            [bx+idata] 這樣寫(xiě)是可以的,某些情況下,比較方便。

            [bx+idata] 也可以寫(xiě)成 idata[bx]

            直接見(jiàn)例子: 把’ABcde‘ 跟 ‘fGHig’ 都改成大寫(xiě)(ASCII中大寫(xiě)字母與小寫(xiě)字母二進(jìn)制中,只有第五位不同,大寫(xiě)字母是0,小寫(xiě)字母是1)

            1. assumecs:code,ds:data
            2. datasegment
            3. dbABcde
            4. dbfGHIg
            5. dataends
            6. codesegment
            7. start:movax,data
            8. movds,ax
            9. movbx,0
            10. movcx,4
            11. moval,00100000b
            12. s:or[bx],al
            13. or[5+bx],al;[5+bx]也可以寫(xiě)成5[bx]
            14. incbx
            15. loops
            16. movax,4c00H
            17. int21H
            18. codeends
            19. endstart

            2. si,di,與[bx+si],[bx+di],[bx+si+idata],[bx+di+idata]

            si與di,除了不能像bx一樣分成bh,bl,其他與bx一樣。如 mov ax,[si] 等等

            [bx+si],[bx+di],[bx+si+idata],[bx+idata]

            這些都是可以的,某些情況下,比較方便。

            其中[bx+si]與[bx+di] 可以寫(xiě)成 [bx][si],[bx][di]

            [bx+si+idata],[bx+di+idata]可以寫(xiě)成idata[bx][si],idata[bx][di]

            例子:復(fù)制Welcome!

            1. assumecs:code,ds:data
            2. datasegment
            3. dbWelcome!
            4. dataends
            5. codesegment
            6. start:movax,data
            7. movds,ax
            8. movsi,0
            9. movcx,4
            10. s:movax,[si]
            11. mov8[si],ax
            12. addsi,2
            13. loops
            14. movax,4c00H
            15. int21H
            16. codeends
            17. endstart

            例子:將data中的單詞的首字母改成大寫(xiě)

            1. assumecs:code,ds:data
            2. datasegment
            3. db1.file
            4. db2.edit
            5. db3.search
            6. db4.view
            7. dataends
            8. codesegment
            9. start:movax,data
            10. movds,ax
            11. movbx,0
            12. movcx,4
            13. moval,11011111b
            14. s:and[bx+2],al
            15. addbx,8
            16. loops
            17. movax,4c00H
            18. int21H
            19. codeends
            20. endstart



            3. 雙重循環(huán)

            例子:data中單詞改成大寫(xiě)的

            1. assumecs:code,ds:data
            2. datasegment
            3. dbibm
            4. dbdec
            5. dbdos
            6. dbvax
            7. dataends
            8. codesegment
            9. start:movax,data
            10. movds,ax
            11. movbx,0
            12. moval,11011111b
            13. movcx,4
            14. s:movcx,3
            15. movsi,0
            16. s0:and[bx+si],al
            17. incsi
            18. loops0
            19. addbx,8
            20. loops
            21. movax,4c00H
            22. int21H
            23. codeends
            24. endstart

            上面 的代碼,是錯(cuò)誤的會(huì)出現(xiàn)是死循環(huán)。因?yàn)閏x不斷的被賦予3,導(dǎo)致外層循環(huán)死循環(huán)。

            1. assumecs:code,ds:data
            2. datasegment
            3. dbibm
            4. dbdec
            5. dbdos
            6. dbvax
            7. dataends
            8. codesegment
            9. start:movax,data
            10. movds,ax
            11. movbx,0
            12. moval,11011111b
            13. movcx,4
            14. s:movdx,cx;dx用來(lái)臨時(shí)存放外層的cx的值
            15. movcx,3
            16. movsi,0
            17. s0:and[bx+si],al
            18. incsi
            19. loops0
            20. movcx,dx;用來(lái)回復(fù)外層循環(huán)的cx
            21. addbx,8
            22. loops
            23. movax,4c00H
            24. int21H
            25. codeends
            26. endstart

            上面的代碼,雖然能解決上面問(wèn)題,能正常運(yùn)行。但是寄存器的數(shù)量有限,有時(shí),可能沒(méi)有其他的寄存器可以用。

            解決方法,保存在內(nèi)存中。例子:

            1. assumecs:code,ds:data
            2. datasegment
            3. dbibm
            4. dbdec
            5. dbdos
            6. dbvax
            7. dw0;定義一個(gè)字,用來(lái)保存cx
            8. dataends
            9. codesegment
            10. start:movax,data
            11. movds,ax
            12. movbx,0
            13. moval,11011111b
            14. movcx,4
            15. s:movds:[20H],cx
            16. movcx,3
            17. movsi,0
            18. s0:and[bx+si],al
            19. incsi
            20. loops0
            21. movcx,ds:[20H]
            22. addbx,8
            23. loops
            24. movax,4c00H
            25. int21H
            26. codeends
            27. endstart

            上面的代碼,解決了寄存器不夠的情況。但是,還是比較復(fù)雜,如果有很多循環(huán),就會(huì)弄不清楚。

            解決方法,使用棧來(lái)保存恢復(fù)cx。例子1:

            1. assumecs:code,ds:data,ss:stack
            2. datasegment
            3. dbibm
            4. dbdec
            5. dbdos
            6. dbvax
            7. dataends
            8. stacksegment
            9. dw0,0,0,0,0,0,0,0
            10. stackends
            11. codesegment
            12. start:movax,data
            13. movds,ax
            14. movax,stack
            15. movss,ax
            16. movsp,16
            17. movbx,0
            18. moval,11011111b
            19. movcx,4
            20. s:pushcx
            21. movcx,3
            22. movsi,0
            23. s0:and[bx+si],al
            24. incsi
            25. loops0
            26. popcx
            27. addbx,8
            28. loops
            29. movax,4c00H
            30. int21H
            31. codeends
            32. endstart

            例子2:把data中的單詞,前3個(gè)字母改成大寫(xiě)

            1. assumecs:code,ds:data,ss:stack
            2. datasegment
            3. db1.display.......
            4. db2.brows.........
            5. db3.replace.......
            6. db4.modify........
            7. dataends
            8. stacksegment
            9. dw0,0,0,0,0,0,0,0
            10. stackends
            11. codesegment
            12. start:movax,data
            13. movds,ax
            14. movax,stack
            15. movss,ax
            16. movsp,16
            17. movbx,0
            18. moval,11011111b
            19. movcx,4
            20. s:pushcx
            21. movsi,0
            22. movcx,3
            23. s0:and[bx+si+2],al
            24. incsi
            25. loops0
            26. popcx
            27. addbx,10H
            28. loops
            29. movax,4c00H
            30. int21H
            31. codeends
            32. endstart



            關(guān)鍵詞: 匯編入門(mén)sidi雙重循

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉