??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色偷偷色噜噜狠狠99,亚洲成a人片在线观看中文!!!,亚洲美女视频免费http://m.tkk7.com/zellux/category/27574.htmlI'm awake but my world is half asleepzh-cnWed, 27 Jan 2010 09:50:58 GMTWed, 27 Jan 2010 09:50:58 GMT60OS Lab 零散记录http://m.tkk7.com/zellux/archive/2008/10/10/233601.htmlZelluXZelluXFri, 10 Oct 2008 07:21:00 GMThttp://m.tkk7.com/zellux/archive/2008/10/10/233601.htmlhttp://m.tkk7.com/zellux/comments/233601.htmlhttp://m.tkk7.com/zellux/archive/2008/10/10/233601.html#Feedback0http://m.tkk7.com/zellux/comments/commentRss/233601.htmlhttp://m.tkk7.com/zellux/services/trackbacks/233601.html
Time : 2008-08-20 21:44
汇编文g中导出函数符?br />

Linux 2.4.18的linux/linkage.h文g定义了若q相关的?br />

#define SYMBOL_NAME(X) X
#ifdef __STDC__
#define SYMBOL_NAME_LABEL(X) X##:
#else
#define SYMBOL_NAME_LABEL(X) X/**/:
#endif
 
#define __ALIGN .align 16,0x90
#define __ALIGN_STR ".align 16,0x90"
 
#define ALIGN __ALIGN
#define ALIGN_STR __ALIGN_STR
 
#define ENTRY(name) \
  .globl SYMBOL_NAME(name); \
  ALIGN; \
  SYMBOL_NAME_LABEL(name)

用ENTRY(name)p定义函数了。后来发现Flux OSKit中本来就提供了类似功能的宏,定义在inc/asm.h中?br />使用的时候需要再写一个c语言的wrapper functionQ至?.4.18里面是这么做的)
asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");

Time : 2008-08-22 15:56
OS Lab 4 debugging notes [1]
pȝ调用 fork()

用Simics跟踪一条条汇编分析表映射、寄存器D真是体力zd。?/p>

1. 实现Copy On WriteӞ如果某一个用h页面有多个q程׃nQ其中一个进E修改该面旉要创Z个新的页面。一开始偶忘了把原来页面的内容复制到新的页面了 =_= 另外׃新的面要代替老的面Q或者说它们的物理地址不同Q但虚拟地址相同Q我的方法是在内核态开辟一个大ؓ(f)一个页面的I间作ؓ(f)中{?/p>

2. do_fork函数中,子进E复制父q程的页表的同时?x)把父进E页表项|ؓ(f)不可写,注意最后要flush tlb。因Z开始没有flush tlbQ导致最后用hforkq回以后d的信息来自于tlbQ直接改写了׃n面中fork的返回地址Q导致切换到子进E时fork的返回地址丢失。这个bug让我郁闷了两三个时。?/p>

3. 使用两次forkӞW二ơforkq回的pid?x)被?gu)。查了下发现为用L(fng)间分配物理页面的代码里居然在分配好以后没有把对应的struct|ؓ(f)已用,l果DW二个子q程COW创徏新页面时得到了原来的父进E页面,改写了父q程面内容?br />

Time : 2008-08-23 19:41
OS Lab4 debugging notes [2]
 
pȝ调用 exec()

1. 清空表的用L(fng)间映的函数一开始写得ytsQbug到处都是Q比如free的时候没使用指向内存块首地址的指针,记录内存地址的变量没有篏加?/p>

2. exec传递给内核态的两个参数必须先在内核态保存一个副本,否则清空用户态页表后无法得到这两个参数信息了?/p>

3. 分配l用h的面必须先清Ӟ一斚w考虑到安全性,另一斚w不清零会(x)隐藏一些潜在的bug。一开始我没有在内核执行exec的时候完整的复制所有的参数Q而是直接指向了原q程的内存空_(d)׃清空表后再ơ申h表时得C原来的页面,l果正好原来那个保存参数的页面和新进E的该页面重合了 =_= 于是费了不时间在q个bug?/p>

Time : 2008-08-31 1:18
OS Lab5 debugging notes

q算利Q不q这个lab蛮无聊的Q等有空了把syscallҎ(gu)cMlinux的做法,单一中断?寄存器选择syscall?/p>

1. 最花时间的一个bug是lsq回值没有改成应用程序数Q结果一开始一直以为是brkpȝ调用没写好,最后才发现问题出在q么的地方?/p>

2. brk的逻辑q不是很清楚Q尽通过了简单的试Q但是debug输出的信息显Cbrk增长的很快,l常是一个页一个页涨的Q看来还得查下brk的具体行为?/p>

3. 写了个比MAGIC_BREAK好用一点的宏,因ؓ(f)用户态的E序都是按二q制d的,Simics无法得到函数信息Q函数名、当前行数等Q,利用C99的宏写了个新的INFO_BREAK

#define INFO_BREAK \
    
do {  \
        lprintf_kern(
"break in %s:%d", __FUNCTION__, __LINE__); \
        MAGIC_BREAK; \
    }
 while (0) \


