匯編語言采用了助記符號編寫程序,通過編譯器轉(zhuǎn)換成能夠被計算機(jī)識別和處理的二進(jìn)制代碼程序。
一、編程語言介紹
機(jī)器語言是用二進(jìn)制代碼表示的,能被計算機(jī)直接識別和執(zhí)行的一種機(jī)器指令的集合。直觀性和通用性都很差
匯編語言采用了助記符號編寫程序,通過編譯器轉(zhuǎn)換成能夠被計算機(jī)識別和處理的二進(jìn)制代碼程序。匯編語言仍然是面向機(jī)器的語言,編程煩瑣費時,通用性也差。
高級語言用與自然語言接近的代碼編寫程序,通過編譯器轉(zhuǎn)換成二進(jìn)制代碼程序。高級語言易學(xué)易用,通用性好。C語言是一種結(jié)構(gòu)化的高級編程語言,在單片機(jī)系統(tǒng)開發(fā)中得到了廣泛應(yīng)用。
1.數(shù)制的基與權(quán)
基 :各計數(shù)制中每個數(shù)位上可用字符的個數(shù)。
權(quán) :數(shù)字“1”在數(shù)字不同的數(shù)位所代表的數(shù)值。
二進(jìn)制基數(shù)為2( 0和1),權(quán)為以2為底的冪。二進(jìn)制數(shù)字后面用B表示
十進(jìn)制基數(shù)為10(0-9),權(quán)是以10為底的冪。十進(jìn)制用D(或不加標(biāo)志)表示十進(jìn)制數(shù)
十六進(jìn)制基數(shù)為16(0-9以及A-F),權(quán)是以16為底的冪。十六進(jìn)制用H表示十六進(jìn)制數(shù)。
進(jìn)制轉(zhuǎn)換此處略,往上方法有很多,大家根據(jù)自己情況選個適合自己的即可
例5 將十進(jìn)制數(shù)500.03125轉(zhuǎn)換為十六進(jìn)制數(shù)
解:
因此可得:500.03125=1F4.08H
十六進(jìn)制數(shù)與二進(jìn)制數(shù)之間的轉(zhuǎn)換
整數(shù)部分由小數(shù)點向左每4位一組,若整數(shù)最高位的一組不足4位,則在其左邊加0補(bǔ)足4位;
小數(shù)部分由小數(shù)點向右每4位一組,若小數(shù)最低位的一組不足4位,則在其右邊加0補(bǔ)足4位;
用與每組二進(jìn)制數(shù)所對應(yīng)的十六進(jìn)制數(shù)取代每組的4位二進(jìn)制數(shù)即可轉(zhuǎn)換為十六進(jìn)制。
將十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)時,過程相反。
例6:將十六進(jìn)制數(shù)9F4.1H轉(zhuǎn)換為二進(jìn)制數(shù)
解:將每位十六進(jìn)制數(shù)寫為二進(jìn)制數(shù)
可得: 9F4.1H = 100111110100.0001B
二、編碼
編碼是計算機(jī)為輸入處理字母、數(shù)字和符號等組成的信息,依靠輸入設(shè)備先把要輸入的字符按一定格式編成的二進(jìn)制代碼。
目前國際上使用的字符編碼是ASCII碼(Americanstandard coded for information interchange,美國信息交換標(biāo)準(zhǔn)碼)。
ASCII碼用一個字節(jié)來表示一個字符,采用7位二進(jìn)制代碼來對字符進(jìn)行編碼,最高位一般用做校驗位,因此共128個,包括32個通用控制符號、10個阿拉伯?dāng)?shù)字、52個英文大寫和小寫字母及34個專用符號。
三、變量與運算符
數(shù)字0-9的ASCII碼為30H-39H,英文大寫字母A-Z的ASCII碼為41H-5AH
數(shù)據(jù)可分為常量和變量。常量是數(shù)值和字符等不能改變的量,可以不經(jīng)說明和定義直接使用,而變量是在程序運行過程中可以根據(jù)需要改變的量,在引用之前必須定義類型。
C51 定義一個變量的格式如下:
數(shù)據(jù)類型 [存儲類型] 變量名表
其中“數(shù)據(jù)類型”和“存儲類型”的先后次序可以互換。
表4-1Cx51支持的數(shù)據(jù)類型
四、變量類型
bit 、sfr、 sfr16 和sbit是 Keil C51中新增的變量類型。
(1**)bit**用來定義位變量,值只能是0或1。位變量位于8051單片機(jī)內(nèi)部RAM位尋址區(qū)(20H~2FH),共為16字節(jié),最多可定義128個位變量。
(2**)sfr**用于定義特殊功能寄存器變量。該變量存儲在片內(nèi)的特殊功能寄存器存儲區(qū)中,用來對特殊功能寄存器進(jìn)行讀寫操作。
例如:51頭文件中有定義sfr P0=0x90,這一語句定義了P0端口在片內(nèi)的寄存器,在程序中可以使用P0對該端口寄存器進(jìn)行操作。
(3)sfr16也用于定義特殊功能寄存器,所不同的是它用于操作占兩個字節(jié)的特殊功能寄存器。
例如:sfr16DPTR=0x82語句定義了片內(nèi)16位數(shù)據(jù)指針寄存器DPTR,其低8位字節(jié)地址為82H,高8位字節(jié)地址為83H,在程序中可以對DPTR進(jìn)行操作。
(4)sbit用于定義特殊功能寄存器位變量,用來對特殊功能寄存器的可位尋址位進(jìn)行讀寫操作。
例如sbit P0_0=P0^0 定義了特殊功能寄存器P0的第0位,后面對該位的操作可用P0_0代替。符號^后面的數(shù)字定義特殊功能寄存器可尋址位在寄存器中的位置,取值必須是0-7。
五、儲存類型
Cx51存儲類型
1.片內(nèi)存儲區(qū)
(1)data將變量存儲在片內(nèi)可直接尋址的數(shù)據(jù)存儲器DATA區(qū)中。DATA區(qū)位于片內(nèi)RAM的低128字節(jié)(0X00~0X7F)。
使用data存儲模式,目標(biāo)代碼中對變量的訪問速度最快,把經(jīng)常使用的變量放在DATA區(qū)可提高程序運行速度。
若定義i為存儲類型為data的無符號字符型數(shù)據(jù),可聲明為:unsigned char data i
(2) bdata用于將變量定義在數(shù)據(jù)存儲器可位尋址的BDATA區(qū),允許位與字節(jié)混合訪問。uBDATA區(qū)位于單片機(jī)內(nèi)部RAM字節(jié)地址0x20~0x2F的16個字節(jié)中,每個字節(jié)8位,共計16x8=128個可尋址位。u例如如下聲明后可用位變量value0訪問字節(jié)value的0位:
unsigned char bdata value;
bit value0=value^0;
若value的原值為0x00,欲將value的第0位置為1,可采用按字節(jié)訪問方式“value=0x01”實現(xiàn),也可以按位尋址方式“value0=1”實現(xiàn)。
(3)idata將變量存儲在片內(nèi)間接尋址的數(shù)據(jù)存儲區(qū)IDATA區(qū)中。IDATA區(qū)使用指針來進(jìn)行尋址和訪問。
51內(nèi)核單片機(jī)RAM僅有128個字節(jié),因此無間接尋址數(shù)據(jù)存儲器區(qū),idata與data無區(qū)別。52內(nèi)核單片機(jī)RAM有256個字節(jié),當(dāng)片內(nèi)128字節(jié)的直接尋址數(shù)據(jù)存儲區(qū)不夠用時,可以使用128字節(jié)間接尋址數(shù)據(jù)存儲區(qū),訪問速度較data慢一些。
2.片外存儲區(qū)
xdata將變量存儲在片外數(shù)據(jù)存儲器中,采用16位地址,可以訪問外部數(shù)據(jù)存儲區(qū)64KB內(nèi)的任何地址。
pdata將變量存儲在片外數(shù)據(jù)存儲器中的第一頁(地址00H~FFH)中,存儲空間為256字節(jié)。對PDATA區(qū)尋址,只需要裝入8位地址,而對XDATA區(qū)尋址要裝入16位地址,因此對PDATA區(qū)的尋址要比對XDATA區(qū)尋址快。
pdata和xdata存儲類型的變量由于需要訪問外存,訪問速度最慢,應(yīng)盡量減少對變量的訪問次數(shù)。這兩種類型適合保存原始數(shù)據(jù)或最終結(jié)果,需要頻繁訪問的中間結(jié)果應(yīng)盡量不用或少用。
3.程序存儲器ROM
code將變量存儲在程序存儲器中,變量只能讀不能寫,因此適合存儲常量或查表類的數(shù)組數(shù)據(jù),不能用于存儲程序運行過程中需要修改的變量。如果想改變變量值,只能在程序中修改后重新將程序燒寫進(jìn)ROM中。
-
計算機(jī)
+關(guān)注
關(guān)注
19文章
7639瀏覽量
90453 -
匯編語言
+關(guān)注
關(guān)注
14文章
410瀏覽量
36696 -
編譯器
+關(guān)注
關(guān)注
1文章
1658瀏覽量
50032
發(fā)布評論請先 登錄
匯編語言程序設(shè)計pdf

匯編語言程序設(shè)計下載

評論