第2章 一些數據單位(X86匯編教程)
作者:
時間:2016-12-01
來源:網絡
收藏
我用WinHEX打開了一個PNG圖片文件.
最上邊灰色那里,是顯示你打開的文件的文件名.已經打開了一個PNG文件.
白色區(qū)的offset豎排(也就是那些8個16進制數字排列在一起的那一框)為當前行第一個字節(jié)的偏移地址呢?偏移地址,是一個字節(jié)的距離第一個字節(jié)的長度 (以字節(jié)為單位).順帶一提,在電腦里有些東西的統(tǒng)計是以0開始的,我們生活中數數是1...2...3但是在電腦中有時是從0開始的,0...1...2...3學過高級語言的可能已經習慣了,高手的代碼里經常出現把某某數字加1或者減1就是為了這樣.
這樣,我們的第一個字節(jié)的偏移為0.偏移豎排表示了第一個字節(jié)的偏移,偏移橫排則可以確定每個字節(jié)的偏移.
算法:
當前行的偏移豎排處的數值+你要計算的那個字節(jié)在偏移橫排對應的值=你要計算的那個字節(jié)的偏移
比如:第3行第7個字節(jié).
第3行偏移豎排處的值為00000020偏移橫排值為6(為什么第7個數字的橫排值會是6?沒搞錯喲,記得前面說的從0開始嗎?從0開始計算,第7個字節(jié)為6喲!以后會經常出現這樣的情況,匯編學久了就習慣了)
加起來就是26H(注意:16進制的喲!)
最右邊就是ASCII解碼了,什么是ASCII呢?那是一種只有英文字母,數字,標點符號的文本編碼(文本編碼:用數字表示字符.)正常的ASCII只有一個字節(jié),最右邊就是對ASCII進行解析的區(qū)域,它能解析出這個字節(jié)和哪個字符的ASCII碼相同,并顯示出那個字符,如果那個字節(jié)沒有對應的字符則顯示小數點.
好了,關于WinHEX的講解就到這里了.繼續(xù)講數據單位.
之前說到,從某種意義上來說字節(jié)才是最小的單位.接著說說比字節(jié)大的單位.
字 (WORD),1個字型數據有2個字節(jié),在文本編碼中,word才是表示一個字符的最佳單位.因為字節(jié)(byte)只能表示0-255之間的數字(用計算器把2進制的8個1轉換成10進制看看)而就拿中文來說吧.幾千個中文,最大才255的字節(jié)型怎么夠呢?所以,用字形(WORD)有16位2進制=65536(最大值65535,但是,從0開始啊!別把0丟了)種可能幾千個中文完全夠用了.所以中文編碼正常的是用2個字節(jié)(也就是"字"表示一個文字),可以做一個實驗:用記事本輸入一個中文,然后保存下來,用WinHEX打開看看.
然后就是雙字(DWORD)了,顧名思義,就是2個字形數據合一起,有32比特,可能有人已經想到了,32位系統(tǒng)能一次性計算一個雙字數據,但是不要想成雙字是 32位系統(tǒng)獨有的呀,曾經的16位MS-DOS系統(tǒng)也是能有雙字型數據的喲!所謂字和雙字只是邏輯上的.完全能把字形數據當作2個排列在一起的字節(jié)看待, 雙字也是,可以當作是4個字節(jié)看待.
.這些都是小單位.說說大點的單位吧.
KB,在某些地方是1000字節(jié)的意思,但大多數時候是指1024個字節(jié)
MB,代表1000KB或1024KB(大多數代表1024KB)
GB,1000MB或1024MB
TB,1000GB或1024GB(TB可是寫這教程的最近幾年才開始使用的...似乎很多人都還不知道有這個單位呢,,)
在大家買手機記憶卡的時候是不是有出現過明明買的2G的卡,打開一看只有1.8G呢?實際上這是算法不同造成的.看到這里,大家都知道從KB開始,數據有 1000和1024這2種進制.廠家用的就是1000進制而我們用的就是1024進制,所以,我們看到的記憶卡容量通常比卡上表示的小.按照以上方法,計算一下,你會發(fā)現,你買的卡的空間不但沒有小于卡上面寫的,反而還大了一點呢!
評論