ZelluX 2008-10-10 15:21 发表评论
]]>
OSLab之中断处?http://m.tkk7.com/zellux/archive/2008/09/02/226312.htmlZelluXZelluXTue, 02 Sep 2008 03:55:00 GMThttp://m.tkk7.com/zellux/archive/2008/09/02/226312.htmlhttp://m.tkk7.com/zellux/comments/226312.htmlhttp://m.tkk7.com/zellux/archive/2008/09/02/226312.html#Feedback5http://m.tkk7.com/zellux/comments/commentRss/226312.htmlhttp://m.tkk7.com/zellux/services/trackbacks/226312.htmlZellux (null), 信区: Software_06
? ? OSLab之中断处?br />发信? 日月光华 (2008q?8?0?0:15:58 星期?, 站内信g

1. 准备工作
在开始分析Support Code之前Q先配置下我们的Source InsightQ它能够支?s文g的搜索?br />
在Options->Document Options->Document Types中选择x86 Asm Source FileQ在File fileter中增加一?.sQ变?.asm;*.inc;*.s 然后在Project->Add and Remove
Project Files中重新将整个oslab的目录加入,q样以后q行文本搜烦?s文g也不?x)漏掉了?br />
2. Source Insight使用
接下来简单分析下内核启动的过E,在浏览代码的q程中可以迅速的掌握Source Insight的用技巧?br />
lib/multiboot /multiboot.s完成了初始化工作Q可以看到其中一句call
EXT(multiboot_main)调用了C函数multiboot_mainQ用ctrl+/搜烦包含multiboot_main的所有文Ӟ最lbase_multiboot_main.c中找C它的定义。依ơ进行cpu、内存的?br />始化Q然后开启中断,跌{到kernel_main函数Q也是Lab1中所要改写的函数之一。另?br />在这里可以通过ctrl+单击或者ctrl+=跌{到相应的函数定义处,很方ѝ?br />
3. irq处理初始化工?br />来看下Lab 1的重点之一Qirq的处理。跟tmultiboot_main->base_cpu_setup->base_cp
u_init->base_irq_initQ可以看到这行代?br />gate_init(base_idt, base_irq_inittab, KERNEL_CS);
l箋使用ctrl+/扑ֈbase_irq_inittab的藏w之处:(x)base_irq_inittab.s

4. base_irq_inittab.s
q个汇编文g做了不少重复性工作,方便我们在c语言U别实现各种handler?br />GATE_INITTAB_BEGIN(base_irq_inittab) /* irq处理函数表的起始Q还记得jump
table 吗? */
MASTER(0, 0) /* irq0 对应的函?*/


来看看这个MASTER(0, 0)宏展开后是什么样子:(x)
#define MASTER(irq, num) \
GATE_ENTRY(BASE_IRQ_MASTER_BASE + (num), 0f, ACC_PL_K|ACC_INTR_GATE) ;\
P2ALIGN(TEXT_ALIGN) ;\
0: ;\
pushl $(irq) /* error code = irq vector */ ;\
pushl $BASE_IRQ_MASTER_BASE + (num) /* trap number */ ;\
pusha /* save general registers */ ;\
movl $(irq),%ecx /* irq vector number */ ;\
movb $1 << num,%dl /* pic mask for this irq */ ;\
jmp master_ints

依次push irqPtrapP0x20+irqPQ通用寄存器(eax ecx{)入栈Q把irq号保
存到ecx寄存器,然后跌{到master_intsQmaster_ints是所有master interrupts公用
的代码?br />
跌master_ints的前几行Q从W七行开?br /> /* Acknowledge the interrupt */
movb $0x20,%al
outb %al,$0x20

/* Save the rest of the standard trap frame (oskit/x86/base_trap.h). */
pushl %ds
pushl %es
pushl %fs
pushl %gs

/* Load the kernel's segment registers. */
movw %ss,%dx
movw %dx,%ds
movw %dx,%es

/* Increment the hardware interrupt nesting counter */
incb EXT(base_irq_nest)

/* Load the handler vector */
movl EXT(base_irq_handlers)(,%ecx,4),%esi

注释写得很详l,首先发?x20?x20端口Q也是Lab1文档上所说的发送INT_CTL_DON
E到INT_CTL_REGQ看来这一步support code已经替我们完成了。接下来保存四个D寄?br />器ds es fs gsQƈdkernel态的D寄存器信息?br />
最后一句很关键Q把base_irq_handlers + %ecx * 4q个g存到了esi寄存器中Q?ecx
中保存了irqP?4则是一个函数指针的大小Q那么base_irq_handlers是什么呢Q
l用ctrl+/搜烦Q可以在base_irq.c中找到这个数l的定义
unsigned int (*base_irq_handlers[BASE_IRQ_COUNT])(struct trap_state *ts)
且初始时q个数组的每一w是base_irq_default_handler

看来q句汇编代码的功能是把处理irq对应的函数地址保存Cesi寄存器中?br />Z证实q一点,l箋看base_irq_inittab.s的代码:(x)
#else
/* Call the interrupt handler with the trap frame as a parameter */
pushl %esp
call *%esi
popl %edx
#endif
果然Q在保存了esp值后Q紧接着p用了esi指向的那个函数。而从那个函数q回后,
之前在栈上保存的相关信息都被恢复了:(x)

/* blah blah blah */
/* Return from the interrupt */
popl %gs
popl %fs
popl %es
popl %ds
popa
addl $4*2,%esp /* Pop trap number and error code */
iret
q样恢复到了进入这个irq处理单元前的状态,文档中所要求的保存通用寄存器这一?br />其实在这里也已经完成了,不需要我们自己写代码?br />
好了Q这样一分析后,我们要做的事情就很简单,是把base_irq_handlers数组中的?br />应项Ҏ(gu)相应的handler函数p了?br />注意index是相应的idt_entry号减去BASE_IRQ_SLAVE_BASEQ或者直接用IRQ受?

另外q个数组的初始值都是base_irq_default_handlerQ用ctrl+左键跛_q个函数的定
义,可以看到q个函数只有一句简单的输出语句Q?br /> printf("Unexpected interrupt %d\n", ts->err);
而这是没有注册handler前我们所看到的那句Unexpected interrupt 0的来源了?

5. struct trap_state *ts
所有的handler函数的参数都是一个struct trap_state *tsQ这个参数是哪来的呢Q?br />注意call *%esi的前一?br /> /* Call the interrupt handler with the trap frame as a parameter */
pushl %esp
q里把当前的esp当作指向ts的指针传l了handlerQ列一下从esp指向的地址开始的内容
Q也是在此之前push入栈的内容:(x)

pushl $(irq) /* error code = irq vector */ ;\
pushl $BASE_IRQ_MASTER_BASE + (num) /* trap number */ ;\
pusha /* save general registers */ ;\
pushl %ds
pushl %es
pushl %fs
pushl %gs

再看一下trap_state的定义,你会(x)发现正好和push的顺序相反:(x)
/* Saved segment registers */
unsigned int gs;
unsigned int fs;
unsigned int es;
unsigned int ds;

/* PUSHA register state frame */
unsigned int edi;
unsigned int esi;
unsigned int ebp;
unsigned int cr2; /* we save cr2 over esp for page faults */
unsigned int ebx;
unsigned int edx;
unsigned int ecx;
unsigned int eax;

/* Processor trap number, 0-31. */
unsigned int trapno;

/* Error code pushed by the processor, 0 if none. */
unsigned int err;

而这个定义后面的
/* Processor state frame */
unsigned int eip;
unsigned int cs;
unsigned int eflags;
unsigned int esp;
unsigned int ss;
则是发生interrupt时硬件自动push的五个数据(参见Understand the Linux KernelQ?

也就是说Qts指针指向的是调用当前handler前的寄存器状态,也是当前handlerl束?br />用来恢复的寄存器状态,了解q一点对以后的几个lab帮助很大?

p.s. 另外提一句和q个lab无关的话Q非vm86模式下栈上是不会(x)有v86_es{四个寄存器
信息的,所以以后根据task_struct指针计算*ts的地址时用的偏移量不应该是sizeof(
struct trap_state)

6. The End
q样差不多就把support code中处理interrupt的方法过了一遍(另外q有base_trap_in
ittab.sQ不q和irq的处理很怼Q?br />
了解q些后Lab1比较简单了Q不需要Q何内嵌汇~代码即可完成?br />

ZelluX 2008-09-02 11:55 发表评论
]]>
关于计算机图形学的学?原创 FatGarfield http://m.tkk7.com/zellux/archive/2008/02/21/181080.htmlZelluXZelluXThu, 21 Feb 2008 07:46:00 GMThttp://m.tkk7.com/zellux/archive/2008/02/21/181080.htmlhttp://m.tkk7.com/zellux/comments/181080.htmlhttp://m.tkk7.com/zellux/archive/2008/02/21/181080.html#Feedback3http://m.tkk7.com/zellux/comments/commentRss/181080.htmlhttp://m.tkk7.com/zellux/services/trackbacks/181080.html主要q是考虑到有Z(x)和安然小朋友合作一个大E?;-)

关于计算机图形学的学?/strong>
注意Q?
本文量避免理论化的描述Q试囄最通俗的语a介绍一下计机囑Ş学的学习(fn)Q以?qing)一些参考书目和|络资源Q?
本文不涉?qing)对概念的定义,以免陷入学术讨论之?
本文是作者学?fn)计机囑Ş学的体?x)Q如果有不同的意见,请不要攻d漫骂

本文合适的题目应当?白话说学计算机图形学Q?

1Q 引a
什么是计算机图形学Q 本文尽量避免给它做严格的定义,但是通常来说Q计机囑Ş学是数字图象处理的逆过E,q只是一个不切的定义,后面我们?x)看刎ͼ实际上,计算机图形学、数字图象处理和计算觉在很多地方的区别不是非常清晰的Q很多概忉|盔R的?
计算机图形学是用计算机来M西的学科Q数字图象处理是把外界获得的图象用计机q行处理的学U。在法国Q图形图象是一门课E?
如何学习(fn)计算机图形学呢?除了计算机图形学的基知识以外Q你q需要有以下的知识,你懂的越多,当然做的好?
* pQ 你一定要把英语学好,如果你想学习(fn)计算机图形学的话Q尽量看英文的书c和资料
* 数学Q 计机囑Ş学里面的数学用的比较多,Q我们可以列举一些常用的Q?
高等数学Q数值分析,微分几何Q拓扑,概率Q 插值理论,Q偏Q微分方E?
* 物理Q 如果你要进行基于物理的建模Q一些物理理论是要学?fn)的Q?
力学Q运动学Q动力学Q流体力学…)Q光学,有限元?
* ~程语言Q C或C++是计机囑Ş学最通用的‘普通话’,
* 数据l构Q 你需要数据结构来描述你的囑Ş对象Q除了通用的链表、树(wi){数据结构外Q图形学q有自己Ҏ(gu)的数据结?
* 其他cdQ 有的时候你需要其他学U的知识Q根据你的需要去学习(fn)?

上面列D的不是你必须学习(fn)的东西,而是计算机图形学可能?x)用到的东西Q一定要CQ不要指望通过一本教材就学会(x)计算机图形学Q它比你惌的要复杂的多?

