趁着空闲读彭博的《游戏编程指南》。
一、语言
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时转移