Forth语言是令人惊讶的灵巧、浑然一体,思维方法很出色。
多阅读一下C++编译器生成的汇编代码绝对能加快学习的步伐。 —— 云风
学习新的技术,翻译一本相关的英文著作可以算是一条捷径。(踏实的翻译比起马虎粗看有用得多,实际翻译对英文的要求不高)
对于游戏程序的设计,除了整体框架外,考虑得最多的就是时间和空间了。
Strategy模式就是用来“封装”“算法”的,不用时间应用不同的业务规则(例子:CashSuper 收费选择算法)。
设计模式关心的问题:①复用;②扩展;③灵活组合;④维护。(例子:活字印刷,一个字模放到印刷另一本书;加入新的字模;排列出更另一版内容;修改容易——从《短歌行》说起。其实还包括高内聚、低耦合、隐藏逻辑处理层等)
优化代码从 “简单的计算器” 说起…… (命名、效率、严谨性-错误处理、OOP)
简单工厂模式
策略模式(①抽象策略角色(abstract);②具体策略(具体的arithmetic);③环境角色(content 上下文 用来引用策略,最终给客户端)。)
简单工厂+策略模式
细枝末节:virtual override static 等。
关于ASM:
程序的本质:操作(指令) 参数 参数的定位方法(寻址方式)
80386的10个寄存器,7个“较”通用寄存器(EAX、EBX、ECX、EDX | ESI-惯于源地址、EDI-惯于指向目的地址、EBP-惯于作stack指针),EIP(指令指针),ESP(stack指针-16bit),PSW(状态寄存器:OF、ZF、SF、CF、AF、PF等 IF……)
①PUSH、CALL|POP、RET 会隐式改变ESP的值,单线程和多线程中的主线程的stack会处于整个地址空间的最低处 ESP(地址&value 增加 递减);
②将影响标志位和根据标志位做跳转的指令结合起来:CMP EAX,EBX JNZ label //CMP和SUB相似,但仅改变标志位;JNZ,if(ZF=0){跳转};ZF为0即是运算结果不为0,JNZ即Jump not zero;
③寻址方式(四种大类):1、立即寻址 MOV EAX,1 2、寄存器寻址 MOV EAX,EBX 3、直接寻址 MOV EAX,[0x0000] 4、间接寻址
MOV EAX,[EBX+ECX*4+4] //可以理解为 基址 + 变址 + 常数偏移
用C语言的思想来理解就是…… 例如二维数组的访问
④汇编引用C++函数 或者 汇编写供C++调用的函数 ,编译的规则……(C++到ASM的编译规则-提高访问速度和,EAX-返回值、ECX-this指针、EDX-同EAX,//EBP-修改EBP间接寻址stack参数所在 ,用VC的内嵌汇编则可不考虑)
⑤修改EIP的值就如跳转JMP(无条件跳转)