2Q 图形学的问?
每个学科都有自己学科的特定问题,囑Ş学要解决的是如何d图来Q得到需要的效果Q当然这是图形学最大的一个问题?

在开始学?fn)计机囑Ş学的时候,找一本简单的书看Q对计算机图形学有个大概的认识,你就可以开始图形学之旅了:(x)

OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 1.4, Fourth Edition
OpenGL SuperBible (3rd Edition) 

是比较好的学?fn)计机囑Ş学的入门教材Q在l中dQ一开始就d

Foley?
Computer Graphics: Principles and Practice, Second Edition in C 
不是好主意,?x)看的一头雾_(d)一本什么都讲的书的l果往往是什么都没讲清楚?
当你把OpenGL的基本内Ҏ(gu)握之后,你对囑Ş学就有了大概的了解了

那么下面你可以来学习(fn)一下计机囑Ş学的数据l构和算法,下面的书比较适合
Joseph O'Rourke 的Computational Geometry in CQ书里面有C的源代码Q讲q简单,清晰Q适合E序员学?

ȝ来说Q计机囑Ş学涉?qing)?大部分:(x)建模和渲?
2.1建模

你想M个东西,首先要有它的几何模型Q那么这个几何模型从什么地Ҏ(gu)呢?下面的书很不错的Q?
Gerald Farin 的Curves and Surfaces for CAGD: A Practical Guide
q本书就有一点的隑ֺ了,呵呵Q要努力看啊

q本书算是CAGD (计算助几何设?的经典图书,CAGD斚w的全貌,q有2本很好的讲述曲面的书Bezier和Nurbs的书

Les A. Piegl, Wayne Tiller 的The Nurbs Book 
书里面有NURBS曲线、曲面的E序伪代码,很容易改成C的,书讲的通俗、易懂,但是你要有耐心看的Q)

