第2章 一些数据单位(X86汇编教程)
我用WinHEX打开了一个PNG图片文件.
最上边灰色那里,是显示你打开的文件的文件名.已经打开了一个PNG文件.
白色区的offset竖排(也就是那些8个16进制数字排列在一起的那一框)为当前行第一个字节的偏移地址呢?偏移地址,是一个字节的距离第一个字节的长度 (以字节为单位).顺带一提,在电脑里有些东西的统计是以0开始的,我们生活中数数是1...2...3但是在电脑中有时是从0开始的,0...1...2...3学过高级语言的可能已经习惯了,高手的代码里经常出现把某某数字加1或者减1就是为了这样.
这样,我们的第一个字节的偏移为0.偏移竖排表示了第一个字节的偏移,偏移横排则可以确定每个字节的偏移.
算法:
当前行的偏移竖排处的数值+你要计算的那个字节在偏移横排对应的值=你要计算的那个字节的偏移
比如:第3行第7个字节.
第3行偏移竖排处的值为00000020偏移横排值为6(为什么第7个数字的横排值会是6?没搞错哟,记得前面说的从0开始吗?从0开始计算,第7个字节为6哟!以后会经常出现这样的情况,汇编学久了就习惯了)
加起来就是26H(注意:16进制的哟!)
最右边就是ASCII解码了,什么是ASCII呢?那是一种只有英文字母,数字,标点符号的文本编码(文本编码:用数字表示字符.)正常的ASCII只有一个字节,最右边就是对ASCII进行解析的区域,它能解析出这个字节和哪个字符的ASCII码相同,并显示出那个字符,如果那个字节没有对应的字符则显示小数点.
好了,关于WinHEX的讲解就到这里了.继续讲数据单位.
之前说到,从某种意义上来说字节才是最小的单位.接着说说比字节大的单位.
字 (WORD),1个字型数据有2个字节,在文本编码中,word才是表示一个字符的最佳单位.因为字节(byte)只能表示0-255之间的数字(用计算器把2进制的8个1转换成10进制看看)而就拿中文来说吧.几千个中文,最大才255的字节型怎么够呢?所以,用字形(WORD)有16位2进制=65536(最大值65535,但是,从0开始啊!别把0丢了)种可能几千个中文完全够用了.所以中文编码正常的是用2个字节(也就是"字"表示一个文字),可以做一个实验:用记事本输入一个中文,然后保存下来,用WinHEX打开看看.
然后就是双字(DWORD)了,顾名思义,就是2个字形数据合一起,有32比特,可能有人已经想到了,32位系统能一次性计算一个双字数据,但是不要想成双字是 32位系统独有的呀,曾经的16位MS-DOS系统也是能有双字型数据的哟!所谓字和双字只是逻辑上的.完全能把字形数据当作2个排列在一起的字节看待, 双字也是,可以当作是4个字节看待.
.这些都是小单位.说说大点的单位吧.
KB,在某些地方是1000字节的意思,但大多数时候是指1024个字节
MB,代表1000KB或1024KB(大多数代表1024KB)
GB,1000MB或1024MB
TB,1000GB或1024GB(TB可是写这教程的最近几年才开始使用的...似乎很多人都还不知道有这个单位呢,,)
在大家买手机记忆卡的时候是不是有出现过明明买的2G的卡,打开一看只有1.8G呢?实际上这是算法不同造成的.看到这里,大家都知道从KB开始,数据有 1000和1024这2种进制.厂家用的就是1000进制而我们用的就是1024进制,所以,我们看到的记忆卡容量通常比卡上表示的小.按照以上方法,计算一下,你会发现,你买的卡的空间不但没有小于卡上面写的,反而还大了一点呢!
评论