單片機彙編語言詳解

2020-12-16 電子產品世界

數制的概念  

  數制是人們利用符號進行計數的科學方法。數制有很多種,在計算機中常用的數制有:十進位,二進位和十六進位。

  數制也稱計數制,是指用一組固定的符號和統一的規則來表示數值的方法。計算機是信息處理的工具,任何信息必須轉換成二進位形式數據後才能由計算機進行處理,存儲和傳輸。

十進位數(Decimal)

  人們通常使用的是十進位。它的特點有兩個:有0,1,2….9十個基本數字組成,十進位數運算是按「逢十進一」的規則進行的.

  在計算機中,除了十進位數外,經常使用的數制還有二進位數和十六進位數.在運算中它們分別遵循的是逢二進一和逢十六進一的法則.

二進位數(Binary)

  二進位數有兩個特點:它由兩個基本數字0,1組成,二進位數運算規律是逢二進一。

  為區別於其它進位數,二進位數的書寫通常在數的右下方註上基數2,或加後面加B表示。

  例如:二進位數10110011可以寫成(10110011)2,或寫成10110011B,對於十進位數可以不加注.計算機中的數據均採用二進位數表示,這是因為二進位數具有以下特點:

  1) 二進位數中只有兩個字符0和1,表示具有兩個不同穩定狀態的元器件。例如,電路中有,無電流,有電流用1表示,無電流用0表示。類似的還比如電路中電壓的高,低,電晶體的導通和截止等。

  2) 二進位數運算簡單,大大簡化了計算中運算部件的結構。

  二進位數的加法和乘法運算如下:

  0+0=0 0+1=1+0=1 1+1=10

  0×0=0 0×1=1×0=0 1×1=1

八進位數(Octal)

  由於二進位數據的基R較小,所以二進位數據的書寫和閱讀不方便,為此,在小型機中引入了八進位。八進位的基R=8=2^3,有數碼0、1、2、3、4、5、6、7,並且每個數碼正好對應三位二進位數,所以八進位能很好地反映二進位。八進位用下標8或數據後面加Q表示 例如:二進位數據 ( 11 101 010 . 010 110 100 )2 對應 八進位數據 ( 3 5 2 . 2 6 4 )8或352.264Q.

十六進位數(Hex)

  由於二進位數在使用中位數太長,不容易記憶,所以又提出了十六進位數

  十六進位數有兩個基本特點:它由十六個字符0~9以及A,B,C,D,E,F組成(它們分別表示十進位數10~15),十六進位數運算規律是逢十六進一,即基R=16=2^4,通常在表示時用尾部標誌H或下標16以示區別。

  例如:十六進位數4AC8可寫成(4AC8)16,或寫成4AC8H。

數的位權概念

  對於形式化的進位表示,我們可以從0開始,對數字的各個數位進行編號,即個位起往左依次為編號0,1,2,……;對稱的,從小數點後的數位則是-1,-2,……

  進行進位轉換時,我們不妨設源進位(轉換前所用進位)的基為R1,目標進位(轉換後所用進位)的基為R2,原數值的表示按數位為AnA(n-1)……A2A1A0.A-1A-2……,R1在R2中的表示為R,則有(AnA(n-1)……A2A1A0.A-1A-2……)R1=(An*R^n+A(n-1)*R^(n-1)+……+A2*R^2+A1*R^1+A0*R^0+A-1*R^(-1)+A-2*R^(-2))R2

  (由於此處不可選擇字體,說明如下:An,A2,A-1等符號中,n,2,-1等均應改為下標,而上標的冪次均用^作為前綴)

  舉例:

  一個十進位數110,其中百位上的1表示1個10^2,既100,十位的1表示1個10^1,即10,個位的0表示0個100,即0。

  一個二進位數110,其中高位的1表示1個2^2,即4,低位的1表示1個2^1,即2,最低位的0表示0個2^0,即0。

  一個十六進位數110,其中高位的1表示1個16^2,即256,低位的1表示1個16^1,即16,最低位的0表示0個16^0,即0。

  可見,在數制中,各位數字所表示值的大小不僅與該數字本身的大小有關,還與該數字所在的位置有關,我們稱這關係為數的位權。

  十進位數的位權是以10為底的冪,二進位數的位權是以2為底的冪,十六進位數的位權是以16為底的冪。數位由高向低,以降冪的方式排列。