曲线与曲面的数学
q本书是法国人写的中文翻译版Q里面还有Bezie本h写的序JQ翻译的很不错的Q看了你掌握Bezier曲面技术了


//另外一些你想知道的事情Q其他的造型方式-开?
注意Q在后面?x)有q样的章节,标明
//另外一些你想知道的事情Q其他的造型方式-开?
//另外一些你想知道的事情Q其他的造型方式-l束
里面是我认ؓ(f)的一些高U话题,跌他们不媄响你学习(fn)计算机图形学Q但是要学好p注意了,呵呵
q有其他的一些造型技术,比如Q?
隐式曲面(Implicit Surface)的造型Q?
是用函数Ş式ؓ(f)F( x ,y ,z ) = 0的曲面进行造型Q这L(fng)造型技术适合描述动物器官一L(fng)肉乎乎的东西Q有2本书推荐大家
Jules Bloomenthal~辑的Introduction to Implicit SurfacesQ是一本专著,讲述了Implicit Surface建模?Modeling)Q面片化(Polygonization)Q渲?Rendering)的问?
Luiz Velho 的 Implicit Objects Computer Graphics 也是一本专著,讲述个更新的一些进?

l分曲面QSubdivision SurfaceQ造型
当用NURBS做造型的时候,曲面拼接是复杂的问题Q在动画的时候,可能产生撕裂或者褶皱,Subdivision Surface用来解决q个问题
Joe Warren的Subdivision Methods for Geometric Design: A Constructive Approach是q方面的专著

从实际物体中得到造型Q现在的技术可以用三维扫描仪得到物体表面的点,然后Ҏ(gu)q些Ҏ(gu)物体的表面计出来,UCؓ(f)重徏(Reconstruction)Q因些技术之在文章中Q所以我们省略对它的描述

//另外一些你想知道的事情Q其他的造型方式-l束


下面q是一个高U话题:(x)Q?

//另外一些你想知道的事情Q光有造型是不够的Q?开?
在你的几何模型做好之后,有一些问题需要对q个模型q一步处理,得到适合的模型,当面片很多的时候,或者模型很复杂的时候,需要对几何模型q行化,才可以满一些实时绘制的需要,q个技术叫做层ơ细节(LOD-Level of DetailQ。下面的书就是讲q个的:(x)
David Luebke~著的 Level of Detail for 3D Graphics
//另外一些你想知道的事情Q光有造型是不够的Q?l束

2.2渲染
有了模型Q怎么把这个几何模型画出来呢?q个步骤是渲染?
如果你看了上面的OpenGL的书Q那么你q道一些渲染的知识了,但是别高兴的太早QOpenGL使用的是局部光照模型(Local Illumination ModelQ,不要被这个词吓住?

Local illumination Model指的是在做渲染的时候只考虑光源和物体之间的怺作用Q不考虑物体和物体之间的影响Q所以OpenGL不支持阴影,一个(半)透明物体的效?.Q这些需要考虑物体之间的媄响才可以实现?

//另外一些你想知道的事情QOpenGL可以实现阴媄-开?
OpenGL本n不支持,但是通过一些方法可以实现的Q)Q用Google搜烦一?
Shadow Volume, OpenGL找到答案啦
//另外一些你想知道的事情QOpenGL可以实现阴媄-l束

Global Illumination Model q类模型考虑的就比较全啦。现在关于Global Illumination的技术有3大类Q具体的技术就不在q里介绍了,如果想了解,可以联系我,大家一赯论:(x)

光线q踪(Ray Tracing)
关于Ray Tracing的好书有2本:(x)

Andrew Glassner 的An Introduction to Ray tracing 
Glasser是图形界的名人,q本书也是Ray Tracing的经?

R. Keith Morley, Peter Shirley 的Realistic Ray Tracing, Second Edition
q本书第一版是伪代码,W二版是C代码。它的结构不是很清楚Q虎头蛇感觉?

辐射?Radiosity)
关于Radiosity的好书有4本:(x)
Michael Cohen 的Radiosity and Realistic Image Synthesis Q Cohen获得SIGGRAPH 1998计算机图形学成就奖,他把Radiosity变成实际可用Q现在Cohen在MSR囑Ş::URL::http://research.microsoft.com/~cohen/CohenSmallBW2.jpg

Francois X. Sillion的Radiosity and Global Illumination Q Sillion是法国hQ他的主要研I方向是RadiosityQ这本书写的很不错的Q非常清?

Philip Dutre 的新书Advanced Global Illumination Q看hq不错,刚拿到手Q还没看Q呵呵,所以不好评?

Ian Ashdown的Radiosity: A Programmer's Perspective 
有源代码的书啊!Q 就凭这个,得给5*****

Photon mapping
q个我也不知道怎么译Q呵c(din)这个技术出现的比较晚,一本好书!
Henrik Wann Jensen的Realistic Image Synthesis Using Photon Mapping
Henrik Wann Jensen是Photon mapping技术的发明?

3.3q些也是囑Ş学吗Q 图形和图象的区别模p了Q(
除了上面讲的‘经典’的计算机图形学Q还有下面的一些东西,它们也叫计算机图形学吗?是的Q!Q?
3.3.1非真实性图形学QNon-Photorealistic GraphicsQ?
真实性不是计机囑Ş学的唯一要求Q比如:(x)你给我画一个卡通效果的囑և来,或者我要用计算机画水彩L么办?或者:(x)把图象用文字拼出来怎么做?Q解册些问题要用到非真实性图形学Q 好书l推荐!Q!
Bruce Gooch, Amy Ashurst Gooch的 Non-Photorealistic Rendering 

3.3.2体图形学(Volume Graphics)
用CT机做很多切片Q比如头骨)Q那么能通过q些切片得到3D的头骨吗QVolume Graphics是解决q样的问题的
Min Chen ~著的Volume Graphics 

上面?个图形学技术就和图象的界限不明显了Q实际上他们是图形图象的l合


4 .q有其他的书吗?
q有一些好书啊Q呵呵,好书看不完的Q)Ql放送:(x)

Graphics Gems I ~ VQ一大帮子h写的书,包括研究人员Q程序员?
有计机囑Ş学的各种数据l构Q编E技?

