程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 匯編基礎:進制轉換和串的操作

匯編基礎:進制轉換和串的操作

編輯:匯編語言

代碼轉換是計算機應用中常見問題,計算機內部職能進行二進制的運算,而輸入設備提供的是數和字符的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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved