读《游戏编程指南》

趁着空闲读彭博的《游戏编程指南》。

一、语言

1、定义多维数组

int **p;
p = new int*[40];
for(int i = 0; i < 40; ++i)
	  p[i] = new int [60]; // 为p数组中的每一指针分配内存

2、定义字符串

char* str = "alexmy"; // "alexmy"是在常量区,无需手动释放
		 	

3、常用函数

int rand()								// 返回一个随机整数
void srand(int) 					// 根据参数重新初始化随机数产生器
int/float abs(int/float)  // 返回数的绝对值
min/max(a,b)							// 返回a和b中较小/大的值
int atoi(char* s)					// 返回由s字符串转换成的整数
double atof(char* s)			// 返回由s字符串转换成的浮点数

char *strcpy(char *dest, char *src);,该函数使dest=src并返回新的dest。使用它还可以实现字符串和字符数组之间的转换。
char *strncpy(char *dest, char *src, int size);,和strcpy的唯一区别是只拷贝size个字符。记得补上尾部的’/0’!
char* strcat(char *dest, char *src);,将src连接到dest的后面,并返回新的dest。
char* strstr(char *s1, char *s2);,返回指向s2在s1中第一次出现的位置的指针。
char* strchr(char *s1, char c);,返回指向c在s1中第一次出现的位置的指针。
char* strlwr(char *s);,将s中的所有大写字母转为小写。
char* strset(char *s, char c);,将s内所有字符替换为字符c。
int strcmp(const char*s1, const char* s2);,判断如按字典顺序s1是否在s2之前。是则返回1,否则返回-1,若两字符串相等,返回0。
int strlen(char *s);,返回字符串的长度。

4、文件读写

	#include <fstream>
	using namespace std;
	int a;
	……
	fstream file;
	file.open("abc.dat"); //使用file.open("abc.dat", ios::binary);可指定为二进制模式
	file>>a; //就像cin
	file<<"abcdefg"; //就像cout
	……
	file.close(); //关闭文件

二、内嵌汇编

1、处理器大部分指令不能直接施用在内存中的变量上,需要借助寄存器这个中间存储单元(可以看成是一个变量),Pentium级处理器有八个32位的通用寄存器。

分别为:EAX,EBX,ECX,EDX,EBP,ESP,EDI,ESI,每一个通用寄存器的低16位又分别被称为AX,BX,CX,DX,BP,SP,DI,SI。其中AX,BX,CX,DX的高8位称为AH,BH,CH,

DH,低8位被称为AL,BL,CL,DL,注意内嵌汇编中不应施用EBP,ESP他们存储着重要的堆栈信息。

还有一个非常重要的寄存器,叫做标志寄存器(EFLAGS),标注了运算结果的各个属性,不恩能够直接读取或修改它。这些属性有:不溢出/溢出(OF),正/负(SF),

非零/零(ZF),偶/奇(PF),不进位/进位(CF)

2、实例:两个正整数相加

void main()
	{
		int a = 1, b = 2;
		int* c = &a;
		_asm		// 开始内嵌汇编
		{
			mov eax,c;
			mov eax,[eax];
			mov ebx,b;
			lea eax,[eax+ebx];
			mov a,eax;
		}			 	// 内嵌汇编结束
	}
JMP				无条件转移                          
	JE / JZ				ZF=1时转移
	JNE / JNZ			ZF=0时转移

JS					SF=1时转移
JNS					SF=0时转移		
JO					OF=1时转移
JNO 				OF=0时转移
JP / JPE			PF=1时转移
JNP / JPO 			PF=0时转移

根据两无符号数关系转移:
	JA / JNBE			大于时转移 (CF或ZF=0)
	JBE / JNA			不大于时转移 (CF或ZF=1)
	JB / JNAE / JC		小于时转移 (CF=1)
	JNB / JAE / JNC 	不小于时转移 (CF=0)

根据两有符号数关系转移:
JNLE / JG			大于时转移 ((SF异或OF)或ZF)=0 )
JLE / JNG			不大于时转移 ((SF异或OF)或ZF)=1 )
JL / JNGE     		小于时转移 (SF异或OF=1)
	JNL / JGE			不小于时转移 (SF异或OF=0)
	
	特殊转移语句:
	JECXZ				CX=0时转移






上一篇:深入了解Cookie(1)------selenium2进行Cookie操作的前奏


下一篇:多线程案例:龟兔赛跑-Race