Tomas Akenine-Moller {h~著的Real-Time Rendering (2nd Edition) 
许多最新的计算机图形学q展

David Ebert{h的Texturing & Modeling: A Procedural Approach, Third Edition 
讲述如何通过E序实现U理、山、地形等囑Ş学要?
F. Kenton MusgraveL(fng)分Ş?Fractal Mania)
Ken Perlin是Perlin噪声的发明者,用过3d软g的h对Perlin Noise不会(x)陌生?

关于囑Ş学的特定对象Q有特定的专题图书,
Evan Pipho Focus On 3D Models,对于囑Ş学的常用模型格式Q进行了讲解
Trent Polack的 Focus On 3D Terrain Programming Q讲地Ş?
Donald H. House 的Cloth Modeling and Animation Q讲布料?
Nik Lever的Real-time 3D Character Animation with Visual C++ Q讲角色动画?
…?

q有Q)
Richard Parent的 Computer Animation: Algorithms and TechniquesQ当然是讲动ȝ啦,呵呵?
David H. Eberly?D Game Engine Design : A Practical Approach to Real-Time Computer Graphics Q有代码的啊Q呵呵:(x)Q?

最后,没事情的时候,看看下面的书?
Alan H. WattQ?D Computer Graphics (3rd Edition) 

James D. Foley{h的 Computer Graphics: Principles and Practice in C (2nd Edition) Q这本圣l没事的时候再看吧Q呵?

累了Q( 不说了,上面的书差不多了Q还有一些shader的书Q我不了解,以后?x)补上的Q)

5.从哪里找到这些书啊?q有什么资源啊Q?
我保证,上面的书在www.amazon.com 都可以买刎ͼ(x)Q 别打我

那好Q大部分的书在国家图书馆可以复印刎ͼ北京的兄弟有啦Q?q前的书借出来复华ͼ1?,但是C要早图书馆里复印Q?~6?,q是比Amazon便宜啊,呵呵?

不行大家到国外乎ͼ合买吧,q负担的赗?
我对DirectX不了解,所以没有涉?qing)关于DirectX的内容:(x)Q?


ZelluX 2008-02-21 15:46 发表评论
]]>
orz 虎书的一个比?/title><link>http://m.tkk7.com/zellux/archive/2008/01/05/172985.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Sat, 05 Jan 2008 08:36:00 GMT</pubDate><guid>http://m.tkk7.com/zellux/archive/2008/01/05/172985.html</guid><wfw:comment>http://m.tkk7.com/zellux/comments/172985.html</wfw:comment><comments>http://m.tkk7.com/zellux/archive/2008/01/05/172985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zellux/comments/commentRss/172985.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zellux/services/trackbacks/172985.html</trackback:ping><description><![CDATA[<p>讲到out-of-bounds detectionӞ有这么一D?br /> One may say, by way of excuse, "but the language in which, I program has the kind of address arithmetics that makes it impossible to know the bounds of an array." Yes, and the man who shot his mother and father threw himself upon the mercy of the court because he was an orphan.<br /> 很强大,很脓(chung)?/p> <img src ="http://m.tkk7.com/zellux/aggbug/172985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zellux/" target="_blank">ZelluX</a> 2008-01-05 16:36 <a href="http://m.tkk7.com/zellux/archive/2008/01/05/172985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用GraphVizMICS Lab1的call graphhttp://m.tkk7.com/zellux/archive/2007/11/27/163536.htmlZelluXZelluXTue, 27 Nov 2007 12:04:00 GMThttp://m.tkk7.com/zellux/archive/2007/11/27/163536.htmlhttp://m.tkk7.com/zellux/comments/163536.htmlhttp://m.tkk7.com/zellux/archive/2007/11/27/163536.html#Feedback0http://m.tkk7.com/zellux/comments/commentRss/163536.htmlhttp://m.tkk7.com/zellux/services/trackbacks/163536.html其实关键的工兯是google的gprof2dot
http://google-gprof2dot.googlecode.com/

四种风格Q应该在生成dot的时候还可以讑֮其他信息Q比如每个结点费时等Q毕竟profilingq个指数更重?/p>



ZelluX 2007-11-27 20:04 发表评论
]]>
LL(1) 语法解析http://m.tkk7.com/zellux/archive/2007/09/24/147878.htmlZelluXZelluXMon, 24 Sep 2007 11:34:00 GMThttp://m.tkk7.com/zellux/archive/2007/09/24/147878.htmlhttp://m.tkk7.com/zellux/comments/147878.htmlhttp://m.tkk7.com/zellux/archive/2007/09/24/147878.html#Feedback0http://m.tkk7.com/zellux/comments/commentRss/147878.htmlhttp://m.tkk7.com/zellux/services/trackbacks/147878.html
有了follow和first集合后,可以构造一张预解析表(predictive parsing table)了?br /> 具体Ҏ(gu)是:(x)
对于M产生式X -> ƒQ找到first(ƒ)中的每一个元素TQ把X -> ƒ填充到X行T列中去;
如果ƒ nullableQ还要把X -> ƒ填充到X行follow(ƒ)列中?br />
预测解析表构造完成后Q如果某g不止一个生式Q则说明该语法不适用于预解析表Q?br /> 如果每格臛_一个生式Q则该语法被UCؓ(f)LL(1)  Left-to-right parse, Leftmost-derivation, 1-symbol lookahead    

ZelluX 2007-09-24 19:34 发表评论
]]>
ȝ弄明白生成first和follow集合的算法了http://m.tkk7.com/zellux/archive/2007/09/23/147627.htmlZelluXZelluXSun, 23 Sep 2007 14:22:00 GMThttp://m.tkk7.com/zellux/archive/2007/09/23/147627.htmlhttp://m.tkk7.com/zellux/comments/147627.htmlhttp://m.tkk7.com/zellux/archive/2007/09/23/147627.html#Feedback2http://m.tkk7.com/zellux/comments/commentRss/147627.htmlhttp://m.tkk7.com/zellux/services/trackbacks/147627.html first集合没有问题

