《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 解決方案 > 匯編基礎(chǔ):進(jìn)制轉(zhuǎn)換和串的操作

匯編基礎(chǔ):進(jìn)制轉(zhuǎn)換和串的操作

2017-06-10
關(guān)鍵詞: 匯編

代碼轉(zhuǎn)換是計(jì)算機(jī)應(yīng)用中常見(jiàn)問(wèn)題,,計(jì)算機(jī)內(nèi)部職能進(jìn)行二進(jìn)制的運(yùn)算,,而輸入設(shè)備提供的是數(shù)和字符的ASCII碼形式,。所以必須把ASCII碼形式表達(dá)的十進(jìn)制數(shù)或其他進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),。同樣,當(dāng)數(shù)據(jù)處理結(jié)束后,,也需要進(jìn)行相應(yīng)的轉(zhuǎn)換,,將二進(jìn)制碼轉(zhuǎn)換為輸出需要的ASCII碼或者十進(jìn)制數(shù)給顯示器。這一節(jié)我就說(shuō)說(shuō)關(guān)于進(jìn)制的轉(zhuǎn)換,。

一,、十六進(jìn)制ASCII碼與二進(jìn)制數(shù)之間的轉(zhuǎn)換

首先我們將十六個(gè)字符所在的區(qū)域分成 3部分,分別是區(qū)域1表示十六進(jìn)制數(shù)中0--9之間的數(shù)字字符,,區(qū)域2表示十六進(jìn)制數(shù)中A--F之間的數(shù)字字符,;區(qū)域3表示十六進(jìn)制中的a--f之間的數(shù)字字符。

如果我們仔細(xì)觀察過(guò)它們各自對(duì)應(yīng)的ASCII碼值和二進(jìn)制值得話,,我們不難會(huì)發(fā)現(xiàn)以下規(guī)律:

1,、對(duì)于字符0--9的ASCII來(lái)說(shuō),其字符ASCII碼的低4位與所表示的十六進(jìn)制數(shù)相同,,也就是ASCII碼對(duì)應(yīng)的二進(jìn)制數(shù)的低4位,,因此,對(duì)于區(qū)域1的十六進(jìn)制ASCII碼與二進(jìn)制之間的轉(zhuǎn)換,,就是講ASCII碼的高4位加上或者去掉即可,。

2、區(qū)域2中的字符A--F的ASCII碼,,其ASCII碼減7后的二進(jìn)制數(shù)的低4位與對(duì)應(yīng)的二進(jìn)制數(shù)低4位相同,,因此可以用此方法得到二進(jìn)制數(shù)的低4位,而高4位則可以通過(guò)加減30H得到

3,、區(qū)域3中的字符a--f的ASCII碼,其字符ASCII碼減7后的二進(jìn)制數(shù)低4位與對(duì)應(yīng)的二進(jìn)制數(shù)低4位相同,,因此,,可以用此方法得到二進(jìn)制數(shù)的低4位, 而高4位則可以通過(guò)加減50H得到,。

二,、串的操作

串就是指存儲(chǔ)器中一序列的字或字節(jié)單元,串操作就是對(duì)這一個(gè)序列字或者字節(jié)單元進(jìn)行某種相同的操作,這一序列可能存放的是字符或者是數(shù)據(jù),。8086/8088指令系統(tǒng)中有5種串操作指令,,下面我一一為大家列舉:

1、取串指令LODS

指令格式:LODS源串

此指令把源串中的一個(gè)字或者字節(jié)內(nèi)容送入到AX或者AL中,,同時(shí)按照DF修改SI,。由于源串的字符或者字節(jié)單元由SI鎖指向,而指令中“源串”主要是指明取的源串是字還是字節(jié),,所以,,當(dāng)我們使用該指令的時(shí)候,如果已明確源串是字還是字節(jié),,那么可用下述3個(gè)無(wú)操作數(shù)的指令格式進(jìn)行取代,。

LODSB;取源串一個(gè)字節(jié)    
LODSW;取源串一個(gè)字    
LODSB指令可以替代下面的兩條指令    
MOV AL, [SI];傳送一個(gè)字節(jié)至AL    
INC SI;指向下一個(gè)字節(jié)

注:取指令操作是對(duì)標(biāo)志寄存器無(wú)影響的,。

2,、存串指令STOS

指令格式:STOS目的串

此指令把AX或AL的內(nèi)容送入目的串中的一個(gè)字或字節(jié),同時(shí)按照DF修改DI,,目的串的字或字節(jié)單元是由DI指定的,,如果已明確目的串是字還是字節(jié),我們依然可以像取串指令一樣去用兩個(gè)無(wú)操到目的串去代替

STOSB;送字節(jié)到目的串    
STOSW;送字到目的串

注:存串操作對(duì)標(biāo)志寄存器無(wú)影響的,。

3,、串傳送指令MOVS

指令格式:MOVS目的串, 源串

把源串中的一個(gè)字或字節(jié)傳送到目的串中,,同時(shí)按照DF修改SI和DI,,由于傳送字或字節(jié)單元的源串和目的串地址分別由SI和DI指向,如果已明確待傳送的源串是字還是字節(jié),,那么可用下述兩個(gè)無(wú)操作數(shù)指令格式替代:

MOVSB;字節(jié)傳送    
MOVSW;字傳送

注:串傳送指令對(duì)標(biāo)志寄存器無(wú)影響

4,、串比較指令CMPS

指令格式:CMPS源串, 目的串

比較源串和目的串中一個(gè)字或字節(jié),。比較方法是:源串中一個(gè)字或者字節(jié)減去目的串中一個(gè)字或字節(jié),,不保留相減結(jié)果,但在標(biāo)志寄存器中反映了比較結(jié)果,,每比較一次,,同時(shí)按照DF修改SI和DI,由于比較的字或字節(jié)單元地址已由SI和DI指向,,如果已明確待比較的串是字或字節(jié),,那么可用下述兩個(gè)無(wú)操作數(shù)的指令進(jìn)行執(zhí)行:

CMPSB;字節(jié)比較    
CMPSW;字比較

5、串搜索指令SCAS

指令格式:SCAS目的串

在目的串中查找AX和AL指定的內(nèi)容,,查找的方法是用AX或AL的內(nèi)容減去目的串中的一個(gè)字或字節(jié),,相減的結(jié)果反映在標(biāo)志寄存器中,,每查找一次,按照DF修改DI,。由于在查找的字或字節(jié)在AX/AL和DI所指向的存儲(chǔ)單元,,可以用無(wú)操作數(shù)指令代替:

SCASB;按字節(jié)查找目的串

SCASW;按字查找目的串

6、重復(fù)前綴指令REP

西陵格式:REP

我們?yōu)榱藢?duì)若干個(gè)字或字節(jié)進(jìn)行相同的操作,,可用重復(fù)前綴指令REP,,它可以使串操作指令重復(fù)執(zhí)行,重復(fù)的次數(shù)由CX的內(nèi)容來(lái)確定,,重復(fù)前綴指令使用時(shí),,只能放在串操作指令前面,每執(zhí)行一次串操作指令,,CX減1,,知道CX=0為止。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。