進數制之間的轉換

  1.二進位數、十六進位數轉換為十進位數(按權求和)

  二進位數、十六進位數轉換為十進位數的規律是相同的。把二進位數(或十六進位數)按位權形式展開多項式和的形式,求其最後的和,就是其對應的十進位數——簡稱「按權求和」.

  例如:把(1001.01)2轉換為十進位數。

  解:(1001.01)2

  =1*8+4*0+2*0+1*1+0*(1/2)+1*(1/4)

  =8+0+0+1+0+0.25

  =9.25

  把(38A.11)16轉換為十進位數

  解:(38A.11)16

  =3×16的2次方+8×16的1次方+10×16的0次方+1×16的-1次方+1×16的-2次方

  =768+128+10+0.0625+0.0039

  =906.0664

  2.十進位數轉換為二進位數,十六進位數(除2/16取餘法)

  整數轉換.一個十進位整數轉換為二進位整數通常採用除二取餘法,即用2連續除十進位數,直到商為0,逆序排列餘數即可得到――簡稱除二取餘法.

  例:將25轉換為二進位數

  解:25÷2=12 餘數1

  12÷2=6 餘數0

  6÷2=3 餘數0

  3÷2=1 餘數1

  1÷2=0 餘數1

  所以25=(11001)2

  同理,把十進位數轉換為十六進位數時,將基數2轉換成16就可以了.

  例:將25轉換為十六進位數

  解:25÷16=1 餘數9

  1÷16=0 餘數1

  所以25=(19)16

  3.二進位數與十六進位數之間的轉換

  由於4位二進位數恰好有16個組合狀態,即1位十六進位數與4位二進位數是一一對應的.所以,十六進位數與二進位數的轉換是十分簡單的.

  (1)十六進位數轉換成二進位數,只要將每一位十六進位數用對應的4位二進位數替代即可――簡稱位分四位.

  例:將(4AF8B)16轉換為二進位數.

  解: 4 A F 8 B

  0100 1010 1111 1000 1011

  所以(4AF8B)16=(1001010111110001011)2

  (2)二進位數轉換為十六進位數,分別向左,向右每四位一組,依次寫出每組4位二進位數所對應的十六進位數――簡稱四位合一位.

  例:將二進位數(000111010110)2轉換為十六進位數.

  解: 0001 1101 0110

  1 D 6

  所以(111010110)2=(1D6)16

  轉換時注意最後一組不足4位時必須加0補齊4位

數制轉換的一般化

  1)R進位轉換成十進位

  任意R進位數據按權展開、相加即可得十進位數據。 例如:N = 1101.0101B = 1*2^3+1*2^2+0*21+1*2^0+0*2^-1+1*2^-2+0*2^-3+1*2^-4 = 8+4+0+1+0+0.25+0+0.0625 = 13.3125

  N = 5A.8 H = 5*161+A*160+8*16-1 = 80+10+0.5 = 90.5

  2)十進位轉換R 進位

  十進位數轉換成R 進位數,須將整數部分和小數部分分別轉換.

  1.整數轉換----除R 取餘法 規則:(1)用R 去除給出的十進位數的整數部分,取其餘數作為轉換後的R 進位數據的整數部分最低位數字; (2)再用2去除所得的商,取其餘數作為轉換後的R 進位數據的高一位數字; (3)重複執行(2)操作,一直到商為0結束。 例如: 115 轉換成 Binary數據和Hexadecimal數據 (圖2-4) 所以 115 = 1110011 B = 73 H

  2.小數轉換-----乘R 取整法 規則:(1)用R 去除給出的十進位數的小數部分,取乘積的整數部分作為轉換後R 進位小數點後第一位數字; (2)再用R 去乘上一步乘積的小數部分,然後取新乘積的整數部分作為轉換後R 進位小數的低一位數字; (3)重複(2)操作,一直到乘積為0,或已得到要求精度數位為止。

