[2008-11-01 12:31] [转载]com和exe文件结构
1、com文件结构及原理
com文件结构比较简单,它包含程序的一个绝对映像,即为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映像从文件直接复制到内存,从而加载com程序,而不做任何改变。
为加载一个com程序,MS-DOS首先试图分配内存,因为com程序必须位于一个64KB的段中,所以com文件的大小不能超过65024(64KB减去用于PSP的256B和用于一个起始堆栈的至少256B)。如果MS-DOS不能为程序、一个PSP、一个起始堆栈分配足够的内存,则分配尝试失败。否则,MS-DOS分配尽可能多的内存(直至所有保留内存...
[2008-09-25 11:53] [转载]计算机启动过程
打开电源启动机器几乎是电脑爱好者每天必做的事情,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了些什么工作呢?相信有的朋友还不是很清楚,本文就来介绍一下从打开电源到出现Windows的蓝天白云时,计算机到底都干了些什么事情。
首先让我们来了解一些基本概念。第一个是大家非常熟悉的BIOS(基本输入输出系统),BIOS是直接与硬件打交道的底层代码,它为操作系统提供了控制硬件设备的基本功能。BIOS包括有系统BIOS(即常说的主板BIOS)、显卡BIOS和其它设备(例如IDE控制器、SCSI卡或网卡等)的 BI...
[2008-02-19 01:16] 寄存器
寄存器是内存阶层中的最顶端,也是系统操作资料的最快速途径。寄存器通常都是以他们可以保存的 位元 数量来估量,举例来说,一个 "8 位元寄存器" 或 "32 位元 寄存器"。寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。
寄...
[2008-09-23 09:32] 如何实时得到java object占用的空间
曾经看到过有人用以下方法来计算:在生成该object的前后都调用java.lang.Runtime.freeMemory()方法,然后看两者之差即为该object消耗的内存量。
这种方法的代码是:
long totalMem = java.lang.Runtime.freeMemory();
Object myBigObject = null;
System.out.println("You just got rid of " + to...
[2008-01-06 17:51] 汇编揭秘C中的参数传递
文章作者:cook702
很多学习汇编的朋友想必对C也比较了解,因为在当前大学的课程体系里,它很有可能就是你接触到的第一门编程语言。由于对计算机的理解不够,学习时必定会遇到各种问题。有些问题是你通过思考就可以解决的,而更多的问题则是你无从思考,就好像它天生就是这样,你只要记住就OK了。然而这样的学习方式是机械的,更是没有创造力的。只有真正理解了C语言,你才有能力去驾驭它,否则它和你之间永远会隔着一层窗户纸,虽然很薄,但是你永远也捅不透。这是为什么呢?其实道理很简单,就好比在一个公司有现成的代码库可以调用,有的程序员遇到问题时,他唯一可作的就是调用代码库中的功能模...
[2008-03-04 08:53] assume的作用探讨【转】
p278 16.2小节中的内容。
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=free&kind=1220&qkSg=2&qID=7172&readSg=1
关于assume的作用,许多人都简单的解释说,这是告诉编译器哪一个段和哪一个段寄存器相关联。举个简单例子来说:
assume cs:code, ds:data
这是告诉编译器cs和code关联,ds和data关联,...
[2008-01-10 20:40] 发现王爽老师写的一个教学的操作系统,和大家共享
http://www.toyix.net/
进程间通信----进程并发运行就涉及到进程对资源的争夺问题,下面用向屏幕输出字符来说明这个问题。程序如下:
#include <toyix.h>
void f1()
{
int i;
for(i=0; i < 80; i++)
{
gotoxy(i,7);
delay(60);
...
[2008-01-11 16:56] 看到“为什么要有操作系统”显示程序比较,经典
问题1:向显示器上输出一个字符串:
A、没有操作系统的情况下:
至少要了解以下信息:1) 显存地址 2) 显存结构
mov ax,seg str
mov ds,ax
mov si,offset str
mov...
[2008-12-09 10:10] com和exe文件结构
1、com文件结构及原理
com文件结构比较简单,它包含程序的一个绝对映像,即为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映像从文件直接复制到内存,从而加载com程序,而不做任何改变。
为加载一个com程序,MS-DOS首先试图分配内存,因为com程序必须位于一个64KB的段中,所以com文件的大小不能超过65024(64KB减去用于PSP的256B和用于一个起始堆栈的至少256B)。如果MS-DOS不能为程序、一个PSP、一个起始堆栈分配足够的内存,则分配尝试失败。否则,MS...
[2009-05-07 12:26] CONST
C中CONST的使用:
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。
问题:const变量 & 常量
为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?
const int n = 5;
int a[n];
...
[2009-04-20 16:38] 显示图形如何避免闪烁
而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。
MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,
只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。
我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈
我的一些观点。
1、显示的图形为什么会闪烁?
我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏
幕显示时是由OnPaint进行调用的。当窗...
[2008-02-19 01:01] 相同的汇编指令VS不同的机器代码 分析
03c0 add ax,ax
简单的来说,就是 01 03都是add
01d8 add ax,bx
03c3 add ax,bx
简单的来说
就是 01 03都是add
d8 c3 是bx+ax 结果放入 ax
和ax+bx 结果放入 ax
具体分析在图里
谁来写篇仔细的教程啊,偶 ,困了,晕了,睡了。
看懂的跟些自己造出来的类似情况。...
[2009-01-25 11:20] _BSS BSS (摘录)
BSS是Unix链接器产生的未初始化数据段。其他的段分别是包含程序代码的“text”段和包含已初始化数据的“data”段。BSS段的变量只有名称和大小却没有值。此名后来被许多文件格式使用,包括PE。“以符号开始的块”指的是编译器处理未初始化数据的地方。BSS节不包含任何数据,只是简单的维护开始和结束的地址,以便内存区能在运行时被有效地清零。BSS节在应用程序的二进制映象文件中并不存在。
在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by S...
[2010-01-27 22:56] 系统告诉我三天上了!!
好先给个位映像画像素的程序,恩恩,IBMPC给的台简略了,连清屏都没告诉,害我高了好久
DATA SEGMENT
XCOR DW 200
XCOR1 DW 200
YCOR DW 200
DRAW DB 00H,18H,00H,00H,3CH,00H,7FH,0FFH,0FEH,00H,18H,00H,00H,3CH,00H,7FH,0FFH,0FEH,00H,18H,00H,00H,3CH,00H,7FH,0FFH,0FEH
YANMA DB 0
BYTEADDR DW 0
COUNTER DB 03H...
[2008-08-22 14:45] 一些缩写原型
寄存器 =Register
80x86(Intel系列)CPU提供了几个通用寄存器。其中包含八个32位寄存器,如下所示,E’代表扩展(extended):
EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP
16位数据寄存器:
AH & AL =AX 累加寄存器,常用于运算 助记 Accumulator
BH & BL =BX 基址寄存器,常用于地址索引 助记 Base
CH & CL =CX 计数寄存器,常用于计数 助记 Count
DH & DL =DX 数据寄存器,...
[2008-09-17 12:04] 关于无符号和有符号数的解释(转)
在汇编语言层面,声明变量的时候,没有 signed 和 unsignde 之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到 计算机中,只有这一个标准!汇编器不会区分有符号还是无符号然后用两个标准来处理,它统统当作有符号的!并且统统汇编成补码!也就是说,db -20 汇 编后为:EC ,而 db 236 汇编后也为 EC 。这里有一个小问题,思考深入的朋友会发现,db 是分配一个字节,那么一个字节能表示的有符号整 数范围是:-128 ~ +127 ,那么 db 236 超过了这一范围,怎么可以?是的,+236 的补码的确超出了一个字节的表示范围,...
[2008-11-22 12:21] 编译型语言VS解释型语言
编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。因此效率比较高。比如C语言。
解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Basic语言,专门有一个解释器能够直接执行Basic程序,每个语句都是执行的时候才翻译。
C语言是编译型的。
Java比较特殊,Java程序也需要编译,但是没有直接编译成机器语言,而是编译成字节码,然后用解释方式执行字节码。
C程序——>机器语...
[2009-08-10 22:18] 汇编语言源程序框架结构和格式规范
汇编语言源程序大致包含下列 6 个“框架”元素:
;①容量足够且固定的“通用”堆栈段:
stck segment stack 'stack'
;80H的栈深度足以应付一般应用程序对堆栈的需求
dw 80h dup(0)
stck ends
;②空数据段
data segment
data ends
...
[2009-12-29 00:04] 通过反汇编代码解读指针和引用的内在机理
比如下述代码
void main(void)
{
int x1=0,*ptrx1=&x1;
int x2=0,&refx2=x2;
(*ptrx1)++; //关注对变量的操作
refx2++;
printf("x1=%d,x2=%d\n",x1,x2);
}
执行后,通过指针及引用对变量的间接操作使 x1 和 x2 都增加了 1 ,不...