![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-13 21:42 |
共 47,812 主题排行 / 349,916 发帖 / 今日 0 篇 / 48,268 会员排行 |
| 网络日志(Blog) » 【Billunique】个人网志-滴水汇海 |
| 可打印版本 42,495 / 59 |
| 第16楼 Billunique | 发表于 2007-04-08 07:51 |
| 中级用户 发帖 112 积分 259 | |
|
☆PC机上的内存(RAM)可分为4类:
1.传统内存 传统内存的地址空间是位于0KB~640KB之间。不论使用哪一种类型的CPU,从8086到486,传统内存都是必需的。它是MS-DOS运行程序最重要的舞台。 2.保留内存 由于MS-DOS最初是为8086/8088 CPU设计的操作系统,最多只能使用1MB的内存。这1MB内存最前面的640KB就是前述的传统内存;至于后面剩下的384KB,则保留给BIOS ROM、硬件接口卡(如VGA卡、硬盘控制卡)上的ROM与VidelBuffer使用。 保留内存(Reserved Memory)的地址空间位于640KB~1024KB之间,是保留给外部使用的地址空间。保留内存其实不应该称为内存,应该称为保留内存空间,因为在此空间内并未安装实体的RAM。 在保留内存的384KB地址空间内,除了由视频缓冲区、BIOS ROM和其他硬件扩充卡所使用之外,仍有许多空隙。可运用386/486的分页(paging)能力,将扩展内存映射过来填补这些空隙,因为这些空隙还在DOS的1MB范围之内。(以往是因为没有安插内存,所以才无法使用,现在以分页技术配置好内存之后,便成为可供DOS使用的内存了---这句其实不太明白)我们称这些在640KB以上地址的内存为“上位内存(Upper Memory)”,上位内存可能因外部卡的安装而被分成几个块,所以又称为上位内存块(Upper Memory Blocks)简称UMB。 3.扩展内存 扩展内存(Extended Memory)是指位于1024KB以后的内存。对于我们的内存RAM,扣除640KB的传统内存,其余全部都是扩展内存。 虽然从计算机主机板上看,所有的RAM都排列在一起,但事实上,超过640KB传统内存以外的RAM,其安插的位置是跳过384KB的保留内存而往1MB以后的空间再延续下去。(在640KB~1024KB的区间是没有RAM存在的)[?这两段合着是说,假如我有2M的RAM,事实上是占有(2M+384KB)的空间呢,还是说号称2M其实真实容量是(2M-384KB)----因为有384KB的空间位置是虚的?] 由于MS-DOS本来只能管理1MB以内内存,而保留内存内又没有实体RAM,所以只有传统内存才是MS-DOS的“管辖区”。必须通过286/386/486的保护模式,才可以使用高于1024KB地址的内存。 (1)HMA 在1MB以后的第一个64KB(1024~1088KB)的扩展内存,我们称为HMA(High Memory Area)。 80286以上的CPU,由于地址线超过20条,可以很巧妙地使DOS获得额外的64KB使用空间。其关键在于CPU是否将A20地址线打开(设为ON)。所以在286以上的计算机上,将A20地址一律设为ON,就可以获得这额外的64KB内存,这也就是HMA的所在。 (2)XMM 如前所述,MS-DOS的管不到扩展内存的,为了有效地利用扩展内存,程序应该通过“管理程序”来统一运用扩展内存。此种管理程序就称为扩展内存管理程序(XMM,extended Memory Manager)。 (3)XMS(extended Memory Specification) 为了能有共同的“管理规则”,Lotus/Intel/Microsoft/AST4家公司提出了所谓的XMS规则。MS-DOS提供的Himen.sys程序,就是一个符合这一规则的扩展内存管理程序。 4.扩充内存 以扩充内存槽加插内存而扩充出来的内存称为“扩充内存”(Expanded Memory)。它不像扩展内存线性地排列在1MB之后,而是独立于一旁。Lotus/Intel/Mircosoft3家公司共同提出了所谓的LIM/EMS(~Specification)规范。依据LIMEMS的规定,程序必须通过页帧(Page Frame)的映射,才能对扩充内存进行数据的存取。不像其他的内存可以直接根据地址来存取数据,所以速度较慢。(这块完全没有概念,难道现在第二个插槽的内存都属于扩充内存?#_#) [ Last edited by Billunique on 2007-4-9 at 08:01 AM ] |
|
| 第17楼 Billunique | 发表于 2007-04-09 08:33 |
| 中级用户 发帖 112 积分 259 | |
|
☆关于Format(其实基础的东西需要了解的还很多):
Format命令的用途主要是将磁盘格式化,以建立磁道、扇区的构造,并且会在磁盘上建立启动扇区(Boot Sector)、根目录(Root)以及FAT表(File Allocation Table),用以管理磁盘的文件。 早期版本的Format做格式化时,会把扇区里的数据完全清除。但从DOS5.0版起的Format,默认采用了“非破坏性”的方式。 它并不会将磁盘上原有的数据完全消除。事实上,做完非破坏性格式化后,原有数据还是存在磁盘上,只有启动扇区、根目录和FAT更新而已。由于启动扇区、根目录和FAT记载的是硬盘的使用状态,所以更新之后,表面看起来像是全新的空磁盘,DIR时什么也看不到,但事实上硬盘的原数据还是存在的。这就是我们能将磁盘数据救回来的真正原因! 非破坏性的格式化会在磁盘里建立“隐藏性”的文件,叫“Mirror映像文件”,以保存原来的启动扇区、FAT和根目录等“与磁盘系统有关的”数据,以备Unformat时使用。 建好隐藏性的映像文件后,Format便开始建立新的启动扇区、空白的FAT与根目录,至于其他扇区,则只做检查(Verify)而不改变扇区的内容。由于原来的启动扇区、FAT、根目录都被保存起来了,而所有的文件、子目录则未予更动,所以非破坏格式化之后,若立即运行Unformat命令,便可将数据完整地恢复出来。所以“非破坏性”的格式化也就是“可恢复的”格式化。 当Format发现原磁盘所剩空间不足以建立Mirror映像文件,即存放启动扇区、FAT和根目录数据的时候(基本上针对软盘了,^_^),就会询问用户是否要运行破坏性的格式化。 Format默认是非破坏性的,如果用户自己需要破坏性格式化,则可以给Format指定/U参数。 如果使用了/S参数,则Format完成非破坏性格式化后要将系统文件写入软盘时,会避开该软盘里原来的数据,而若原来的数据太多,使得系统文件写入后势必盖掉一些原来的数据扇区,这时候就会显示信息询问用户是否仍要将系统文件写入。(WARNING:This disk cannot be unformatted if system files are transferred.Proceed with system transfer anyway(Y/N)?) 注:如果连续做两次非破坏性格式化,就不能用Unformat恢复原状了,因为在做第二次的时候,Mirror里保存的数据会是“当时”的,也就是硬盘状态为未使用时的记录。这样的话,恢复后就会得到一个空的FAT和根目录。 如果使用/Q参数,会略过“检查扇区”的步骤。换言之,就是“简化”的非破坏性格式化,所以运行速度很快。(如果确信硬盘没问题,完全可以加上这一参数,加快格式化速度) 如果使用/Q/U组合,则原来的启动扇区、FAT和根目录不会被保存,而会直接重建,至于其他扇区则既不被破坏,也不被检查。换言之,就是“简化”的破坏性格式化。 [ Last edited by Billunique on 2007-4-10 at 03:07 AM ] |
|
| 第18楼 Billunique | 发表于 2007-04-10 06:27 |
| 中级用户 发帖 112 积分 259 | |
|
☆80x86的地址表示法:
当一个程序运行时,其内存空间的分布可以分为:程序区、数据区以及堆栈区。其中,程序区存放程序码以供CPU来读取、运行,数据区存放被处理的数据,而堆栈区则作为程序中断或调用子程序时的数据及返回地址的缓冲区。 早期8088CPU的内部寄存器只有16位。这些寄存器是AX、BX、CX、DX、BP、IP、SP、SI、DI、CS、DS、ES、SS及FLAG,共14个。后来的80x86系列虽然已有更多的改良,但仍保持8088的基本模式。 前列的14个寄存器组中,有一个寄存器叫指令寄存器(Instruction Pointer,简称IP)当程序运行时,IP会指向程序的起始地址,然后CPU便往IP所指的地址上读取指令。接着IP自动指向下一指令的地址,以便继续运行下一指令。 IP只有16位,只能定义出2的16次方即65536个字节,又如何能定出1M字节的内存地址呢?IP岂不是还差4个位才能定出1MB的内存地址?80x86是如何来补足这4个位的呢?为了解决这个问题,80x86是以两个16位的寄存器来组合出一个20位的地址的。80x86有4个16位寄存器叫段寄存器(Segment Pointer):CS、DS、ES、SS,将其中的CS指示器与IP相配合,就可以构成20个位来定出1MB的空间。 也就是说,80x86将段指示器的值看到20个定址位的后16位,即b4~b19(由b0算起),而将IP的值看成是20位地址的前16位,即b0~b15,将这两个寄存器错开4个位相加后就建立一个20位的位数组,CPU将此20位送往地址线就可以定出1M的地址了。 以986895这个地址而言,其16进制表示为F0F0F,可以将段指示器设为F0F0,而IP设为000F,二者错开4个位(即1个16进制位)相加后就是F0F0F了。 一个地址是由5位的16进制表示的,但为了要指出其段指示器与IP的组成内容,可以直接列出此二寄存器的值,而以冒号来分隔。Debug程序就是以这种方式来表示地址的。称段指示器CS的值为段地址,而程序指示器IP的值为段内地址。 虽然F0F0:0000F组合成的地址是F0F0F,但F0F0F不一定是由F0F0:000F组合成的,它可能由F000:0F0F或F001:0EFF等非常多的方式组成,除非查出寄存器真正的内含值,否则无法断言一个地址是由什么样的两个值组成的。 [ Last edited by Billunique on 2007-4-26 at 03:44 AM ] |
|
| 第19楼 Billunique | 发表于 2007-04-10 07:05 |
| 中级用户 发帖 112 积分 259 | |
|
☆Debug浅尝(等有好书后再研究):
A(汇编) 直接将8086/8088记忆码合并到内存。 该命令从汇编语言语句创建可执行的机器码。所以数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作码前指定前缀记忆码。 C(比较) 比较内存的两个部分。 D(转储) 显示一定范围内存地址的内容。 E(键入) 将数据输入到内存中指定的地址。 可以按十六进制或ASCII格式键入数据。任何以前存储在指定位置的数据全部丢失。 F(填充) 使用指定的值填充指定内存区域中的地址。 可以指定十六进制或ASCII格式表示的数据。任何以前存储在指定位置的数据将会丢失。 G(转向) 运行当前在内存中的程序。 H(十六进制) 对指定的两个参数执行十六进制运算。 I(输入) 从指定的端口读取并显示一个字节值。 L(加载) 将某个文件或特定磁盘扇区的内容加载到内存。 M(移动) 将一个内存块中的内容复制到另一个内存块中。 N(名称) 指定Debug I或W命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。 O(输出) 将字节值发送到指定端口。 P(执行) 执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。 Q(退出) 停止Debug会话,不保存当前测试的文件。 R(寄存器) 显示或改变一个或多个CPU寄存器的内容。 S(搜索) 在某个地址范围搜索一个或多个字节值的模式。 T(跟踪) 执行一条指令,并显示所有注册的内容、所有标志的状态和所执行指令的解码形式。 U(反汇编) 反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起来像已汇编文件的列表。 W(写入) 将文件或特定分区写入磁盘。 XA(分配扩展内存) 分配扩展内存的指定页面数。 要使用扩展内存,必须安装符合4.0版的Lotus/Intel/Microsoft扩展内存规范的扩展内存设备驱动程序。 XD(释放扩展内存) 释放指向扩展内存的句柄。 XM(映射扩展内存页) 将属于指定句柄的扩展内存逻辑页映射到扩展内存的物理页。 XS(显示扩展内存状态) 显示有关扩展内存状态的信息。 (云里雾里的,忍了 )[ Last edited by Billunique on 2007-4-10 at 07:29 AM ] 附件 Debugh.jpg (32.25 KiB) |
|
| 第20楼 Billunique | 发表于 2007-04-10 10:10 |
| 中级用户 发帖 112 积分 259 | |
|
☆网络管理命令(Some):
远程登录--Telnet 远程登录就是将本地计算机作为远程主机上的一个终端使用。目前使用最多的BBS系统。简单地讲,远程登录就是在本地计算机上键入的所有命令,并不是在本地机上执行,而是在远程主机上执行。就好像本地计算机的键盘与显示器直接连到了远程主机上。这样,从远程终端就可以直接管理服务器,给网络管理与测试带来很大的方便。 要想使用Telnet远程登录,远程主机必须先启动Telnet服务,并设置好相应的参数与环境变量;另外,Telnet是一个基于TCP/IP协议的程序,所以本地计算机首先要配置好TCP/IP协议。 显示和修改本地ARP列表--ARP ARP(Address Resolution Protocol)是负责将IP地址解析成MAC地址的协议,对于网络中的高层应用程序,网络主机之间的通信是靠IP地址来完成的,但在TCP/IP协议的最底层,主机之间的交换则是通过MAC地址来定位的。每台装网卡的主机中都有一个ARP表,保存着同一网络中IP到MAC之间的映射记录。ARP表并不是一成不变的,大约每两分钟更新一次,这种记录称为动态式(Dynamic)记录。还有一种称为静态记录,也就是表中的记录不变,直到TCP/IP协议重启后才会消失。 -a 通过询问TCP/IP显示当前ARP项。可指定特定IP。 -d 删除由特定IP指定的项。 -s 在ARP缓存中添加项,将IP地址和物理地址相关联。在“租期”到了之后,项自动从缓存中删除。 ARP在添加静态记录之前,必须有一个MAC寻址的过程。当一个TCP/IP的包要发出时,会先查看本机ARP表中的记录是否有该IP的记录。如果有,则直接转换成该IP对应的MAC;如果没有,则将发一个ARP Request广播封包向对方查询MAC地址。这个广播包会被同一子网内的所有主机收到。但只有与该IP相同的主机接收,并回答一个ARP APPLY封包,该包有相应IP与MAC的信息,这样就可以找到相应主机的MAC地址了。 在ARP表中的记录一般是动态的,大约每两分钟刷新一次。如果本地有频繁的IP要访问时,比如网关、伺服器、路由器等,为了减少发送ARP Request广播包,可以在ARP表中创建静态记录。 显示和修改本地路由表命令--Route 大多数主机都驻留在只连接一台路由器的网段上,因此不存在使用哪一台路由器将数据包发送到远程计算机的问题。该路由器的IP地址即是该网段上所有计算机的缺省网关。但是,当网络上拥有两个或多个路由器时,就不一定只依赖默认网关了。可以让某些远程IP地址通过某个特定的路由器来传递,而其他的远程IP通过另一个路由器来传递。这时,需要相应的路由信息,这些信息存储在路由表中,每个主机和每个路由器都配有自己独一无二的路由表。大多数路由器使用专门的路由协议来交换和动态更新路由器之间的路由表。但在有些情况下,必须手动将项目添加到路由器和主机上的路由表中。这时就要用到Route命令,它用于显示、人工添加和修改路由表项目。(具体先不管了,以后再说,毕竟现在主要学习DOS,而非NT改进命令。) [ Last edited by Billunique on 2007-4-10 at 10:47 AM ] |
|
| 第21楼 Billunique | 发表于 2007-04-11 04:57 |
| 中级用户 发帖 112 积分 259 | |
|
☆网络测试命令(some):
显示NetBIOS协议的统计资料命令--Nbtstat Nbtstat命令用于显示本地计算机和远程计算机的基于TCP/IP协议的NetBIOS统计资料、NetBIOS名称表和NetBIOS名称缓存。Nbtstat可以刷新NetBIOS名称缓存和注册的Windows Internet名称服务(WINS)名称。 NetBIOS(Network Basic Input Output System,网络基本输入输出系统)是局域网(LAN)上的程序可以使用的API,几乎所有的局域网计算机都是在NetBIOS基础上工作的。NetBIOS为程序提供了请求低级服务的统一的命令集,这些服务是管理名称、执行会话和在网络节点之间发送数据包所要求的。 显示网络连接信息--Netstat 在服务器与网络的管理中,需要经常查看服务器所开放的端口、当前的所有连接,以便随时了解网络状态。这时就要使用Netstat命令。该命令可以让管理员轻松查看计算机系统服务是否正常,是否被“黑客”留下后门、木马等。Netstat同时也是一个实时的入侵检测工具,可以随时查看是否有不正常的连接。 Netstat命令用于显示活动的TCP连接、计算机侦听端口、以太网统计信息、IP路由表、IPv4统计信息(对于IP、ICMP、TCP和UDP协议)以及IPv6统计信息(对于IPv6、ICMPv6通过IPv6的TCP及通过IPv6的UDP协议)。 数据包跟踪诊断--Tracert 当数据包从本地计算机经过多个网关传送到目的地时,它寻找一条具体路径来传送,每次传送数据包,不能保证或认为总遵循唯一的一条路径。那么如何知道发送的数据包所经过的路径呢?这时就要用到Tracert命令。它同样是内置于TCP/IP的应用程序之一,可以对IP地址或URL进行相应的域名转换。Tracert一般用于检测故障的区段,从而便于查找和排除故障。 Tracert诊断实用程序将包含不同生存时间(TTL)值的Internet消息控制协议(ICMP)回显数据包发送到目标,以决定到达目标使用的路由。要在转发数据包上的TTL之前至少递减1,必须经过路径上的每个路由器,所以TTL是有效的跃点计数。数据包上的TTL达到0时,路由器应该将“ICMP已超时”的消息发送回源系统。Tracert先发送TTL为1的回显数据包,并在随后的每次发送过程将TTL递增1,直到目标响应或TTL达到最大值,从而确定路由。路由通过检查中级路由器返回的“ICMP已超时”的消息来确定路由。不过,有些路由器下传包含过期TTL值的数据包,而Tracert看不到。(看不懂,再说) |
|
| 第22楼 Billunique | 发表于 2007-04-11 08:35 |
| 中级用户 发帖 112 积分 259 | |
|
☆Boot.ini文件解释(基础的东西里面都是有文章的):
Boot.ini文件的内容可分为和两部分。就不说了,我们来看看。比如有这样一个---- 英文引号内的文字,就是引导菜单里显示出来的,选择操作系统的提示文字。至于前面那段涉及ARC命名,它是x86或RISC计算机中用于标识设备的动态方法。ARC命名的第一部分用于标识硬件适配卡/磁盘控制器,它有两个选项SCSI和Multi。Multi表示一个非SCSI硬盘或一个由SCSI BIOS访问的SCSI硬盘,而SCSI则表示一个SCSI BIOS禁止的SCSI硬盘,(x)是硬件适配卡序号;Disk(x)表示SCSI总线号,如果硬件适配卡为Multi,其正确表示方法就为disk(0),rdisk(x)则表示硬盘的序号,如果硬件适配卡为SCSI则忽略此值;partition(x)表示硬盘的分区序号。 开关符的含义: /fastdetect:使系统不检查串行口和并行口。 /safeboot:安全启动,系统只启动HKLM\System\Current ControlSet。 /basevideo:使用标准VGA方式启动。这种方式主要用于显示驱动失效时。 /BurnMemory=:使NT在已知的内存上少使用指定的数量,如果/burnmemory=64,则有64M的内存不使用。 /Bootlog:将日志写入%System%\NTbtlog.txt。 /MaxMem:n:指定NT可以使用的最大内存数,如果一个内存片坏了,这个开关就会有些用。 /Numproc=n:只允许前n个系统处理器工作。 /OneCPU:在多处理器中只使用一个处理器。 /NoGUIBoot:不加载VGA程序,也就不会显示启动过程和失败时的蓝屏信息。 /SOS:在调入驱动程序名时显示它的名字,在因驱动问题而无法启动时使用比较好。 /Win95DOS:在装有3个系统DOS、Win9x和NT的系统上,让NTLDR直接调用DOS的启动文件bootsect.dos。 /Win95:在上述情况下,让NTLDR直接调用Win9x启动文件bootsect.w40。(?) ※--------------------------------------------------------------------------------------------------个人觉得上面这部分开关的作用要大些。 /baudrate:指出用于调度的波特率,如果用户不设置,则使用默认的9600,而对于线缆Modem则使用19200。=_= /debug:在启动NT时调入调度器,它可以在任何时间激活,在错误时可以再次出现时使用它比较合适。 /CrashDebug:调度器在NT启动时启动,只有在内核错误时才有用,如果系统经常会无故出错,这个选项就很有用了。 /debugport=comx:指定用于调度的端口,x就是指端口号。 /Nodebug:不使用调度信息。 /HAL=<hal>:允许用户不使用默认的HAL。 /NoserialMice=:在特定的COM中禁止对串行鼠标的检测。如果用户有一个非鼠标设备接在COM口上,这个选项有些用。 /Year=:使用指定的年份。 /PCLlock:不让NT为多PCI设置分配IO/IRQ资源,而启用BIOS设置。 [ Last edited by Billunique on 2007-4-12 at 03:24 AM ] |
|
| 第23楼 Billunique | 发表于 2007-04-12 03:47 |
| 中级用户 发帖 112 积分 259 | |
|
☆Msdos.sys文件解释:
Win98的Msdos.sys文件中的块中的一些设置(各选项中默认值写在前面)。 [ Last edited by Billunique on 2007-4-12 at 04:20 AM ] |
|
| 第24楼 Billunique | 发表于 2007-04-12 04:19 |
| 中级用户 发帖 112 积分 259 | |
|
这本书大致就到这里了,明天就去还了去。
![]() 下一本是什么呢,现在还没有概念,感觉学得挺乱的,没有一个循序渐进的过程。 |
|
| 第25楼 Billunique | 发表于 2007-04-14 06:38 |
| 中级用户 发帖 112 积分 259 | |
|
★《计算机系统结构精髓》(《Essentials of Computer Architecture》By Douglas E.Commer----清华大学出版社)乱弹
*●*遵循冯·诺依曼体系结构的计算机,将程序和数据两者都存放在存储器中。这样的话,对每条指令,处理器至少必须进行一次存储器访问。如果一个或多个操作指定的数据项在存储器中,那么处理器就得多次访问存储器来读取或存放数值。系统结构设计师用冯·诺依曼瓶颈(Von Neumann bottleneck)这个术语来描绘这种状况。为了避免这种瓶颈,要利用一些技术,诸如把大多数操作数限制在寄存器里。 ![]() 链接: 1.概括起来,冯·诺依曼结构有3条重要的设计思想: (1)计算机应由运算器、控制器、存储器、输入设备和输出设备5大部分组成,每个部分有一定的功能。 (2)以二进制的形式表示数据和指令,二进制是计算机的基本语言。 (3)程序预先存入存储器中,使计算机在工作中能自动地从存储器中取出程序指令并加以执行。 2.指令(Instruction)就是可以为硬件所识别的操作。一个操作就是一条指令,操作的集合我们称为指令集或指令系统(Instruction Set)。每一次重新进入一个读取-执行周期意味着处理器又在执行一条指令。 → *●*读取-执行周期 一个可编程的处理器是怎样来一步步读取和执行程序的呢?虽然具体细节各不相同,但是所有的可编程处理器都遵循同样的基本范式。这一基础机制称为读取-执行周期(fetch-exccute cycle) 实现读取-执行周期,处理器自动地历经一个程序,一步一步执行。就是说,每个可编程处理器重复地执行两个基本功能。即: 永远重复{ 读取:从程序存放的地方读取程序的下一步。 执行:执行程序的这一步。 } 处理器在执行程序的最后一步后会发生什么?--处理器硬件不被设计成停止,它不停地继续运行读取-执行周期。当然,一个处理器不可以永久停止(就是你关了电源)--正常的操作中,处理器将一条指令接一条指令地连续执行。 在某些情况下,程序利用一个循环来进行延迟。例如,微控制器可能需要等待一个传感器的信号来判断是否满足某个外部条件,再继续执行。但是,处理器并非停下来等待这个传感器,而是在程序中包含一个循环,不断地对传感器进行测试。所以,从硬件的观点看,读取-执行周期继续着。 无穷尽的读取-执行观点,对程序设计造成一个直接的结果:软件必须设计得使处理器一直有下一步执行。对于诸如控制物理设备的微控制器这类专用系统,程序由一个无穷循环构成--当它完成程序的最后一步时,处理器再从第一步开始。对于通用计算机,总是有一个操作系统。操作系统能把一个应用程序装载到存储器,然后指挥处理器运行这个应用程序,为了保持读取-执行周期运转,当应用程序完成时,操作系统必须约定收回控制。在没有应用程序运行时,操作系统进入一个循环,等待输入(例如键盘或鼠标的输入)。 摘要如下:因为处理器无穷运行读取-执行周期,所以一个系统必须被设计成确保一直有下一步执行。在专用系统中,同一程序反复执行;在通用系统中,在没有应用程序运行时,操作系统一直运行着。 → *●*处理器一旦完成一条指令的执行,就自动转移到存储器中下一单元,再读取下一条指令。为了执行读取-执行周期,处理器使用一个称为程序计数器(program counter)的专用寄存器--有的系统设计师不称为程序计数器,而称指令指针(Instruction Pointer),两个术语完全一致。 当一个读取-执行周期开始时,程序计数器里有下一条要执行的指令的地址。一条指令读取后,程序计数器就立即更新为下一条指令的地址。每个读取-执行周期期间程序计数器的更新,意味着处理器自动地历经存储器里相继的指令。下面表明了读取-执行周期怎样历经相继指令。 赋给程序计数器一个程序的起始地址。 永远重复{ 读取:从程序计数器给定的单元获取程序的下一步。 把内部地址寄存器A置值为刚读取的指令的后一个地址。 执行:执行此步程序。 把地址寄存器A的内容复制到程序计数器。 } 这个算法让我们明白转移指令怎样工作。绝对转移(absolute branch)指明要执行的下一条指令的地址。通常绝对转移指令称为跳转(jump)指令。jump指令在执行阶段把由操作数字段给予的地址加载到上述算法所说明的内部寄存器A。在读取-执行周期最后,硬件把这个数值复制到程序计数器,表明了将按这个地址来读取下一条指令。(相对转移暂搁不表) [ Last edited by Billunique on 2007-6-6 at 11:11 AM ] |
|
| 第26楼 Billunique | 发表于 2007-04-14 08:22 |
| 中级用户 发帖 112 积分 259 | |
|
*●*CPU复杂性的部分原因:
它必须充当几个重要的角色==运行操作系统、运行应用程序、控制外部I/O设备、启动和停止计算机、管理存储器等。没有一种单一的指令集对于所有这些角色都是最理想的,因此,一个CPU常包含多个指令集。 保护和特权==现代计算机都含有一个保护系统,它可以赋予某些子系统有更高的特权。例如,可以防止一个应用程序直接与I/O设备交互;可以防止操作系统的代码被有意无意地篡改。 硬件优先权==CPU采用优先权方案,赋予某些计算任务比其他计算任务有更高的优先权。例如,I/O设备比应用程序有更高的运行优先权--如果CPU在运行一个程序时,有一个I/O设备需要服务,此刻CPU就会停止应用程序的运行,而去处理这个设备。 → *●*CPU利用执行模式(mode of execution)。在有些CPU中,各模式的特性差别相当大,可以认为CPU是几个分开的、不同的硬件子系统,由模式来决定当前使用的是哪个硬件子系统。 以下是由CPU执行模式控制的一些典型特性。模式改变时,CPU的特性也明显改变: ~指令系统的一个有效子集 ~数据顶的大小 ~可以访问的存储器范围 ~可用的功能部件 ~特权量 → *●*特权和保护: 执行模式关系到CPU的那些用于特权和保护的机制。就是说,当前模式部分指定了CPU的特权级。例如,当CPU为一个I/O设备服务时,它允许操作系统中的设备驱动软件与设备交互作用,并执行控制功能。但是必须防止其他随便什么应用程序无意或恶意地向硬件发送命令,或执行控制功能。所以操作系统执行应用程序前,先要改变模式,降低特权。运行更小特权的模式时,CPU不准许直接控制I/O设备(即,CPU把一个特权操作视为一条无效指令)。 → *●*多级保护: 到底需要多少级特权?每一级应当允许一些什么样的操作?这个课题,硬件系统设计师和操作系统设计师已经讨论了多年。创建了不提供保护的CPU,又创建了提供八级保护的CPU,一个比一个有更多的特权。保护的想法在于,在任何时刻利用必需的最小级别的特权,来帮助防范问题的发生。摘要如下: 利用保护方案来限制允许的操作,CPU能够检测那些企图执行未经授权的操作。 下图表示了两级特权的概念。 ![]() 虽然没有一种能满足所有CPU的保护方案,不过设计者们一般对运行应用程序的CPU,认同一种最低限度的方案: 一个运行应用程序的CPU至少需要两级保护:操作系统一定以完全的特权运行,而应用程序以有限的特权运行。 [ Last edited by Billunique on 2007-6-6 at 11:11 AM ] |
|
| 第27楼 lxmxn | 发表于 2007-04-19 09:54 |
| 版主 发帖 4,938 积分 11,386 | |
|
我来学习一下,顺便顶一个。
|
|
| 第28楼 Billunique | 发表于 2007-04-20 03:54 |
| 中级用户 发帖 112 积分 259 | |
|
多谢lxmxn莅临指导
。这几天有点忙,同时也不知道记些啥好了。不过我会坚持的~将学习进行到底! |
|
| 第29楼 Billunique | 发表于 2007-04-24 07:54 |
| 中级用户 发帖 112 积分 259 | |
|
★《微机原理与接口技术》(电子工业出版社)乱弹
☆十进制数转换为R进制数 (1)整数部分的转换。常用的方法有除R取余法和降幂法。 [例]用除R取余法将十进制的1223转换成等值的十六进制数。 具体做法是:除16取余,先得低位,逐次取得较高位,一直进行到商数为0时为止,然后按反序获得对应的十六进制数。 ![]() [例]用降幂法将十进制83转换成等值的二进制数。 具体做法是:(对于给定的一个十进制数M) ¥ 在R的N次幂中寻找N的最大值,使有(R的N次方)<=M,然后在R进制的对应位上置1,否则置0; ¥ M=M-(R的N次方)赋给,若M=0,则结束;否则重复第一步。 (2)小数部分的转换 十进制小数转换成R进制小数的方法是:乘R取整,先得高位,依次获得低位。如果十进制小数不能用有限的R进制小数表示,则可根据需要取若干位作为近似值。对于既有整数部分又有小数部分的十进制数,转换时只需将整数部分和小数部分分别进行转换,然后用小数点连接起来即可。 [例]把十进制小数0.5625转换成等值的二进制数。 [ Last edited by Billunique on 2007-6-6 at 11:13 AM ] |
|
| 第30楼 Billunique | 发表于 2007-04-25 08:36 |
| 中级用户 发帖 112 积分 259 | |
|
☆汉字的编码
在计算机内部,任何信息都是用二进制代码表示的(包括字母、数字、符号和汉字)。一般情况下,计算机依靠输入设备把要输入的字符或汉字转换成为一定格式的二进制代码,然后才能接收。输出则是相反的过程,计算机首先把要输出的字符或汉字的二进制代码送到输出设备,然后再由输出设备处理输出。总之,无论是输入还是输出,都必须对文字符和汉字进行编码。 西文是拼音文字,用有限的几个字母(如英文26个,俄文32个)就可以拼写出全部西文信息。因此,西文仅需对有限个数的字母进行编码,就可以将全部西文信息全部输入计算机。而汉字信息则不一样,汉字是象形文字,一个汉字就是一个方块图形。计算机要对汉字信息进行处理,就必须对数目繁多的汉字进行编码,建立一个含成千上万个汉字的字符集。 所谓的国标码是《国家标准信息交换用汉字编码基本字符集》的简称。这是我国国家标准总局于1981年,为适应计算机对汉字信息交换的处理而颁布的国家标准,编号为GB2312-80。该标准按94×94的二维代码表形式,收集了6763个汉字和682个一般字符、序号、数字、拉丁字母、希腊字母、汉语拼音符号等,共7745个图形字符。该标准最多可包含8836个图形字符,适合于一般汉字处理、汉字通信等系统之间的信息交换。(2000年又颁布了GB18030-2000,扩充了字符集,加入了对少数民族文字的支持) 汉字编码有内码、外码之分。外码实际上就是汉字的输入编码,比如区位码、国标码、全拼码、双拼码、五笔字形码、郑码等等。内码是计算机系统内部进行汉字信息存储、交换、检索等操作的编码。汉字内码采用两个字节表示,没有重码。 区位码:用每个汉字在二维码表中的行、列位置的序数来表示的代码,共4位数字,简称为区位码,前二位为行号(也称区号),后二位为列号(也称位号)。如“啊”的区位码为1601,表示“啊”在二维代码表中位于16区01位。 国标码:国标码为区号和位号各加32后,得到的双七位二进制编码。如“啊”的国标码为4833,国标码用于不同汉字系统之间汉字的传输和交换,也可用做汉字的输入编码。 内码:汉字国标码是双七位二进制编码,要用它作机内码将会与英文字符的机内码ASCII码相混淆,为此特把两字节国标码的每个字节的最高位置“1”,以与ASCII码最高位为“0”区别开来。这样,便形成了汉字的机内码。简单说,机内码=国标码+8080H(即1000000010000000) [ Last edited by Billunique on 2007-4-26 at 12:34 AM ] |
|
| 上一页 1 2 3 4 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |