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

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

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

代碼轉(zhuǎn)換是計算機應(yīng)用中常見問題,計算機內(nèi)部職能進(jìn)行二進(jì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é)我就說說關(guān)于進(jìn)制的轉(zhuǎn)換。

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

首先我們將十六個字符所在的區(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ì)觀察過它們各自對應(yīng)的ASCII碼值和二進(jìn)制值得話,我們不難會發(fā)現(xiàn)以下規(guī)律:

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

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

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

二、串的操作

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

1、取串指令LODS

指令格式:LODS源串

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

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

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

2、存串指令STOS

指令格式:STOS目的串

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

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

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

3、串傳送指令MOVS

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

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

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

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

4、串比較指令CMPS

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

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

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

5、串搜索指令SCAS

指令格式:SCAS目的串

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

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

SCASW;按字查找目的串

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

西陵格式:REP

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


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