follow集合Q?br /> 以A -> aBbZQ如果b nullableQ则follow(B)包括follow(A)Q原因很单,把A看成一个整体,当作为production的右式时它后面直接跟的元素自然也可能是B后面直接跟的元素Q因为b可能为空?br />
理解follow集合的定义后Q虎书上l出的算?br /> if Yi+1 ... Yk are all nullable
    then FOLLOW(Yi) = FOLLOW(Yi) U FOLLOW(X)
if Yi+1 ... Yj-1 are all nullable
    then FOLLOW(Yi) = FOLLOW(Yi) U FIRST(Yj)
׃隄解了



ZelluX 2007-09-23 22:22 发表评论
]]>
Lex 使用W记http://m.tkk7.com/zellux/archive/2007/09/09/143841.htmlZelluXZelluXSun, 09 Sep 2007 14:22:00 GMThttp://m.tkk7.com/zellux/archive/2007/09/09/143841.htmlhttp://m.tkk7.com/zellux/comments/143841.htmlhttp://m.tkk7.com/zellux/archive/2007/09/09/143841.html#Feedback0http://m.tkk7.com/zellux/comments/commentRss/143841.htmlhttp://m.tkk7.com/zellux/services/trackbacks/143841.html1. 写了个测试脚本,逐个试testcases目录下的各个tigerE序Qƈl计出错?br /> #!/usr/bin/python

from commands import *

countOk = countError = 0

for i in range(1,50):
    result = getstatusoutput('./lextest ../testcases/test%s.tig' % i)
    if (result[0] == 0):
        print('Test case %s: OK' % i)
        countOk += 1
    else:
        print('Error on test case %s with errorno %s' % (i, result[0]))
        countError += 1

print("Total cases: %s" % (countOk + countError))
print("Passed cases: %s" % (countOk))
print("Failed cases: %s" % (countError))

2. 状态:(x)
定义的状态名不能与已l定义的变量/宏名冲突。在处理字符串的时候定义了?lt;STRING>状态,和tokens.h中的STRING冲突了,l果解析的时候被认成了BAD_TOKEN?br />



ZelluX 2007-09-09 22:22 发表评论
]]>
Lexical Analysis - Finite Automatahttp://m.tkk7.com/zellux/archive/2007/09/06/143285.htmlZelluXZelluXThu, 06 Sep 2007 14:09:00 GMThttp://m.tkk7.com/zellux/archive/2007/09/06/143285.htmlhttp://m.tkk7.com/zellux/comments/143285.htmlhttp://m.tkk7.com/zellux/archive/2007/09/06/143285.html#Feedback0http://m.tkk7.com/zellux/comments/commentRss/143285.htmlhttp://m.tkk7.com/zellux/services/trackbacks/143285.htmlDFA(deterministic finite automaton): 从同一状态出发的辚w标记有不同的W号

可以把一个DFA用一个{|矩?transition matrix)表示Q矩늚Wi行记录状态i向其他状态蟩转的情况Qedges[i][j]表示状态i时吃掉一个jW号后蟩转到edges[i][j]状态?br />
DFA的一个好处就是可以识别最长的匚wQ比如对于IF8q个字符Ԍ可以被识别ؓ(f)一个变量而不是一个关键字加数字?br /> 处理Ҏ(gu)是保留最后一ơ自动机的终l状态Last-Final?qing)其相对应的字符位置Input-Position-at-Last-Final?br /> 每次q入一个终l状态,更新这两个变量?br /> 遇到死\(dead state, a nonfinal state with no output transitions)Q通过q两个变量回复到上一个终l状态?br />
NFA(nondeterministic finite automaton): 从同一状态出发的边可能标记有相同的符?br /> ׃从同一状态出发选择的\径可能有多条Q非定性自动机L需要进?#8220;猜测”Q而且总要做出正确的猜?/p>

ZelluX 2007-09-06 22:09 发表评论
]]>
BNF 文法 (1) - 语法?| 二义性的解决http://m.tkk7.com/zellux/archive/2007/07/27/132722.htmlZelluXZelluXFri, 27 Jul 2007 03:28:00 GMThttp://m.tkk7.com/zellux/archive/2007/07/27/132722.htmlhttp://m.tkk7.com/zellux/comments/132722.htmlhttp://m.tkk7.com/zellux/archive/2007/07/27/132722.html#Feedback0http://m.tkk7.com/zellux/comments/commentRss/132722.htmlhttp://m.tkk7.com/zellux/services/trackbacks/132722.htmlq有一U更为简单的表示Ҏ(gu)Q例如将(34 - 3) * 42表示?(-(34, 3), 42)
后者被UCؓ(f)抽象语法?abstract syntax tree)Q它的效率更高,但是不能从中重新得到记号序列?br>

2. 单的术表达式的抽象语法?wi)的数据cd
typedef enum {Plus, Minus, Times} OpKind;
typedef 
enum {OpKind, ConstKind} ExpKind;
typedef 
struct streenode
{
    ExpKind kind;
    OpKind op;
    
struct streenode *lchild, *rchild;
    
int val;
} STreeNode;
typedef STreeNode 
*SyntaxTree;


