組合語言採用了助記符號編寫程式,通過編譯器轉換成能夠被計算機識別和處理的二進位制**程式。
基:各計數制中每個數字上可用字元的個數。
權:數字「1」在數字不同的數字所代表的數值。
因此可得:500.03125=1f4.08h
十六進製制數與二進位制數之間的轉換
整數部分由小數點向左每4位一組,若整數最高位的一組不足4位,則在其左邊加0補足4位;
小數部分由小數點向右每4位一組,若小數最低位的一組不足4位,則在其右邊加0補足4位;
用與每組二進位制數所對應的十六進製制數取代每組的4位二進位制數即可轉換為十六進製制。
將十六進製制數轉換為二進位制數時,過程相反。
解:將每位十六進製制數寫為二進位制數
可得: 9f4.1h = 100111110100.0001b
編碼是計算機為輸入處理字母、數字和符號等組成的資訊,依靠輸入裝置先把要輸入的字元按一定格式編成的二進位制**。
目前國際上使用的字元編碼是ascii碼(americanstandard coded for information interchange,美國資訊交換標準碼)。
ascii碼用乙個位元組來表示乙個字元,採用7位二進位制**來對字元進行編碼,最高位一般用做校驗位,因此共128個,包括32個通用控制符號、10個阿拉伯數字、52個英文大寫和小寫字母及34個專用符號。
數字0-9的ascii碼為30h-39h,英文大寫字母a-z的ascii碼為41h-5ah
資料可分為常量和變數。常量是數值和字元等不能改變的量,可以不經說明和定義直接使用,而變數是在程式執行過程中可以根據需要改變的量,在引用之前必須定義型別。
c51 定義乙個變數的格式如下:
資料型別 [儲存型別] 變數名錶
其中「資料型別」和「儲存型別」的先後次序可以互換。
bit 、sfr、 sfr16 和sbit是 keil c51中新增的變數型別。
(1**)bit**用來定義位變數,值只能是0或1。位變數位於8051微控制器內部ram位定址區(20h~2fh),共為16位元組,最多可定義128個位變數。
(2**)sfr**用於定義特殊功能暫存器變數。該變數儲存在片內的特殊功能暫存器儲存區中,用來對特殊功能暫存器進行讀寫操作。
例如:51標頭檔案中有定義sfr p0=0x90,這一語句定義了p0埠在片內的暫存器,在程式中可以使用p0對該埠暫存器進行操作。
(3)sfr16也用於定義特殊功能暫存器,所不同的是它用於操作佔兩個位元組的特殊功能暫存器。
(4)sbit用於定義特殊功能暫存器位變數,用來對特殊功能暫存器的可位定址位進行讀寫操作。
例如sbit p0_0=p0^0 定義了特殊功能暫存器p0的第0位,後面對該位的操作可用p0_0代替。符號^後面的數字定義特殊功能暫存器可定址位在暫存器中的位置,取值必須是0-7。
1.片內儲存區
(1)data將變數儲存在片內可直接定址的資料儲存器data區中。data區位於片內ram的低128位元組(0x00~0x7f)。
使用data儲存模式,目標**中對變數的訪問速度最快,把經常使用的變數放在data區可提高程式執行速度。
若定義i為儲存型別為data的無符號字元型資料,可宣告為:unsigned char data i
(2)bdata用於將變數定義在資料儲存器可位定址的bdata區,允許位與位元組混合訪問。ubdata區位於微控制器內部ram位元組位址0x20~0x2f的16個位元組中,每個位元組8位,共計16x8=128個可定址位。u例如如下宣告後可用位變數value0訪問位元組value的0位:
unsigned char bdata value;
bit value0=value^0;
若value的原值為0x00,欲將value的第0位置為1,可採用按位元組訪問方式「value=0x01」實現,也可以按位定址方式「value0=1」實現。
(3)idata將變數儲存在片內間接定址的資料儲存區idata區中。idata區使用指標來進行定址和訪問。
51核心微控制器ram僅有128個位元組,因此無間接定址資料儲存器區,idata與data無區別。52核心微控制器ram有256個位元組,當片內128位元組的直接定址資料儲存區不夠用時,可以使用128位元組間接定址資料儲存區,訪問速度較data慢一些。
2.片外儲存區
xdata將變數儲存在片外資料儲存器中,採用16位位址,可以訪問外部資料儲存區64kb內的任何位址。
pdata將變數儲存在片外資料儲存器中的第一頁(位址00h~ffh)中,儲存空間為256位元組。對pdata區定址,只需要裝入8位位址,而對xdata區定址要裝入16位位址,因此對pdata區的定址要比對xdata區定址快。
pdata和xdata儲存型別的變數由於需要訪問外存,訪問速度最慢,應儘量減少對變數的訪問次數。這兩種型別適合儲存原始資料或最終結果,需要頻繁訪問的中間結果應盡量不用或少用。
3.程式儲存器rom
code將變數儲存在程式儲存器中,變數只能讀不能寫,因此適合儲存常量或查表類的陣列資料,不能用於儲存程式執行過程中需要修改的變數。如果想改變變數值,只能在程式中修改後重新將程式燒寫進rom中。
組合語言 變數的定義
1.什麼是變數 variable 變數可以隨著程式的執行發生變化的量,儲存在主存空間中,變數需要事先定義才能使用,變數本質上就是主存單元裡的資料,主存是可讀可寫的,所以變數可以發生改變。變數有別於常量,常量是寫在指令裡的,不佔主存空間。2.變數定義的格式變數名 偽指令助記符 變數初值表變數名 變數名...
組合語言 AT T組合語言
這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...
組合語言 記憶體變數的位址
計算機中的記憶體是以位元組為單位的連續的儲存空間,每個位元組都有乙個唯一的編號,這個編號就稱為記憶體位址 因為記憶體的儲存空間是連續的,所以,記憶體位元組的位址編號也是連續的,並用二進位制或十六進製制數來表示 在記憶體中,每個變數都有自己的儲存單元,不同型別的變數占用的儲存單元空間大小不一樣 對於多...