李忠 X86汇编语言-实模式到保护模式

资源下载
下载价格VIP专享
仅限VIP下载升级VIP

X86汇编语言-实模式到保护模式

X86汇编语言-实模式到保护模式

├──X86汇编语言-实模式到保护模式
| ├──1 课程说明
| | └──课程说明.mp4 129.74M
| ├──10 循环 批量传送和条件转移
| | ├──1 跳过非指令的数据区.mp4 36.83M
| | ├──2 逻辑段地址的重新设定.mp4 13.59M
| | ├──3 串传送指令和标志寄存器.mp4 77.84M
| | ├──4 NASM的$和$$记号.mp4 43.88M
| | ├──5 使用循环指令LOOP分解数位.mp4 71.73M
| | ├──6 基址寻址和INC指令.mp4 158.36M
| | ├──7 数字的显示和DEC指令.mp4 35.02M
| | └──8 基址变址寻址和条件转移指令.mp4 64.36M
| ├──11 计算机中的负数
| | ├──1 无符号数和有符号数.mp4 59.90M
| | ├──2 减法指令SUB和求补指令NEG.mp4 319.62M
| | ├──3 计算机如何区分对待无符号数和有符号数.mp4 209.34M
| | ├──4 有符号数除法指令IDIV.mp4 231.08M
| | └──5 有符号数的符号扩展指令.mp4 295.72M
| ├──12 阶段性知识总结和拓展
| | ├──1 阶段性重点内容总结.mp4 54.20M
| | ├──2 8086的标志寄存器.mp4 102.85M
| | └──3 条件转移指令和CMP指令.mp4 209.10M
| ├──13 从1加到100并显示结果
| | ├──1 字符串的定义和累加过程.mp4 72.00M
| | ├──2 栈的原理和使用.mp4 483.31M
| | ├──3 栈在数位分解和显示中的应用.mp4 27.22M
| | ├──4 在调试器里观察栈操作的状态.mp4 154.81M
| | ├──5 进一步认识栈和栈操作的特点.mp4 32.69M
| | └──6 逻辑或指令OR和逻辑与指令AND.mp4 357.70M
| ├──14 INTEL8086处理器的寻址方式
| | ├──1 寄存器 立即数和直接寻址.mp4 43.36M
| | ├──2 基址寻址.mp4 76.67M
| | ├──3 变址寻址.mp4 122.05M
| | └──4 基址变址寻址.mp4 50.20M
| ├──15 硬盘和显卡的访问与控制
| | ├──1 离开主引导扇区.mp4 58.23M
| | ├──10 过程和过程调用.mp4 49.71M
| | ├──11 过程调用和返回的原理.mp4 31.86M
| | ├──12 加载整个用户程序.mp4 30.23M
| | ├──13 用户程序的重定位.mp4 27.38M
| | ├──14 比特位的移动指令.mp4 85.03M
| | ├──15 转到用户程序内部执行.mp4 30.66M
| | ├──16 8086的无条件转移指令.mp4 287.12M
| | ├──17 用户程序的执行过程.mp4 47.42M
| | ├──18 验证加载器加载和执行用户程序的过程.mp4 55.50M
| | ├──19 书中第八章用户程序概述.mp4 26.91M
| | ├──2 给汇编语言程序分段.mp4 54.79M
| | ├──20 与文本显示有关的回车 换行与光标控制.mp4 53.89M
| | ├──21 回车的光标处理和乘法指令MUL.mp4 437.41M
| | ├──22 换行和普通字符的处理过程与滚屏操作.mp4 133.37M
| | ├──23 8086的过程调用方式.mp4 63.92M
| | ├──24 通过RETF指令转到另一个代码段内执行.mp4 36.37M
| | ├──25 在程序中访问不同的数据段.mp4 20.62M
| | ├──26 使用新版FixVhdWr写虚拟硬盘并运行程序.mp4 375.40M
| | ├──3 控制段内元素的汇编地址.mp4 90.37M
| | ├──4 加载器和用户程序头部段.mp4 44.01M
| | ├──5 加载器的工作流程和常数声明.mp4 72.43M
| | ├──6 确定用户程序的加载位置.mp4 45.40M
| | ├──7 外围设备及其接口.mp4 45.34M
| | ├──8 输入输出端口的访问.mp4 36.50M
| | └──9 通过硬盘控制器端口读扇区数据.mp4 59.06M
| ├──16 中断和动态时钟显示
| | ├──1 中断和硬件中断.mp4 17.05M
| | ├──10 用NOT指令反转时间分隔符的颜色.mp4 19.82M
| | ├──11 使用IRET指令从中断过程返回.mp4 13.64M
| | ├──12 用停机指令HLT使处理器进入低功耗状态.mp4 54.57M
| | ├──13 内部中断和软中断.mp4 35.05M
| | ├──14 BIOS中断概述.mp4 66.26M
| | ├──15 使用BIOS功能调用接收并显示键盘输入.mp4 212.18M
| | ├──2 中断控制器简介.mp4 20.55M
| | ├──3 中断号 中断处理过程和中断向量表.mp4 267.54M
| | ├──4 实时时钟 CMOSRAM和BCD编码.mp4 151.17M
| | ├──5 实时时钟芯片的中断信号.mp4 54.86M
| | ├──6 安装0x70号中断处理过程.mp4 127.27M
| | ├──7 启用更新周期结束中断.mp4 40.05M
| | ├──8 用TEST指令等待更新周期结束.mp4 170.83M
| | └──9 读取BCD码的时间并在屏幕上显示.mp4 198.68M
| ├──17 32位x86处理器编程架构
| | ├──1 IA-32架构和保护模式.mp4 45.09M
| | ├──2 寄存器的扩展和扩充.mp4 126.81M
| | ├──3 32位处理器的内存访问概况.mp4 30.02M
| | ├──4 32位处理器的寻址方式概况.mp4 119.27M
| | ├──5 流水线技术.mp4 16.48M
| | ├──6 高速缓存技术.mp4 20.66M
| | ├──7 乱序执行技术.mp4 37.17M
| | ├──8 寄存器重命名技术.mp4 110.58M
| | └──9 分支目标预测技术.mp4 86.76M
| ├──18 进入保护模式
| | ├──1 保护模式是要保护什么.mp4 28.71M
| | ├──10 通过设置寄存器CR0的PE位进入保护模式.mp4 36.61M
| | ├──11 描述符高速缓存器和保护模式下的内存访问.mp4 30.31M
| | ├──12 在调试器中观察实模式和保护模式的内存访问.mp4 74.95M
| | ├──2 全局描述符表GDT和全局描述符表寄存器GDTR.mp4 17.93M
| | ├──3 准备创建全局描述符表.mp4 20.38M
| | ├──4 描述符的分类.mp4 75.69M
| | ├──5 存储器的段描述符-段的类型和基地址.mp4 19.72M
| | ├──6 存储器的段描述符-段界限及访问控制位.mp4 25.76M
| | ├──7 安装存储器的段描述符.mp4 21.21M
| | ├──8 加载全局描述符表寄存器GDTR.mp4 19.44M
| | └──9 开启处理器的第21根地址线A20.mp4 35.24M
| ├──19 指令的格式及其操作尺寸
| | ├──1 80286的16位保护模式.mp4 25.19M
| | ├──10 描述符和段描述符高速缓存器的D位.mp4 38.60M
| | ├──11 进入保护模式后立即切换到32位模块并使用32位默认操作尺寸.mp4 57.07M
| | ├──2 16位处理器的指令操作尺寸.mp4 16.03M
| | ├──3 32位处理器的指令操作尺寸.mp4 53.69M
| | ├──4 x86的指令格式-操作码和立即数部分.mp4 329.97M
| | ├──5 x86的指令格式-ModRM和偏移量部分.mp4 106.34M
| | ├──6 x86的指令格式-SIB部分.mp4 188.27M
| | ├──7 x86的指令格式-指令前缀部分.mp4 8.57M
| | ├──8 处理器的默认操作尺寸和相关指令前缀.mp4 82.00M
| | └──9 用伪指令bits生成16位和32位模块.mp4 21.39M
| ├──2 汇编语言的前世今生
| | ├──1 引子.mp4 8.53M
| | ├──10 处理器.mp4 22.41M
| | ├──11 汇编语言的诞生.mp4 24.45M
| | ├──2 用电来表示数字.mp4 12.29M
| | ├──3 二进制加法机.mp4 10.22M
| | ├──4 具有记忆功能的器件-寄存器.mp4 15.14M
| | ├──5 带寄存器的加法机.mp4 12.53M
| | ├──6 能做四则运算的机器.mp4 14.99M
| | ├──7 机器指令.mp4 77.18M
| | ├──8 内存.mp4 267.03M
| | └──9 自动计算.mp4 34.58M
| ├──20 存储器的保护
| | ├──1 话说MOVDS,AX和MOVDS,EAX.mp4 52.23M
| | ├──10 通过别名来实现段的共用和共享.mp4 38.67M
| | ├──11 冒泡排序法的基本原理.mp4 36.86M
| | ├──12 32位操作尺寸下的LOOP指令.mp4 30.93M
| | ├──13 数据交换指令XCHG.mp4 45.45M
| | ├──2 修改段寄存器时的保护.mp4 40.86M
| | ├──3 代码段执行时的保护.mp4 17.85M
| | ├──4 用向上扩展的段做为栈段.mp4 26.47M
| | ├──5 向上扩展的段用做栈段时的保护.mp4 15.53M
| | ├──6 访问普通数据段时的保护.mp4 17.16M
| | ├──7 内存线性地址的回绕特性.mp4 24.21M
| | ├──8 用向下扩展的段做为栈段.mp4 24.91M
| | └──9 向下扩展的段用做栈段时的保护.mp4 27.59M
| ├──21 保护模式程序的动态加载和执行
| | ├──1 本章的目标和内容提要.mp4 17.81M
| | ├──10 条件传送指令簇CMOVcc.mp4 57.47M
| | ├──11 计算以512字节为单位的用户程序总长度.mp4 16.19M
| | ├──12 内存分配的基本策略和方法.mp4 29.82M
| | ├──13 内存分配的简易实现过程.mp4 43.55M
| | ├──14 加载用户程序.mp4 23.37M
| | ├──15 准备安装用户程序的段描述符.mp4 20.70M
| | ├──16 用SGDT和MOVZX指令确定GDT的位置.mp4 75.66M
| | ├──17 安装新描述符并生成选择子.mp4 16.17M
| | ├──18 安装用户程序的段描述符并回填选择子.mp4 55.51M
| | ├──19 用户程序的执行和退出.mp4 45.20M
| | ├──2 内核的结构和加载前的准备工作.mp4 71.17M
| | ├──20 在虚拟机上观察内核的加载以及用户程序的执行与退出.mp4 25.80M
| | ├──3 准备为内核的每个段创建和安装描述符.mp4 36.42M
| | ├──4 段描述符的创建和BSWAP指令.mp4 39.95M
| | ├──5 进入内核执行.mp4 34.56M
| | ├──6 进入内核后显示文本信息.mp4 30.74M
| | ├──7 用CPUID指令取得处理器品牌信息并显示.mp4 57.85M
| | ├──8 准备加载用户程序.mp4 37.87M
| | └──9 预读用户程序并得到它的大小.mp4 18.27M
| ├──22 用户程序编程接口及其实现
| | ├──1 内核与用户程序之间的栈切换问题.mp4 87.59M
| | ├──10 在虚拟机上验证程序的执行.mp4 18.10M
| | ├──11 以十六进制形式显示一个双字以及PUSHAD POPAD和XLAT.mp4 58.03M
| | ├──2 在内核中为用户程序提供编程支持.mp4 72.19M
| | ├──3 用户程序中的符号地址检索表.mp4 37.36M
| | ├──4 内核程序中的符号地址检索表.mp4 74.16M
| | ├──5 串比较指令CMPS.mp4 121.03M
| | ├──6 串比较的方向和重复前缀.mp4 90.26M
| | ├──7 使用外循环依次取得用户SALT表的每个条目.mp4 17.52M
| | ├──8 使用内循环依次取得内核SALT表的每个条目并进行比较.mp4 54.94M
| | └──9 在用户程序内使用内核编程接口读硬盘和显示文本.mp4 30.36M
| ├──23 任务和任务的创建
| | ├──1 任务概念和组成.mp4 11.97M
| | ├──10 TSS描述符的格式和TSS描述符的创建.mp4 16.02M
| | ├──11 用带参数的RET指令返回调用者.mp4 30.20M
| | ├──12 加载任务寄存器TR和局部描述符表寄存器LDTR.mp4 45.93M
| | ├──13 在虚拟机上验证任务的执行.mp4 58.28M
| | ├──2 使用任务控制块保存任务基本信息.mp4 157.58M
| | ├──3 将任务控制块加入任务控制块链表.mp4 34.69M
| | ├──4 通过栈传递例程参数以及立即数的压栈指令.mp4 68.27M
| | ├──5 段寄存器的压栈和出栈以及栈的随机访问机制.mp4 20.80M
| | ├──6 创建任务的局部描述符表LDT.mp4 27.18M
| | ├──7 在当前任务的LDT中安装描述符.mp4 35.46M
| | ├──8 LDT描述符的格式和LDT描述符的创建.mp4 109.61M
| | └──9 创建任务状态段TSS.mp4 18.67M
| ├──24 特权级和特权级保护
| | ├──1 特权级保护的必要性和特权保护机制.mp4 32.44M
| | ├──10 一般情况下的请求特权级设置.mp4 21.24M
| | ├──11 为内核接口例程创建调用门.mp4 187.26M
| | ├──12 调用门的测试和调用门转移过程.mp4 37.41M
| | ├──13 通过调用门实施低特权级到高特权级的转移.mp4 132.68M
| | ├──14 通过调用门转移控制时的栈切换过程.mp4 19.22M
| | ├──15 通过调用门转移控制并返回的完整描述.mp4 170.97M
| | ├──16 创建0 1和2特权级的栈并登记在TSS中.mp4 74.87M
| | ├──17 通过模拟调用门返回进入用户程序执行.mp4 174.96M
| | ├──2 当前特权级CPL.mp4 12.31M
| | ├──3 描述符特权级DPL.mp4 31.78M
| | ├──4 任务公共部分和私有部分的特权级划分.mp4 57.37M
| | ├──5 依从的代码段.mp4 10.31M
| | ├──6 门描述符和调用门.mp4 28.08M
| | ├──7 本章程序说明及特权级检查的时机.mp4 57.28M
| | ├──8 请求特权级RPL.mp4 52.17M
| | └──9 请求特权级调整指令ARPL.mp4 40.49M
| ├──25 协同式任务切换
| | ├──1 多任务和任务切换概述.mp4 28.93M
| | ├──10 通过JMPFAR执行任务切换的过程.mp4 31.32M
| | ├──11 内核任务与用户任务轮流执行的过程.mp4 53.14M
| | ├──12 任务的终止和清理.mp4 42.26M
| | ├──2 内核任务的创建和IO特权级IOPL.mp4 77.99M
| | ├──3 IO特权级的修改和POPF指令.mp4 17.04M
| | ├──4 任务的用户态和内核态.mp4 19.87M
| | ├──5 IO许可位串和TSS的IO许可位映射区.mp4 28.33M
| | ├──6 任务切换的方法及内核任务的确立.mp4 38.16M
| | ├──7 用户任务的创建和初始化.mp4 225.55M
| | ├──8 简单的任务调度和切换策略.mp4 23.27M
| | └──9 遍历TCB链表寻找忙任务和就绪任务.mp4 29.35M
| ├──26 中断和异常的处理与抢占式多任务
| | ├──1 中断和异常概述.mp4 32.21M
| | ├──10 中断和异常发生时的栈切换过程.mp4 54.61M
| | ├──11 在中断处理过程中实施任务切换(含NOP指令的介绍).mp4 66.03M
| | ├──12 抢占式多任务的执行效果演示.mp4 40.80M
| | ├──2 保护模式下中断和异常的向量分配.mp4 27.84M
| | ├──3 中断描述符表 中断门和陷阱门.mp4 70.25M
| | ├──4 本章程序介绍.mp4 214.10M
| | ├──5 创建并安装全部的256个中断门.mp4 53.91M
| | ├──6 为实时时钟中断创建和安装中断门.mp4 23.24M
| | ├──7 加载中断描述符表寄存器IDTR.mp4 35.24M
| | ├──8 重新设置8259A主片的中断向量.mp4 41.85M
| | └──9 中断和异常发生时的特权级检查.mp4 14.29M
| ├──27 分页和动态页面分配
| | ├──1 保护模式下的段式虚拟内存管理.mp4 31.42M
| | ├──10 设置控制寄存器CR3和CR0开启分页功能.mp4 15.53M
| | ├──11 在调试器中观察页目录表和页表.mp4 59.46M
| | ├──12 准备将内核映射到虚拟内存的高端.mp4 30.08M
| | ├──13 在分页机制下访问页目录表自身.mp4 23.28M
| | ├──14 使内核在虚拟内存高端的映射生效.mp4 32.24M
| | ├──15 为内核任务创建任务控制块TCB.mp4 35.81M
| | ├──16 为内核任务的TSS分配内存空间.mp4 76.11M
| | ├──17 处理与线性地址对应的页目录项和页表项.mp4 30.74M
| | ├──18 根据需要分配物理页并设置页表项.mp4 19.79M
| | ├──19 物理内存的页面管理和页映射位串.mp4 33.58M
| | ├──2 每个任务独立的虚拟内存.mp4 16.61M
| | ├──20 空闲页的搜索和BTS指令.mp4 19.07M
| | ├──21 空闲页搜索和分配的具体过程.mp4 23.67M
| | ├──22 确立内核任务并开始创建用户任务.mp4 91.92M
| | ├──23 用户任务的内存分配策略.mp4 30.79M
| | ├──24 清空内核任务页目录表的前半部分并刷新TLB.mp4 53.18M
| | ├──25 为用户任务分配内存并创建LDT.mp4 38.83M
| | ├──26 用户程序的加载和重定位.mp4 117.22M
| | ├──27 用户任务页目录表的创建和访问以及INVLPG指令.mp4 49.52M
| | ├──28 第二个用户任务的创建和分页模式下的任务切换.mp4 35.25M
| | ├──29 分页模式下多任务切换的演示和调试.mp4 474.29M
| | ├──3 物理内存的分页以及段到页的拆分.mp4 24.29M
| | ├──4 处理器的段部件和页部件.mp4 24.22M
| | ├──5 从线性地址到物理地址的转换过程.mp4 36.59M
| | ├──6 页目录和页表及其地址转换过程.mp4 33.00M
| | ├──7 设计内核的页目录和页表.mp4 112.68M
| | ├──8 页目录项和页表项的组成格式.mp4 14.62M
| | └──9 创建内核的页表并初始化低端1MB对应的页表项.mp4 21.07M
| ├──28 平坦模型
| | ├──1 为什么要引入平坦模型及平坦模型的特点.mp4 28.83M
| | ├──2 在主引导程序中创建平坦模型下的段.mp4 23.43M
| | ├──3 平坦模型对内核程序分段的影响.mp4 48.57M
| | ├──4 平坦模型对加载内核程序的影响.mp4 29.46M
| | ├──5 平坦模型下的内核初始化与内核任务的确立.mp4 51.46M
| | ├──6 平坦模型下的用户程序结构.mp4 118.73M
| | ├──7 平坦模型下的用户任务创建.mp4 39.16M
| | └──8 在用户任务内动态分配内存.mp4 52.68M
| ├──3 认识8086处理器
| | ├──1 8086的通用寄存器.mp4 26.51M
| | ├──2 8086的内存访问和字节序.mp4 14.72M
| | ├──3 程序的分段.mp4 12.78M
| | ├──4 程序的重定位难题.mp4 16.08M
| | ├──5 段地址和偏移地址.mp4 14.90M
| | ├──6 8086内存访问的困境.mp4 13.21M
| | ├──7 8086选择段地址的策略.mp4 27.92M
| | ├──8 8086的内存访问过程.mp4 15.89M
| | └──9 逻辑地址和分段的灵活性.mp4 28.48M
| ├──4 汇编语言和汇编软件
| | ├──1 创建汇编语言源程序.mp4 29.30M
| | ├──2 Notepad++的下载和使用.mp4 27.06M
| | ├──3 下载和安装编译器NASM.mp4 62.56M
| | ├──4 编译汇编语言源程序.mp4 39.38M
| | ├──5 下载和使用配套源码及工具.mp4 60.46M
| | └──6 将编译功能集成到Notepad++.mp4 22.97M
| ├──5 如何执行编译好的程序
| | ├──1 8086加电或者复位时的状态.mp4 28.71M
| | ├──2 8086地址空间的分配.mp4 38.61M
| | ├──3 跳转指令.mp4 19.16M
| | ├──4 硬盘的构造和工作原理.mp4 26.87M
| | └──5 一切从主引导扇区开始.mp4 83.11M
| ├──6 虚拟机的安装和使用
| | ├──1 安装VirtualBox虚拟机管理器.mp4 125.98M
| | ├──2 创建VirtualBox虚拟机.mp4 312.55M
| | ├──3 虚拟硬盘简介.mp4 175.47M
| | ├──4 在Windows下创建虚拟硬盘并安装操作系统.mp4 303.92M
| | └──5 在Linux下创建虚拟硬盘并安装操作系统.mp4 26.09M
| ├──7 汇编语言程序的调试
| | ├──1 带调试功能的虚拟机.mp4 24.18M
| | ├──2 安装Bochs虚拟机.mp4 41.95M
| | ├──3 为Bochs虚拟机安装虚拟硬盘.mp4 58.72M
| | ├──4 创建主引导扇区程序.mp4 40.33M
| | ├──5 将程序写入硬盘主引导扇区.mp4 335.87M
| | └──6 用调试器观察程序的执行.mp4 165.04M
| ├──8 在屏幕上显示文本
| | ├──1 显卡和显存.mp4 156.42M
| | ├──10 在VirtualBox中运行写屏程序.mp4 32.11M
| | ├──11 主引导扇区执行时的内存布局.mp4 200.46M
| | ├──12 使用标号计算跳转的偏移地址.mp4 37.33M
| | ├──13 使用寄存器的绝对间接近跳转.mp4 42.91M
| | ├──14 使用相对偏移量的短跳转和近跳转.mp4 60.66M
| | ├──2 准备访问文本模式下的显存.mp4 31.19M
| | ├──3 字符的编码和显示属性.mp4 44.11M
| | ├──4 文本模式下的显存操作.mp4 31.76M
| | ├──5 MOV指令的形式和机器码.mp4 70.80M
| | ├──6 列表文件的创建和使用.mp4 50.54M
| | ├──7 在汇编程序中使用标号.mp4 32.04M
| | ├──8 段间直接绝对跳转指令.mp4 26.12M
| | └──9 在Bochs中运行和调试写屏程序.mp4 500.04M
| ├──9 在屏幕上显示数字
| | ├──1 显示数字的基本原理.mp4 31.05M
| | ├──2 无符号数除法指令div.mp4 54.11M
| | ├──3 在调试器里验证除法操作.mp4 24.99M
| | ├──4 异或指令xor的用法.mp4 283.14M
| | ├──5 加法指令add的用法.mp4 31.77M
| | ├──6 使用标号访问内存数据.mp4 42.12M
| | ├──7 段超越前缀的使用.mp4 50.10M
| | └──8 显示标号的汇编地址.mp4 128.18M
| ├──习题解析
| | ├──第2章.mp4 23.93M
| | ├──第3章.mp4 15.43M
| | ├──第4章.mp4 9.07M
| | ├──第5章.mp4 95.73M
| | ├──第6章.mp4 60.84M
| | ├──第7章.mp4 16.62M
| | ├──第8章.mp4 31.67M
| | └──第9章.mp4 16.60M
| ├──视频辅助文档.rar 19.52M
| └──视频源码和工具.rar 3.02M
├──驱动
| ├──80×86保护模式系列教程.chm 216.43kb
| ├──Windows内核情景分析_上.pdf 183.82M
| ├──Windows驱动开发技术详解.pdf 63.13M
| ├──云计算核心技术剖析.pdf 19.25M
| └──竹林蹊径_深入浅出Windows驱动开发.pdf 106.02M
├──Bochs-win64-2.7.exe 5.11M
├──cyjsjdmw(jb51.net).rar 32.28M
├──nasm-2.15.05-installer-x64.exe 992.89kb
├──x86pkg1.rar 14.50M
├──x86汇编语言 从实模式到保护模式_13217933_P375.pdf 174.12M
└──x86汇编语言-从实模式到保护模式.pdf 5.27M

声明:所有内容均收集于网络,收集的内容仅供内部学习和讨论,建议您在下载后的24个小时之内从您的电脑或手机中删除上述内容,如果您喜欢该内容,请支持并购买正版资源。如若本站内容侵犯了原著者的合法权益,请联系邮箱648765304@qq.com,我们将及时处理,本文链接:https://dbbp.net/14788.html
0

评论0

没有账号?注册  忘记密码?