代碼轉(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為止。