代碼轉換是計算機應用中常見問題,計算機內部職能進行二進制的運算,而輸入設備提供的是數和字符的ASCII碼形式。所以必須把ASCII碼形式表達的十進制數或其他進制數轉換成二進制數。同樣,當數據處理結束後,也需要進行相應的轉換,將二進制碼轉換為輸出需要的ASCII碼或者十進制數給顯示器。這一節我就說說關於進制的轉換。
一、十六進制ASCII碼與二進制數之間的轉換
首先我們將十六個字符所在的區域分成 3部分,分別是區域1表示十六進制數中0--9之間的數字字符,區域2表示十六進制數中A--F之間的數字字符;區域3表示十六進制中的a--f之間的數字字符。
如果我們仔細觀察過它們各自對應的ASCII碼值和二進制值得話,我們不難會發現以下規律:
1、對於字符0--9的ASCII來說,其字符ASCII碼的低4位與所表示的十六進制數相同,也就是ASCII碼對應的二進制數的低4位,因此,對於區域1的十六進制ASCII碼與二進制之間的轉換,就是講ASCII碼的高4位加上或者去掉即可。
2、區域2中的字符A--F的ASCII碼,其ASCII碼減7後的二進制數的低4位與對應的二進制數低4位相同,因此可以用此方法得到二進制數的低4位,而高4位則可以通過加減30H得到
3、區域3中的字符a--f的ASCII碼,其字符ASCII碼減7後的二進制數低4位與對應的二進制數低4位相同,因此,可以用此方法得到二進制數的低4位, 而高4位則可以通過加減50H得到。
二、串的操作
串就是指存儲器中一序列的字或字節單元,串操作就是對這一個序列字或者字節單元進行某種相同的操作,這一序列可能存放的是字符或者是數據。8086/8088指令系統中有5種串操作指令,下面我一一為大家列舉:
1、取串指令LODS
指令格式:LODS源串
此指令把源串中的一個字或者字節內容送入到AX或者AL中,同時按照DF修改SI。由於源串的字符或者字節單元由SI鎖指向,而指令中“源串”主要是指明取的源串是字還是字節,所以,當我們使用該指令的時候,如果已明確源串是字還是字節,那麼可用下述3個無操作數的指令格式進行取代。
LODSB;取源串一個字節 LODSW;取源串一個字 LODSB指令可以替代下面的兩條指令 MOV AL, [SI];傳送一個字節至AL INC SI;指向下一個字節
注:取指令操作是對標志寄存器無影響的。
2、存串指令STOS
指令格式:STOS目的串
此指令把AX或AL的內容送入目的串中的一個字或字節,同時按照DF修改DI,目的串的字或字節單元是由DI指定的,如果已明確目的串是字還是字節,我們依然可以像取串指令一樣去用兩個無操到目的串去代替
STOSB;送字節到目的串 STOSW;送字到目的串
注:存串操作對標志寄存器無影響的。
3、串傳送指令MOVS
指令格式:MOVS目的串, 源串
把源串中的一個字或字節傳送到目的串中,同時按照DF修改SI和DI,由於傳送字或字節單元的源串和目的串地址分別由SI和DI指向,如果已明確待傳送的源串是字還是字節,那麼可用下述兩個無操作數指令格式替代:
MOVSB;字節傳送 MOVSW;字傳送
注:串傳送指令對標志寄存器無影響
4、串比較指令CMPS
指令格式:CMPS源串, 目的串
比較源串和目的串中一個字或字節。比較方法是:源串中一個字或者字節減去目的串中一個字或字節,不保留相減結果,但在標志寄存器中反映了比較結果,每比較一次,同時按照DF修改SI和DI,由於比較的字或字節單元地址已由SI和DI指向,如果已明確待比較的串是字或字節,那麼可用下述兩個無操作數的指令進行執行:
CMPSB;字節比較 CMPSW;字比較
5、串搜索指令SCAS
指令格式:SCAS目的串
在目的串中查找AX和AL指定的內容,查找的方法是用AX或AL的內容減去目的串中的一個字或字節,相減的結果反映在標志寄存器中,每查找一次,按照DF修改DI。由於在查找的字或字節在AX/AL和DI所指向的存儲單元,可以用無操作數指令代替:
SCASB;按字節查找目的串 SCASW;按字查找目的串
6、重復前綴指令REP
西陵格式:REP
我們為了對若干個字或字節進行相同的操作,可用重復前綴指令REP,它可以使串操作指令重復執行,重復的次數由CX的內容來確定,重復前綴指令使用時,只能放在串操作指令前面,每執行一次串操作指令,CX減1,知道CX=0為止。
本文出自 “驿落黃昏” 博客,請務必保留此出處http://yiluohuanghun.blog.51cto.com/3407300/940834