| 修改众 |
08-05-20 16:46 |
===========知识点1:32位 大家知道,现在的游戏数据多是4byte的内存长度 4byte也叫做 "Double Word","双字"
现在的CPU多是32位,这个32位是这么来的 cpu处理的实际是2进制的数据,1个2进制的0或者1,用bit来表示 1byte=8bit (注意发音很接近,所以很容易搞错 4byte=32bit cpu处理数据依赖其中的寄存器,eax,ebx,ecx等等 寄存器的存储长度决定了cpu处理数据的单位 32位cpu的寄存器所容纳的数据长度是32位 所以叫做32位cpu,对应的操作系统叫做32位操作系统。
游戏采用4byte的内存地址,32位cpu可以最高效率的处理数据 这样游戏可以最大限度的提高运行速度。
(实际上就算数据不是32位,cpu在运算的时候也会将数据转换为32位 比如1个2byte=16bit的数据,cpu在运算的时候会把它扩展为32位的数据,只是前16位都用0来表示。 所以32位cpu可以处理小于32长度的数据,兼容以前的程序。 但却不能兼容超过32位的数据。64位系统用的程序就不能在32位cpu上运行。
==========知识点2: bit运算 知道了cpu的运算规则,就不难理解游戏的运算规则。 某个精神状态的有无,只要用1个bit来表示就足够了。 例如机战R中,最低4bit分别表示 不直集饶 的有无。 有就是1,无就是0 这样,如果同时有这4个精神状态,就是1111(2进制 转换为16进制就是F,内存查看器中显示的就是16进制的这个值
机战R用32byte来存放精神状态的值。 所以最多同时可以有32种精神状态。 然后只需要检查对应bit是否为1,就知道那种精神状态有没有。
汇编中有and,or,xor这些逻辑运算命令,用来计算bit的值。
进制转换 十进制 十六进制 二进制 0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 9 1001 10 A 1010 11 B 1011 12 C 1100 13 D 1101 14 E 1110 15 F 1111 |
|