第2章 一些数据单位(X86汇编教程)
前面说道,2进制(因为bit,中文比特),也就是1和0组成的数字,每8个比特为1个字节(英文叫做byte).
在电脑中比特必须按照字节的方式对齐,也就是说,不可能出现内存中一段数据只有1比特这样的情况,一次性操作的数据最少为1个字节,也就是8个比特.从这方面来看,字节才算是电脑中的最小数据单位.
在电脑里,几乎一切东西右数字构成.由字节为基本单位.我们以字节方式查看一下图片音乐之类的文件看看吧:
这里,介绍一个工具,WinHEX,相信很多人都已经认识了.照顾一下不认识的同学,在这里随便讲讲......
下载地址:http://www.51hei.com/f/winhex.zip
#WINHEX.rar
启动WinHEX:
最上边的菜单栏,文件->打开
选中你要打开的文件.你将看到如下内容:
我用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进制,所以,我们看到的记忆卡容量通常比卡上表示的小.按照以上方法,计算一下,你会发现,你买的卡的空间不但没有小于卡上面写的,反而还大了一点呢!
数据单位X86汇编教 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)