`
文章列表
      回文是指正读反读均相同的字符序列,如“abba”,和“abdba”均是回文,但“good”不是回文,试写一个算法判定给定的字符向量是否为回 文。 字符串回文 public static boolean check(String str) { if (str.length() > 1) { if (str.charAt(0) != str.charAt(str.length() - 1)) { return false; } else { return check(str.substring(1, str.length() - 1)); ...
一、查看内存分布情况       设置“页目录表”和“页表”之前,最好先查看下内存分布情况,根据“OS可用内存的大小”来设置她们;否则可能设置了太大的“页目录表”和“页表”而浪费了宝贵的内存。       如果傻乎乎地设置“页目录表”和“页表”,我们来看看后果:       假设内存的一个物理块是4KB(=4096B)。我们知道,“页目录表”占用一个内存物理块,而“页目录表”中的每项PDE占32bit(4B),因此“页目录表”中最多有4096B/4B=1024个PDE;1024个PDE对应1024个页表,而每个“页表”又占用一个物理内存块。综上,       “页目录表”占用内存  ...
     JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。   1、jmp指令: ...
下面说明代码段和数据段的访问: 一、代码段间跳转 1、普通(直接)跳转: JMP Selector:0 或 CALL Selector:0 1)一致代码段(JMP&CALL) 要求:CPL>=DPL,RPL不作检查 特权变化:跳转后程序CPL=跳转前程序CPL 2)非一致代码段(JMP&CALL) 要求:CPL=DPL & RPL<=DPL 特权变化:跳转后程序CPL=目标代码段DPL 2、通过调用门跳转:
偷懒一下,直接用JavaEye上chjavach老兄的文章了,他讲命令模式用了6节不厌其烦地阐述。虽然冗长,但算是详尽,需要看时下载附件中的电子书和代码即可^_^ 文中第一个例子“点击按钮开机”非常形象,记清楚以下几点: 1、MainBoardApi,GigaMainBoard(以及MsiMainBoard)是命令接收者接口、命令接收者实现类。好比“主板标准”和“主板”。 他们是真正执行命令的地方,但只提供诸如open()、reset()的方法; 命令实现类OpenCommand将一个命令接收者实现类GigaMainB ...
     编写这个功能主要是由于我的汉王电子书不能查看.asm, .java等格式的文件,因此我需要把他们的后缀改成.txt,不过需要看的东西太多了,索性写一个程序解决!     之前用java写了个改后缀和编码的程序,打成jar包,但由于兼容性问题,运行不了。故此,在Linux下,直接写一个shell脚本来做: ####################################################################### #changeSuffix.sh——改文件后缀名 echo "请输入一个绝对路径,本脚本将把其下和其子目录下的所有后缀为 ...
    在此之前,先要熟悉汇编指令“长/短jmp”、“长/短call”、ret、retf.   一、调用门“纯粹”作为入口地址     调用门本质上就是个入口地址,只是增加若干属性而已。例子pmtest5a.asm完全将其作为一个地址使用。   二、使用调用门,在不同特权级间转移     使用调用门分为以下两个阶段,难点无非就是“TSS”和“堆栈的变化”。本质上,TSS就是记录了不同特权级堆栈的SS和ESP;堆栈的变化无非就是无非就是短跳转压入SS&ESP,长跳转再多加CS&EIP,有时候也要压入和弹出参数,并且需要相关的检验。详见书上P55~60,或者这里http: ...
先展示一下效果图:       直接看代码:       注意到这段代码是在P38  “3.2.1海阔凭鱼跃”那段代码基础上加上LDT得到的,新添加的代码会着重标注出来的^_^   ; ========================================== ; pmtest3.asm ; 编译方法:nasm pmtest3.asm -o pmtest3.com ; ==========================================   %include "pm.inc" ; 常量, 宏, 以及一些说明   org ...
三、关于保护模式和实模式的跳转和段描述符高速缓冲寄存器(转载)        其实从实模式跳转到保护模式还是很好懂得,主要注意就是跳转指令   jmp dword SelectorCode32:0 //而不能是 jmp SelectorCode32:0      因为这时编译 ...
一、主要功能        在本章最基本代码(P25、chapter3/a/)的基础上实现大地址(超过1M)的读写。在前面程序的基础上新建一个段,这个段以5MB为基址,远远超过1MB的界限。先读出开始处8字节的内容,然后写入一个字符串, ...
一、宏定义和属性常量 (代码段/数据段描述符见P32;门描述符见P51) 下面是对代码段/数据段描述符的宏定义,目的是为了方便编写描述符。   ; 描述符 ; usage: Descriptor Base, Limit, Attr ; Base: dd -->段基址4字节 ; Limit: dd (low 20 bits available) -->段界限20位,放心大胆地用4字节(32位)表示界限,只不过经转换只用到其中20位 ; Attr: dw (lower 4 bits of higher byte are a ...
     A20地址线困惑我了很久,这篇文章终于揭开了这个谜团。详细阐述之前,我先来总结一把—— 8086/8088和80286地址转换方式一样,寻址范围不一样 。     8086/8088和80286中“逻辑地址-->线性地址”的转换方式是一样的:segment:offset-->segment<<4+offset,而且segment和offset均只有16bit. 只不过因为8086/8088是20位地址总线,而80286是24位地址总线,故地址范围有点不一样:         (1)8086/8088寻址范围是0~1M(在8086/8088中1M以上的exten ...
A Classic Example:  Image Proxies        以下是最朴素的代理模式实现,其中只有“代理”的思想,但并不是真正的代理。          一个ImageIconProxy proxy实例被封装在JFrame frame中,且他们都是ShowProxy属性。        点击“Load ...
Strategy Pattern        本文总结《Design Pattern in Java 》 Chap23 Strategy.   以为用户推荐一款烟火制品选择采取不同推荐策略为例。先讲解如果不采用策略模式会怎样,然后将这些代码重构为策略模式。   1 、如果不使用策略模式 ,Customer::getRecommended() 中封装了复杂的策略选择和策略执行流程。 见图一   关键代码(choice & execution of various strategies) :     publi ...
  在实模式下,逻辑地址空间中存储单元的地址由段值和段内偏移两部分组成。在保护模式下,虚拟地址空间(相当于逻辑地址空间)中存储单元的地址由段选择子和段内偏移两部分组成。与实模式相比,段选择子取代了段值 ...
Global site tag (gtag.js) - Google Analytics