單片機相關文章:單片機教程

單片機相關文章:單片機視頻教程

單片機相關文章:單片機工作原理


相關焦點

  • Stm32單片機開發KEIL啟動文件彙編語言詳解
    文章目錄簡介啟動文件彙編代碼相關指令堆棧空間的定義初始化中斷向量表復位中斷函數中斷函數的弱(WEAK)聲明用戶棧和堆初始化簡介我們在做單片機編程的時候,大部分都是用KEIL自帶的啟動文件來使程序進入C語言main函數,然後進行C語言編程開發的工作。那麼這個啟動文件到底做了什麼呢?
  • 51單片機彙編指令的記憶方法
    想讓單片機按你的意思(想法)完成一項任務,必須先編寫供其使用的程序,編寫單片機的程序應使用該單片機可以識別的「語言」,否則你將是對「石」彈琴。目前較流行的有彙編和C語言;彙編語言可以精確的控制單片機工作的每一步,而C語言則注重結果,不必關心單片機具體的每一步。習慣上宜先學彙編語言後學C語言,這樣可以對單片機有一個更深的了解,再說,就是用C語言編程,在需要精確控制時還需要嵌入彙編語句。
  • PIC單片機C語言程序實例
    編者按:為了幫助具有PIC單片機彙編語言知識的技術人員或工程師,快速掌握利用C語言編寫PIC單片機程序的方法,本刊特推出《PIC單片機C語言程序設計》系列連載文章。丈中給出的C語言程序實例,均是可執行的,讀者可以放心引用。      一、彙編語言與C語言      早期的單片機程序多採用彙編語言編寫。
  • 為什麼C語言是最適合單片機編程的高級語言!
    為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不是不能,而是不合適。
  • 最適合單片機編程的高級語言,除了C語言,別無選擇!
    單片機為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python,VC等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不能不能,而是不合適。
  • 單片機彙編延時程序的理解
    單片機彙編實現延遲的程序代碼:本文引用地址:http://www.eepw.com.cn/article/171019.htmDELAY:
  • 單片機彙編指令入門學習和查看
    在進行彙編程序設計時,MSP430的指令系統是程序的主體,但為了方便程序編制,還定義了一些指令,這些指令不參與和影響程序的執行,也不在計算機中運行,這類指令稱為偽指令。一般彙編器偽指令能幫助用戶完成以下事情:·將代碼和數據彙編到規定的段中·在存儲器中用未初始化的變量保留空間·控制彙編後列表文件的格式·初始化存儲器·彙編條件塊·定義全局變量·規定彙編器可以從中獲得宏的庫
  • 【愛找茬】都是C語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    許多小夥伴在學完C語言後想入門單片機,但學著學著發現明明都是C語言,為什麼單片機C語言和我當初學的C語言有差異呢?今天小編就來梳理我們平時所學的C語言與單片機C語言的有什麼樣的不同。
  • C語言和在開發單片機時各有哪些優缺點?
    彙編語言是一種用文字助記符來表示機器指令的符號語言,是最接近機器碼的一種語言。其主要優點是佔用資源少、程序執行效率高。但是不同的CPU,其彙編語言可能有所差異,所以不易移植。  C語言是一種結構化的高級語言。其優點是可讀性好,移植容易,是普遍使用的一種計算機語言。缺點是佔用資源較多,執行效率沒有彙編高。
  • 單片機編程軟體大佬:明確單片機編程軟體編寫單片機程序步驟
    單片機用什麼軟體編程?單片機開發中除必要的硬體外,同樣離不開軟體,我們寫的彙編語言源程序要變為CPU可以執行的機器碼有兩種方法,一種是手工彙編,另一種是機器彙編,目前已極少使用手工彙編的方法了。機器彙編是通過彙編軟體將源程序變為機器碼,用於MCS-51單片機的彙編軟體有早期的A51,隨著單片機開發技術的不斷發展,從普遍使用彙編語言到逐漸使用高級語言開發,單片機的開發軟體也在不斷發展,Keil軟體是目前最流行開發MCS-51系列單片機的軟體,這從近年來各仿真機廠商紛紛宣布全面支持Keil即可看出。
  • 基於C語言STC89C52單片機電子密碼鎖的設計與仿真
    它採用高可靠性的STC89C52單片機來實現開鎖和密碼的識別,採用具備I2C總線接口的E2PROM晶片來完成密碼的存儲,通過1602液晶顯示器提示程序運行狀態和使用步驟,利用蜂鳴器模擬報警,發光二極體模擬鎖的開關。該系統用C語言編寫程序,與彙編語言相比具備更好的移植性和可讀性,便於修改和增減功能。
  • Keil中C語言與彙編語言混合編程需要注意的幾個地方
    在keil C語言與彙編語言的混合編程中曾經遇到過的一些問題,寫下來留作以後參考。1、C語言中加入彙編語言模塊的方法:例子:void func(){C語言代碼……#pragma asmMOV R6,#23DELAY2: MOV R7,#191DELAY1: DJNZ R7,DELAY1DJNZ R6,DELAY2RET
  • 基於單片機的ADC0809數字電壓表設計報告(彙編語言)
    MCS-51單片機有一個復位引腳RST,採用施密特觸發輸入。當震蕩器起振後,只要該引腳上出現2個機器周期以上的高電平即可確保時器件復位[1]。復位完成後,如果RST端繼續保持高電平,MCS-51就一直處於復位狀態,只要RST恢復低電平後,單片機才能進入其他工作狀態。
  • 編寫彙編語言常見錯誤分析
    一、彙編軟體彙編失敗原因分析:本文引用地址:http://www.eepw.com.cn/article/201602/287210.htm  這裡採用Keil C51軟體包中的宏彙編器A51
  • 四點二次插值的單片機彙編程序實現
    如下面AVR單片機的程序中,結果是雙字節精度,但其中乘法為單字節。    下面將給出以MCS-96單片機彙編語言和AVR單片機彙編語言編寫的程序實例。    實例中,取間隔h為2的整數冪。這樣,定點形式的自變量只要採用簡單的移位,即可以得出整數的k和純小數的「,作為下列程序的入口參數。
  • 基於C語言51單片機電子密碼鎖的設計與仿真
    電子密碼鎖通常使用ARM和單片機控制,單片機相對ARM實現較為簡單,功能較為完善,因此使用單片機控制較多。用單片機控制的窖碼鎖常使用彙編語言編寫程序,顯示器多數用。而本文所介紹的電子密獁鎖使用移植性及可讀性強的高級語言C語言編寫,便於修改和增減功能蚤同時採用顯示清楚數碼管,功率消耗小而且壽命長的 液晶顯示器,顯示更加直觀,使用更加方便。
  • PIC單片機C語言程序設計(2)
    一個完整的PIC單片機C語言程序,通常由包含文件(即頭文件1,變量定義、變量說明、函數定義、函數體和注釋等六部分等組成。  1.C語言的標識符  所謂標識符,實際上是一些由程序編寫者自定義的名稱,類似於PIC單片機彙編語言中給寄存器(RAM)的命名。
  • 談談51單片機延時子程序
    現在的單片機有很多種型號,但在每個型號的單片機器件手冊中都會詳細說明執行各種指令所需的機器周期,了解以上概念後,那麼可以依據單片機器件手冊中的指令執行周期和單片機所用晶振頻率來完成需要精確延時時間的延時程序。
  • C語言與彙編語言的區別
    從事嵌入式系統開發多年,對於軟體方面,從初期的單片機彙編語言編程,到後來的C++界面程序編寫,已有相當多的經驗累積。
  • 單片機c語言教程:C51循環語句
    在 C 語言中構成循環控制的語句有 while,do-while,for 和 goto 語句。同樣都是起到循環作用,但具體的作用和使用方法又大不一 樣。我們具體來看看。goto 語句這個語句在很多高級語言中都會有,記得小時候用 BASIC 時就很喜歡用這個語句。