3. 单算术文法的二义性解?br>例如?4 - 3 * 42Q可以有两种不同的分析树(wi)Q?
34 - 3 = 31, 31 * 42
3 * 42 = 126, 34 - 126
解决二义性的Ҏ(gu)通常有两U,一U是讄消除二义性规则(disambiguating rule)Q如讄q算W的优先权;另一U是文法限制ؓ(f)只能分析成单一的分析树(wi)Q如上式表CZؓ(f)34 - (3 * 42)?br>
讄q算W的优先?br>定义如下的简单表辑ּ文法Q?br>exp -> exp addop exp | term
addop -> + | -
term -> term mulop term | factor
mulop -> *
factor -> (exp) | number
q样乘法被归在term规则下,而加减法被归在exp规则下,因此在分析树(wi)和语法树(wi)中加减法更接近于根Q由此也接受了更低一U的优先权?br>q样算W放在不同的优先权别中的办法是在语法说明中使用BNF的一个标准方法,成ؓ(f)优先U联(precedence cascade)?br>接下来的问题是如何让同U运从左往叟?br>可以表辑ּ文法改ؓ(f)
exp -> exp addop term | term
addop -> + | -
term -> term mulop factor | factor
mulop -> *
factor -> (exp) | number
q样׃得加法和减法左结合,而如果写?br>exp -> term addop exp | term
q样的Ş式,则会(x)使得它们右结合?br>
4. else (zhn)挂的问?br>?if 语句的文?br>statement -> if-stmt | other
if-stmt -> if (exp) statement | if (exp) statement else statement
exp -> 0 | 1
考虑?if (0) if (1) other else other
q时else other的?zhn)挂就出现了二义性,它既可以理解为是if (0)匚wp|后的选择Q也可以理解为if (0)匚w成功Qif (1) 匚wp|后的l果?br>消除二义性的规则?br>statement -> matched-stmt | unmatched-stmt
matched-stmt -> if (exp) matched-stmt else matched-stmt | other
unmatched-stmt -> if (exp) statement | if (exp) matched-stmt else unmatched-stmt
exp -> 0|1
p个定义,上面的串可以分析ؓ(f)
if (0)  // unmatched-stmt
    if (1) other else other  // matched-stmt

另外一U解x法就是在语法中解册个问题?br>可以要求出现else部分Q或者用一个分D关键字(bracketing keyword)Q例?br>if (1) then
    if (0) then other
    else other
    endif
endif



ZelluX 2007-07-27 11:28 发表评论
]]>
ȝ成功的运行了个词法解析程?/title><link>http://m.tkk7.com/zellux/archive/2007/07/20/131502.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Fri, 20 Jul 2007 07:46:00 GMT</pubDate><guid>http://m.tkk7.com/zellux/archive/2007/07/20/131502.html</guid><wfw:comment>http://m.tkk7.com/zellux/comments/131502.html</wfw:comment><comments>http://m.tkk7.com/zellux/archive/2007/07/20/131502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zellux/comments/commentRss/131502.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zellux/services/trackbacks/131502.html</trackback:ping><description><![CDATA[书上的例子,计算行号的,但是书中对行的定义是<br>line *.\n<br>貌似不正,flex无法解析Q改成line (.)*\n可以了?br>书上的样例也没有yywrapQ写了个I函数?br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">%</span><span style="color: #000000;">{<br></span><span style="color: #008000;">/*</span><span style="color: #008000;"> a Lex program that adds line numbers<br>   to lines of text, printing the new text<br>   to the standard output<br></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> lineno </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #000000;">%</span><span style="color: #000000;">}<br>line (.)</span><span style="color: #000000;">*</span><span style="color: #000000;">\n <br></span><span style="color: #000000;">%%</span><span style="color: #000000;"><br>{line} { printf (</span><span style="color: #000000;">"</span><span style="color: #000000;">%5d %s</span><span style="color: #000000;">"</span><span style="color: #000000;">, lineno</span><span style="color: #000000;">++</span><span style="color: #000000;">, yytext); }<br></span><span style="color: #000000;">%%</span><span style="color: #000000;"><br>main()<br>{<br>    yylex();<br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> yywrap()<br>{<br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div> 生成flexE序Qflex linecount.lex<br>~译Qgcc lex.yy.c<br>利用道输入刚才的程序:(x)cat linecount.lex | ./a.out<br><br><br> <img src ="http://m.tkk7.com/zellux/aggbug/131502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zellux/" target="_blank">ZelluX</a> 2007-07-20 15:46 <a href="http://m.tkk7.com/zellux/archive/2007/07/20/131502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LexU定http://m.tkk7.com/zellux/archive/2007/07/20/131470.htmlZelluXZelluXFri, 20 Jul 2007 06:35:00 GMThttp://m.tkk7.com/zellux/archive/2007/07/20/131470.htmlhttp://m.tkk7.com/zellux/comments/131470.htmlhttp://m.tkk7.com/zellux/archive/2007/07/20/131470.html#Feedback0http://m.tkk7.com/zellux/comments/commentRss/131470.htmlhttp://m.tkk7.com/zellux/services/trackbacks/131470.html1. 允许字W放在引号中作ؓ(f)真正的字W匹配?/p>

例如要匹配\*可以写成\\\*Q也可以?\*"

2. Ҏ(gu)号中大多数元字符都可以无需引号直接引出。如("+"|"-")可以写成[-+]Q但不能写成[+-]Q因?在中括号中可以作C围的q字W?br>

3. 大括号可以指出正则表辑ּ的名字,但不能递归调用?/p>

nat [0-9]+

signedNat (+|-) ? {nat}

 



ZelluX 2007-07-20 14:35 发表评论
]]>
q是关于~译器的优化http://m.tkk7.com/zellux/archive/2007/07/19/131375.htmlZelluXZelluXThu, 19 Jul 2007 15:41:00 GMThttp://m.tkk7.com/zellux/archive/2007/07/19/131375.htmlhttp://m.tkk7.com/zellux/comments/131375.htmlhttp://m.tkk7.com/zellux/archive/2007/07/19/131375.html#Feedback1http://m.tkk7.com/zellux/comments/commentRss/131375.htmlhttp://m.tkk7.com/zellux/services/trackbacks/131375.html
cs书上的一个习(fn)题,在执行i=0q样的命令时是用: xorl %edx, %edx
Z么不?movl $0, %edx呢?
老大: 一般的说立x的存取是内存操作Q而前一条指令是寄存器操作。所以Itanium上有专门的寄存器?.
SecretVan@smth.org: 可能跟标志位有关p,如xor清零后紧跟一个条件蟩转?
先把q些回答放这Q以后在回过头来看?br>


ZelluX 2007-07-19 23:41 发表评论
]]>
一个编译器优化问题http://m.tkk7.com/zellux/archive/2007/07/19/131179.htmlZelluXZelluXWed, 18 Jul 2007 16:51:00 GMThttp://m.tkk7.com/zellux/archive/2007/07/19/131179.htmlhttp://m.tkk7.com/zellux/comments/131179.htmlhttp://m.tkk7.com/zellux/archive/2007/07/19/131179.html#Feedback0http://m.tkk7.com/zellux/comments/commentRss/131179.htmlhttp://m.tkk7.com/zellux/services/trackbacks/131179.htmlint func(int x)
{
    return x * 2;
}
用gcc -O2 -S test.c ~译Q发C化后是用了加法,而不是位U?br>func:
        pushl   %ebp
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        popl    %ebp
        addl    %eax, %eax
        ret
BBS上问了,老大说一般加法不?x)慢?br>又试了一下把*2Ҏ(gu)*3Q仍然是使用leal    (%eax,%eax,2), %eaxq行加法操作完成的,而改?4׃用位UM?br>其他回答Q?br>SecretVan@smth.org: CISC指o(h)集上更們֐于选择功能一栯长度较短的指o(h)Q带了立x之后指o(h)长了,如果使用寄存器那更得不偿?br>Nineveh@smth.org: 因ؓ(f) add 的长度短于或{于 salQ速度快于或等?salQ吞吐量大于或等?sal?
lib@rygh: 在P4里面我记得一条加法指令是0.5个cycle.UM指o(h)撑死了也?.5个cycle吧,没听说过?.25cycle的指令?


ZelluX 2007-07-19 00:51 发表评论
]]>
正则表达?/title><link>http://m.tkk7.com/zellux/archive/2007/07/17/130924.html</link><dc:creator>ZelluX</dc:creator><author>ZelluX</author><pubDate>Tue, 17 Jul 2007 12:46:00 GMT</pubDate><guid>http://m.tkk7.com/zellux/archive/2007/07/17/130924.html</guid><wfw:comment>http://m.tkk7.com/zellux/comments/130924.html</wfw:comment><comments>http://m.tkk7.com/zellux/archive/2007/07/17/130924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zellux/comments/commentRss/130924.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zellux/services/trackbacks/130924.html</trackback:ping><description><![CDATA[<p>1. {a, b, c}上的串S中,M两个b都不相连Q用正则表达式表CZؓ(f)<br>(a|c|ba|bc)*(b|I?</p> <p> <br>2. Pascal注释的表C?/p> <p>{(~})*}<br>{ } 中间ZQ意非}的符P注意表达的严?br></p> <p> </p> <p>3. C注释的表C就困难很多</p> <p>例如要表Cba ...(没有ab)... abq样的字W串Q不能简单的写成</p> <p>ba(~(ab))*ab</p> <p>因ؓ(f)~非运符通常只适用于单字符Q否则容易生؜淆?/p> <p>b*(a*~(a|b)b*)*a*</p> <p>像这L(fng)定义很难读,而且难以证明其正性,因此在真正的扫描E序中通常用特D方法解冟?</p> <img src ="http://m.tkk7.com/zellux/aggbug/130924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zellux/" target="_blank">ZelluX</a> 2007-07-17 20:46 <a href="http://m.tkk7.com/zellux/archive/2007/07/17/130924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://qzllw.com" target="_blank">޾ƷƬþò</a>| <a href="http://my533.com" target="_blank">ƵۿƵ18</a>| <a href="http://yangguang882.com" target="_blank">ĻAVJI </a>| <a href="http://53reniao.com" target="_blank">޾ƷþþþAVƬ</a>| <a href="http://g8zb.com" target="_blank">޳AVƬ߹ۿWWW</a>| <a href="http://sxwlhg.com" target="_blank">vѹۿ</a>| <a href="http://www-5453.com" target="_blank">ѿ߿Aվ</a>| <a href="http://xjdz8.com" target="_blank">99ee6ȾþѾƷ6</a>| <a href="http://www045888.com" target="_blank">MVȫƵվ</a>| <a href="http://ahjmdd.com" target="_blank">³³ƵѲ</a>| <a href="http://w6336.com" target="_blank">츾avvrӰ</a>| <a href="http://youkabaitiao.com" target="_blank">þþþAvר</a>| <a href="http://1111xxxx.com" target="_blank">AVô뾫Ʒ</a>| <a href="http://ziniurj.com" target="_blank">޹˾ƷŮ˾þþ </a>| <a href="http://8b22.com" target="_blank">hƵ</a>| <a href="http://773311h.com" target="_blank">ѻɫһëƬ</a>| <a href="http://bbav04.com" target="_blank">ѹƵС</a>| <a href="http://chaikexin.com" target="_blank">Ƶ</a>| <a href="http://mqiuxia66.com" target="_blank">ȫӳѹۿ߿</a>| <a href="http://juytv.com" target="_blank">޿ѿ</a>| <a href="http://6878vip.com" target="_blank">δav</a>| <a href="http://15nw.com" target="_blank">ŷպþþƷ</a>| <a href="http://huakangweicai.com" target="_blank">ۺϽ</a>| <a href="http://cdessc.com" target="_blank">޾ƷĻӰԺ</a>| <a href="http://tsxyhq.com" target="_blank">޹Ʒþþþվ </a>| <a href="http://vinsotec.com" target="_blank">ձ߹ۿ</a>| <a href="http://lwjiheng.com" target="_blank">˵Ƶwww</a>| <a href="http://0354888.com" target="_blank">91avƵ</a>| <a href="http://xiamenwave.com" target="_blank">һ˿ѸƵձ</a>| <a href="http://hkschooltv.com" target="_blank">ҳվѹۿ</a>| <a href="http://dghxm168.com" target="_blank">Ʒþþþþۺ</a>| <a href="http://my533.com" target="_blank">ëƬ߹ۿ</a>| <a href="http://papapa97.com" target="_blank">AVר߹ۿ</a>| <a href="http://szgyk.com" target="_blank">Ůʮ·Ůbbw </a>| <a href="http://57az.com" target="_blank">߹ۿAVƬ</a>| <a href="http://cswangli.com" target="_blank">91Դվ</a>| <a href="http://www-2236444.com" target="_blank">Ƶ</a>| <a href="http://5g6z.com" target="_blank">Ƶѹۿ</a>| <a href="http://128313.com" target="_blank">Ƶ</a>| <a href="http://kutuwo.com" target="_blank">?vŮ˵߹ۿ</a>| <a href="http://ygloka.com" target="_blank">ˬִ̼һ߳</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>