精华内容
下载资源
问答
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    immortality按:请用ctrl+f在本页中查找某一部分的内容或某一命令的用法。 -------------------------------------------------------------------------------- Linux必学的60个命令(1)-安装与登陆命令 login 1...
  • 程序是由什么组成的? 指令和数据 程序是指令和数据组合体。例如,C 语言“printf (" 你好 “);”这个简单程序中,printf 是指令,” 你好 " 是数据。 什么是机器语言? cpu可以直接识别并使用语言 正在...

    程序是怎么跑起来的
    萌新求别喷

    今天开始自学程序 第一本书
    qq1

    程序咋跑的

    cpu是啥

    1.0 cpu是什么+

    1. 程序是什么?
      指示计算机每一步动作的一组指令

    2. 程序是由什么组成的?
      指令和数据
      程序是指令和数据的组合体。例如,C 语言“printf (" 你好 “);”这个简单的程序中,printf 是指令,” 你好 " 是数据。

    3. 什么是机器语言?
      cpu可以直接识别并使用的语言

    4. 正在运行的程序存储在什么位置?
      内存
      硬盘和磁盘等媒介上保存的程序被复制到内存后才能运行。

    5. 什么是内存地址?
      内存中用来表示数据和命令存储位置的数值
      内存中保存命令和数据的场所,通过地址来标记和指定。地址由整数值表示。

    6. 计算机的构成元件中,负责程序的解释和运行的是哪个?
      cpu
      计算机的构成元件中,根据程序的指令来进行数据运算,并控制整个计算机的设备称作 CPU。大家熟知的奔腾(Pentium)就是 CPU 的一种。

    程序员还需要理解 CPU 是如何运行的,特别是要弄清楚负责保存指令和数据的寄存器的机制。了解了寄存器,也就自然而然地理解了程序的运行机制。可能有很多读者会认为 CPU 的运行机制比较难,其实它非常简单。

    1.1 cpu的内部结构

    CPU 1所负责的就是解释和运行最终转换成机器语言的程序内容。
    cpu由具有on\off功能的晶体管构成,有的cpu在集合电路中集合了两个cpu芯片 称为双核cpu
    在这里插入图片描述
    程序员用高级语言编写程序
    编译并解释成机器语言exe文件
    程序运行时,在内存中生成exe文件的副件
    cpu进行解释并执行程序内容

    cpu和内存是由很多晶体管组成的电子部件 通常被称为ic (集成电路)
    cpu由寄存器 控制器 运算器 时钟组成 各部分由电流信号相互连接
    寄存器负责暂存数据和指令等处理对象,类似内存 每个cpu由20-100个寄存器
    控制器负责将内存里的数据和指令读入到寄存器 并根据指令的执行结果控制计算机2w
    运算器运算从内存读入寄存器的数据
    时钟发出cpu开始计时的时钟信号

    2时钟信号英文叫作 clock puzzle。Pentium 2 GHz 表示时钟信号的频率为 2 GHz(1 GHz = 10 亿次 / 秒)。也就是说,时钟信号的频率越高,CPU 的运行速度越快。

    内存指的是计算机的主储存器 储存数据和指令 主存通过控制芯片和cpu相连
    主存有可读写的元素组成 每个字节都有地址编号
    cpu通过该地址编号可以读取主存中的指令和数据 当然也可以写入
    不过主存中的数据会随计算机的关机自动删除

    主存位于计算机内部 储存程序 数据等 通常使用DRAM芯片 需要稳定的供电 并刷新 (最新数据)
    关机后内容自动删除

    程序启动后 通过时钟信号 控制器从内存中读取的数据和指令 通过对这些指令进行解释和运行 运算器对数据进行计算 控制器通过得出的结果进行控制

    其实所谓的控制就是指数据运算以外的处理(主要是数据输入输出的时机控制)。比如内存和磁盘等媒介的输入输出、键盘和鼠标的输入、显示器和打印机的输出等,这些都是控制的内容。

    1.2 cpu是寄存器的集合体

    为什么必须要了解寄存器呢?这是因为程序是把寄存器作为对象来描述的。
    通常我们将汇编语言编写的程序转化成机器语言的过程称为汇编;反之,机器语言程序转化成汇编语言程序的过程则称为反汇编。

    机器语言级别的程序是通过寄存器来处理的。也就是说,在程序员看来“CPU 是寄存器的集合体”。至于控制器、运算器和时钟,程序员只需要知道 CPU 中还有这几部分就足够了。

    汇编语言是 803867以上的 CPU 所使用的语言。eax 和 ebp 是 CPU 内部的寄存器的名称。内存的存储场所通过地址编号来区分,而寄存器的种类则通过名字来区分。

    使用高级语言编写的程序运行后会编译成机器语言 然后通过寄存器处理

    寄存器中储存的既可以是数据也可以是指令 其中 数据分为 用于计算的数据 和 表示内存地址的数值
    数据种类不同 用来储存的寄存器就不同 cpu每个寄存器的功能都不同

    对程序员来说,CPU 是什么呢?如图 1-3 所示,CPU 是具有各种功能的寄存器的集合体。其中,程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他的寄存器一般有多个。程序计数器和标志寄存器比较特殊,这一点在后面的章节中会详细说明。另外,存储指令的指令寄存器等寄存器,由于不需要程序员做多关注,因此图 1-3 中没有提到。

    1.3 决定程序流程的程序计数器

    存储指令和数据的内存 是通过地址来划分的
    cpu执行0100的地址后 程序计数器就变成0101 (若一个指令指向多个地址 增加地址长度)
    程序计数器决定程序的流程

    1.4 条件分支和循环机制

    程序的流程分为顺序执行 条件分支和循环
    顺序执行指按照地址内容的顺序执行指令
    条件分支指按照条件执行任意地址的指令
    循环 重复执行同一地址的指令

    无论当前累加寄存器的结果是正负0 或者溢出 奇偶校验 标志寄存器都会保存

    PU 执行比较的机制很有意思,因此请大家务必牢记。例如,假设要比较累加寄存器中存储的 XXX 值和通用寄存器中存储的 YYY 值,执行比较的指令后,CPU 的运算装置就会在内部(暗中)进行 XXX-YYY 的减法运算。而无论减法运算的结果是正数、零还是负数,都会保存到标志寄存器中。结果为正表示 XXX 比 YYY 大,零表示 XXX 和 YYY 相等,负表示 XXX 比 YYY 小。

    1.5 函数的调用机制

    函数调用也是通过将程序计数器的值设定为函数的存储地址来实现的
    函数的调用需要在完成函数内部的处理后 处理流程再返回到函数调用点

    函数调用的处理用call命令 结束的处理转换为return命令

    call命令会把函数结束后的地址储存在栈
    函数结束后用return命令将栈中的地址输入到程序计数器中

    1.6 通过地址和索引实现数组

    通过基址寄存器和变址寄存器可以实现类似数组的操作

    数组是和多个数据相同长度的 用数组名表示整个数组 索引表示每个数据

    用16进制数将xxx划分出来 可以将10000存入基址寄存器 使变址寄存器的数值在000000-00xxxx变化
    cpu会把基址寄存器的值和变址寄存器的和解释为实际查看的内存地址 变址寄存器就像数据中的索引

    1.7 cpu的处理其实很简单

    CPU 可以进行的处理非常少。虽然高级编程语言编写的程序看起来非常复杂,但 CPU 实际处理的事情就是这么简单

    2.0 数据是用二进制表示的

    1. 32 位是几个字节 ?

    2. 二进制数 01011100 转换成十进制数是多少?

    3. 二进制数 00001111 左移两位后,会变成原数的几倍?

    4. 补码形式表示的 8 位二进制数 11111111,用十进制数表示的话是多少?

    5. 补码形式表示的 8 位二进制数 10101010,用 16 位的二进制数表示的话是多少?

    6. 反转部分图形模式时,使用的是什么逻辑运算?

    2.1 用二进制表示计算机信息的原因

    计算机是由IC组成的 (集成电路 )cpu和内存也是ic的一种

    引脚在ic中并列排列着 每个引脚只能表示0v和5v 只能表示两种状态

    计算机处理信息的位是二进制的一位 位的英文bit是二进制数位的缩写

    二进制数的位数一般是八的倍数
    八位2进制数被称为一个字节 字节是最基本的信息计量单位 位是最小的单位 字节是基本单位
    内存和磁盘都使用字节 位无法使用

    若数据小于存储数据的位数 如100200 变为00100200 用16位表示00000000xxx
    奔腾等32位微处理器可以一次32位的二进制数

    对二进制数的处理 取决于程序的编写方式

    2.2 什么是二进制

    在这里插入图片描述
    下面我们会对照着十进制数来说明二进制数的机制,这部分是重点,请大家一定要掌握。

    其实大家所说的数值,表示的就是构成数值的各数位的数值和位权相乘后再相加的结果。例如 39 这个十进制数,表示的就是 30+9,即各数位的数值和位权相乘后再相加的数值。

    这种思考方式在二进制数中也是通用的。二进制数 00100111 用十进制数表示的话是 39,因为(0×128)+(0×64)+(1×32)+(0×16)+(0×8)+(1×4)+(1×2)+(1×1)= 39。

    2.3 移位运算和乘除运算的关系

    二进制数所特有的运算,也是计算机所特有的运算,因此可以说是了解程序运行原理的关键。

    十进制数左移后会变成原来的 10 倍、100 倍、1000 倍……同样,二进制数左移后就会变成原来的 2 倍、4 倍、8 倍……反之,二进制数右移后则会变成原来的 1/2、1/4、1/8……这样一来,大家应该能够理解为什么移位运算能代替乘法运算和除法运算了吧。

    2.4 便于计算机处理的补数

    二进制中表示 正负 一般用最高位 0是正 1是负

    计算机在做减法运算时,实际上内部是在做加法运算。用加法运算来实现减法运算,是不是很新奇呢?为此,在表示负数时就需要使用“二进制的补数”。补数就是用正数来表示负数,很不可思议吧。

    为了获得补数 需要将二进制每一位都取反然后加1

    对于溢出的位 计算机会忽略

    1+(-1)
    00000001 + 11111111 = 100000000 溢出会忽略 =0

    3-5 得出的结果是11111110 是一个负数 想知道结果 就需要再补数
    得到00000010 也就是-2

    2.5 逻辑右移和算术右移的区别

    逻辑右移就像霓虹灯一样 在最高位补0

    将 二进制当做有符号的数值时 在最高位补0或1
    为正数 0 若是用补数表示的负数 1

    将11111111的补数扩成16位 111111111111111111

    2.6 掌握逻辑运算的窍门

    计算就是算术 图形就是逻辑

    逻辑非 都取反
    逻辑与 都为1时结果1
    逻辑或 有一个是 1结果1
    逻辑异或 有一个1一个0结果为1

    3.0 计算机进行小数运算计算错误的原因

    1. 二进制数 0.1,用十进制数表示的话是多少?
      1x2 -1 = 0.5

    2. 用小数点后有 3 位的二进制数,能表示十进制数 0.625 吗?
      0.101

    3. 将小数分为符号、尾数、基数、指数 4 部分进行表现的形式称为什么?
      .浮点数是指把小数用“符号 尾数 × 基数的指数次幂”这种形式来表示。

    4. 二进制数的基数是多少?
      2

    5. 通过把 0 作为数值范围的中间值,从而在不使用符号位的情况下来表示负数的表示方法称为什么?
      excess系统表现

    6. 10101100.01010011 这个二进制数,用十六进制数表示的话是多少?
      整数部分和小数部分一样,二进制数的 4 位,就相当于十六进制数的 1 位。

    3.1 0.1累加100次也得不到10

    程序没错,计算机也没有发生故障,当然,C 语言也没有什么问题。可为什么会出现这样的结果呢?这时,如果考虑一下计算机处理小数的机制,就讲得通了。那么,计算机内部是如何处理小数的呢?

    3.2 用二进制表示小数

    在这里插入图片描述

    这一规律并不仅限于二进制数,在十进制数和十六进制数中也同样适用

    3.3 计算机运行出错的原因

    有一些十进制的数字无法转化为二进制

    3.4 什么是浮点数

    浮点数指的是用符号 尾数 基数 指数表示的

    双精度和单精度表示同一个数值时使用的位数不同 双精度的范围更大

    数据位0表示0或正 1表示负

    3.5 正则表达式和excess系统

    用特定的规则来表达是正则表达式

    整数只有一个1 其他都是0
    在这里插入图片描述
    excess表示将指数部分范围中间值设为0 从而使得不需要符号

    作为单精度浮点数的示例,表 3-2 中列出了指数部分的实际值和用 EXCESS 系统表现后的值。例如,指数部分为二进制数 11111111(十进制数 255),那么在 EXCESS 系统中则表示为 128 次幂。这是因为 255-127 = 128。因此,8 位的情况下,表示的范围就是 -127 次幂~128 次幂。

    在这里插入图片描述

    3.6 在实际的程序中进行确认

    十进制数 0.75 用单精度浮点数来表示就变成了 0-01111110-10000000000000000000000(图 3-7)
    0表示符号 011111110表示128 因为是excess系统 -1 100000000000表示1.100000000000000000

    接下来,我们继续使用该程序来看一下如何用单精度浮点数表示十进制数 0.1。运行后就会发现结果为 0-01111011-10011001100110011001101(只需将 data = (float)0.75; 的部分变成 data = (float)0.1; 即可)。这时,如果反过来计算一下这个数值的十进制数,估计大家又要冒汗了,结果居然不是 0.1。

    3.7 如何避免计算机计算出错

    原因之一是用浮点数表示小数

    将小数扩大成整数 最后除回来

    涉及到必须准确 用换整数或bcd方法

    3.8 十六进制

    在数值前只要加上0x 表示十六进制

    二进制4位表示一位十六进制 小数点后四位 补0就行

    4.0 熟练使用有棱有角的内存

    1. 有十个地址信号引脚的内存 IC(集成电路)可以指定的地址范围是多少?

    2. 高级编程语言中的数据类型表示的是什么?

    3. 在 32 位内存地址的环境中,指针变量的长度是多少位?

    4. 与物理内存有着相同构造的数组的数据类型长度是多少?

    5. 用 LIFO 方式进行数据读写的数据结构称为什么?

    6. 根据数据的大小链表分叉成两个方向的数据结构称为什么?

    4.1 内存的物理机制很简单

    内存ic中有 电源 地址信号 控制信号 数据信号 大量引脚 通过为其指定地址 来进行地址的读写

    1024个字节 = 1kb

    地址用来表示存储的区域 表示容量 例1kb

    在这里插入图片描述

    4.2 内存的逻辑模型是楼房

    一层存储一个字节 楼层号是地址

    在这里插入图片描述
    变量的数据结构不同 所占用的内存也不同

    4.3 简单的指针

    理解指针的关键在于理解数据结构

    计算机通常有32位内存地址 这样 指针变量的长度也是32位

    假设指针def都是100 那char d 就是100 地址的数据 short e是100和101的数据

    4.4 数组是高效使用内存的基础

    数组是指多个相同数据类型的数据在内存中连续排列的形式
    各个数据通过连续的编号区分开 叫索引
    索引和内存地址的转换是由编码器实现的

    char g【100】 表示 g【0】-g[99

    4.5 栈 队列 以及环形缓冲区

    栈和队列都可以不通过指定地址和索引来对数组的数据进行读写

    栈和队列的区别是数据出入的顺序是不同的
    栈是后入先出 队列是先入先出

    要在程序中实现 栈和队列 需要适当的元素数来定义一个用来存储数据的数组 以及对该数组进行读写的函数组

    队列一般是环形缓冲区

    一个圈 一边读出一边写入

    4.6 链表使元素的追加和删除更容易

    链表和二叉查找树都是不用考虑索引的顺序就可以对数据进行读写的方式
    通过链表可以更高效的对数组数据进行追加和删除处理
    二叉查找树可以更加高效的对数组数据进行检索

    数组的元素通常是按照索引顺序来引用的

    4.7 二叉查找树使数据搜索更有效

    二叉查找树是指在链表的基础上往数组中追加元素时 考虑数据的大小 将其分为左右
    新的大就在右边 小就左边

    二叉查找树可以使数据的搜索更有效率
    目标数据比较小就走左侧 大就右侧 加快速度

    5.0 内存和磁盘的亲密关系

    内存是利用电流来实现存储
    磁盘利用磁效应
    内存是高价加速
    磁盘低速廉价

    内存主要指主内存 负责储存cpu运行的程序指令和数据的内存
    磁盘主要是硬盘

    5.1 不读入内存就无法运行

    程序保存在存储机制 有序的被读出来实现运行
    被称为存储程序方式

    存储在磁盘里的程序要读入到内存才能运行

    5.2 磁盘缓存加快了磁盘访问速度

    磁盘缓存指把磁盘的数据储存到内存空间中 大大改善磁盘数据的访问速度

    web浏览器也是一个原理

    5.3 虚拟内存把磁盘当做部分内存使用

    通过虚拟内存 可以使内存不足时 也可以运行程序

    虚拟内存是吧磁盘的一部分作为假想的内存来使用 这和磁盘缓存是相对的

    为了实现虚拟内存 必须把实际内存和磁盘上虚拟内存的内容进行部分置换 并同时运行程序

    虚拟内存的方法有两种 分页式和分段式

    把运行的程序以页为单位 进行分割 在磁盘和内存之间置换

    5.4 节约内存的编程方法

    虚拟内存无法根本解决内存不足的问题

    1、dll文件使用函数共有
    dll文件 程序运行时可以动态运行library (函数和数据的集合)
    多个程序可以共用一个dll

    windows本身也有多个dll dll在exe文件不变的情况 升级可以更新

    2、通过调用_stdcall来减少程序文件的大小

    c语音中函数返回值是通过寄存器而不是栈

    栈清理处理 比起在函数调用方 在反复被调用的函数方更 程序更小
    函数前加_stdcall 就可以把栈清理用在被调用函数一方

    5.5 磁盘的物理结构

    磁盘是通过把表面划分为多个区域完成的
    划分方式有 扇区方式和可变长方式

    一般windows硬件软件都是扇区方式

    扇区是对磁盘进行物理读写的最小单位
    一般一个扇区是512字节

    windows在逻辑方面(软件)对磁盘进行读写的方式是扇区整数倍簇
    根据磁盘容量不同 一簇可以是一扇区 二 三
    软盘 一簇就是一扇区

    不同的文件不能储存在一簇中

    6.1 文件以字节为单位保存

    文件是将数据储存在磁盘等的形式
    文件以b 字节为单位储存的

    任何情况下 文件中的字节数据都是连续存储的

    6.2 RLE算法的机制

    把文件内容用数据*次数的表示方法就是rle算法
    经常用于压缩传真的图像

    6.3 RLE算法的缺点

    文本重复的很少

    6.4 通过摩尔斯编码来看哈夫曼算法的基础

    哈夫曼算法的关键在于 将多次出现的字符用低位表示 少的用多的表示
    不管是不满八位的哈斯超过八位的数据最后都是以八位位单位保存到文件中

    字符种类的不同 莫尔斯编码的长度也不同

    6.5 用二叉树实现哈夫曼编码

    哈夫曼编码指为为每个文件制定适合的编码体系 来进行压缩

    借助哈弗曼树构造编码体系 不用加区分符号就可以区分

    6.6 哈夫曼算法能够大幅提升压缩比率

    哈夫曼算法以位为单位对数据进行排查

    6.7 可逆压缩和不可逆压缩

    7.1 运行环境=操作系统加硬件

    操作系统和硬件决定程序的运行环境

    机器语言的程序被称为本地代码

    程序员编写的程序 编写阶段是文本文件 被称为源文件
    对源代码编译成本地代码

    7.2 windows克服了cpu以外的硬件差距

    应用软件可以控制计算机的硬件
    原因是 一 当时ms-dos的功能并不完善
    二 程序可以更快

    只要windows能运行 应用能在不同的机型运行

    windows中 键盘显示器不是向硬件发送指令 是向windows发送指令间接实现的

    即使是windows 也无法吸收cpu的差异 因为 市面上的windows软件都是 用特定的cpu本地代码完成的

    7.3 不同操作系统的api不同

    应用程序必须根据不同的操作系统来设计

    cpu的类型不同 机器语言也不同 相同 操作系统不同 应用程序向操作系统传递指令的途径也不同

    应用程序对操作系统传递指令的方式称为api

    同样的程序移到其他操作系统就需要重写api
    外围设备都是通过api

    同类型操作系统 不管硬件如何 api基本相同 所以在任何硬件都能运行

    cpu不同 所以本地代码不同 需要生成各cpu专用的本地代码的编译器 来对源代码进行编译

    程序是由操作系统和硬件决定的

    7.4 freebsd port 帮你轻松使用源代码

    unix操作系统FreeBSD 存在一种名为ports的机制
    能够结合当前运行的硬件环境来编译应用的源代码
    得到可以运行的本地代码

    若目标应用的源代码不在硬件中 就用ftp协议在网络下载代码

    port能够克服包括cpu的所有硬件系统的差异

    7.5 利用虚拟机获得其他操作系统环境

    7.6 提供相同运行环境的Java虚拟机

    java也是将源代码编译后使用 不过编译后不是机器代码而是字节代码
    java虚拟机就是一边把java字节代码转换成本地代码一边运行的

    不过不同java虚拟机之间无法完全替换 想让所有字节代码在所有java虚拟机都运行是很困难的
    运行速度不快

    7.7 BIOS和引导

    程序的运行环境中有名为bios的系统

    bios储存在rom中 是预先预存在计算机内部的程序
    bios除了磁盘 键盘显卡等基本控制程序外 还有启动引导程序的功能

    引导程序是储存在启动驱动盘起始区域的小程序

    开机后 bios会确认是否正常启动 没有问题就启动引导程序
    引导程序把在硬盘等记录的os加载到内存中运行
    启动程序是os的功能 但他不能启动自己
    而是通过引导程序

    8.1 计算机只能运行本地代码

    编码语言编写的程序被称为源代码 保存源代码的文件叫源文件

    不同语言编写的代码,转换成本地代码后 都变成一种语言了

    8.2 本地代码的内容

    本地代码人类无法理解

    将exe文件dump一下
    dump指把文件内容 每个字节用2位16进制数表示

    每个数值都表示一个命令或数据

    8.3 编译器负责转换源代码

    将源代码转换为本地代码的叫做编译器

    仅靠对照表无法生成代码 还需要语法分析 语句分析等

    编译器不仅和编程语言有关 还和cpu有关

    编译器也是程序的一种 所以也需要运行环境

    还有一种交叉编译器 生成和运行环境不同的cpu使用的本地代码

    8.4 紧靠编译无法获得可执行文件

    为了得到可运行的exe文件 编译后还需要进行链接处理

    将多个目标文件组合成一个exe文件叫链接
    运行连接的程序叫链接器

    8.5 启动及库文件

    目标文件记述得是同所有程序起始位置结合的处理内容 称为程序的启动
    即使程序不调用其他目标文件的函数 也必须链接 和启动结合起来

    库文件表示 把多个目标文件集合到一个文件中

    外部符号指其他目标文件中的变量或函数

    sprintf等函数 不是通过源代码形式 而是通过库文件形式和编译器一起提供的
    这样的函数被称为标准函数

    8.6 dll文件及导入库

    windows以函数的形式为应用提供了各种功能 这些形式的函数叫api(应用程序接口)

    windows中 api并不是储存在通常的库文件中 而是储存在dll文件的特殊库文件中

    dll是程序运行时动态结合的文件

    我们把类似于impr这样的库文件称为导入库

    与此相反 储存着目标文件的实体 并直接与exe文件结合的文件形式叫静态链接库

    储存着sprintf的目标文件的就是静态链接库
    sprintf通过指定格式把数值转换为字符串

    8.7 可执行文件运行时的必要条件

    exe文件是作为单独的文件储存在硬盘上的

    exe文件给变量和函数分配了虚拟的内存地址
    链接器会在exe文件的开头 追加转换内存地址的必要内容
    这个信息被称为在配置信息

    exe文件的在配置信息 成为了变量和函数的相对地址

    8.8 程序加载时会生成栈和堆

    exe文件的内容分为在配置信息 函数组 变量组

    程序加载到内存后 还会生成两个组 栈和堆

    栈是用来存储函数内部的临时使用的变量和 函数调用时所用的参数的内存空间

    堆是用来储存程序运行时任意生成的数据及对象的内存领域

    堆和栈的内存空间是程序在exe文件加载到内存时得到分配的
    内存中的程序是由 用于函数、变量、栈 堆的内存空间组成的

    栈对数据的代码 是编译器自动生成的
    堆是程序员控制的

    为了提高特定处理效率的程序统称为应用

    9.1 操作系统功能的历史

    具有加载和运行功能的监控程序 这就是操作系统的原型

    操作系统本身并不是单独的程序 而是多个程序的集合体

    9.2 要意识到操作系统的存在

    全面的程序员 掌握基本的硬件知识 并借助操作系统进行抽象化 大大提高编程效率

    应用的可执行文件指的是 计算机的cpu可以直接解释并运行的本地代码

    应用并不是直接控制硬盘 而是通过操作系统间接控制硬件

    9.3 系统调用和高级编程语言的移植性

    操作系统的硬件控制功能 通常是通过一些小的函数集合体的形式提供的
    这些函数及调用函数的行为统称为系统调用

    高级编程语言的机制就是 使用独自的函数名 再在编译的时候将其转换成对应操作系统的系统调用

    9.4 操作系统和高级编程语言使硬件抽象化

    9.5 windows操作系统的特征

    1、32位操作系统(64)
    可以毫无忌惮的使用32位的数据

    2、通过api函数集来提供函数调用
    windows是用过api的函数集来提供系统调用的
    api是联系应用程序和操作系统的接口 所以称为api

    win32中 函数的返回值和参数值都是32

    api通过多个dll文件来提供

    3、提供采用了gui的用户界面
    gui指的是通过点击显示器显示的窗口和图标等进行可视化操作的用户界面

    gui中的程序需要程序员制作出任何操作顺序都要能运行的应用

    4、通过wysiwyg 实现打印输出
    指的是显示器的内容可以通过打印机打印输出

    一个程序可以实现显示和打印

    5、提供多任务功能
    多任务指的是同时运行 windows是通过时钟分割技术来实现多任务功能的

    6、提供网络功能和数据库功能
    网络功能和数据库功能被统称为中间件而不是应用
    意思是处在操作系统和应用的中间
    操作系统和中间件在一起称为系统软件
    应用可以利用中间件

    中间件可以替换 但不容易

    7、通过即插即用实现设备驱动的自动设定
    即插即用指的是新设备连接后立刻就可以使用
    系统会自动安装和设定用来控制该设备的设备驱动程序

    可以任意追加api和设备驱动的机制使win变得非常灵活

    程序是操作系统 中间件 应用所有软件的总称
    程序员制作的应该都是应用

    10.1 汇编语言和本地代码是一一对应的

    使用助记符的编程语言叫汇编语言

    汇编语言编写的源代码最后也要转为本地代码才能运行

    汇编语言和本地代码是一一对应的
    本地代码可以转为汇编代码

    这功能叫反汇编

    c语言的源代码和本地代码不是一一对应的 所以还原到c几乎不可能

    10.2 通过编译器输出汇编语言的源代码

    大部分c语言编译器都可以把c转为汇编语言

    汇编语言源文件的扩展名 通常是.asm

    10.3 不会转换成本地代码的伪指令

    汇编语言的源代码 是由转换成本地代码的指令和针对汇编器的伪代码构成的

    伪指令负责把程序的构造和汇编的方法指示给汇编器 但无法汇编成本地代码

    段定义 程序的命令和数据的集合体 一个程序是由多个段定义构成

    栈和堆 的内存空间会在程序运行时生成

    在汇编语言中 相当于c语言函数的形式称为过程

    10.4 汇编语言的语法是 操作码加操作数

    汇编语言中存在多个操作数的情况下 要用逗号把他们分割开

    能够使用何种类型的操作码 由cpu的种类决定

    内存中存储着构成本地代码的指令和数据
    程序运行时 cpu会把数据和指令读出 储存到寄存器中进行处理

    寄存器不仅仅有存储功能 还有运算功能
    也有程序员无法直接操作的寄存器

    10.5 最常用的mov指令

    指令中最常用的是对寄存器和内存进行存储的mov指令

    10.8 函数内部的处理

    函数的参数是通过栈来传递 返回值是通过寄存器来返回的

    10.9 始终确保全局变量用的内存空间

    c中 在函数外部定义的变量是全局变量 内部是局部变量

    全局变量可以在任何地方引用 局部只能函数内部使用

    10.10 临时确保局部变量用的内存空间

    局部变量是临时保存在寄存器和栈中的

    寄存器空闲就先用 然后用栈

    10.11 循环处理的实现方法

    10.12 条件分支的实现方法

    10.13 了解程序运行方式的必要性

    为避免bug 可采用以函数等行为来禁止线程切换的锁定方法

    厉害程序员要有一次汇编代码编写的经验

    11.1 应用和硬件无关?

    硬件的控制是由windows全权负责

    利用操作系统提供的系统调用可以实现对硬件的控制
    系统调用被称为api 各api就是应用调用的函数
    这些函数的实体被储存在dll文件中

    11.2 支撑硬件输入输出的in指令和out指令

    window控制硬件时借住的是输入输出指令
    最具代表性的是in out
    这些指令也是汇编语言的助记符

    in指令通过指定的端口输入数据 储存在cpu内部的寄存器中
    out指令将cpu储存器的数据 输出到端口

    用来交换计算机与外围设备的电流特性的 ic 叫I\O控制器

    input\output
    i\o控制器有用来保存临时数据的内存 叫做端口

    一个i\o控制器可以控制多个外围设备
    各端口之间通过端口号区分

    11.3 编写测试用的输入输出程序

    11.4 外围设备的中断请求

    irq是中断请求的意思

    irq是用来暂停正在运行的程序 并跳转到其他程序 称为中断处理

    实施中断请求的是i\o控制器 实施的是cpu
    外围设备的中断请求会使用不同的其他编号 叫中断编号

    中断处理程序的第一步就是把寄存器的数据保存在栈中

    11.5 用中断来实现实时处理

    按照顺序调查多个外围设备的状态叫轮询

    11.6 dma可以实现短时间内传送大量数据

    dma指外围设备和主内存直接传输数据 省去了cpu的环节

    I\o端口号 dma irq是识别外围设备的三大要素

    11.7 文字及图片的显示机制

    显示器显示的信息一致储存在内存中 这内存叫vram

    计算机能处理的事 始终是把输入的数据计算 然后输出 这是不会变的

    12.1 作为工具的程序和为了思考的程序

    控制就是cpu和各种设备配合对数据输入输出

    程序一般有两个目的 用来当工具 用来代替人思考

    12.2 用程序来表示人的思考方式

    12.3 用程序来表示人类的思考习惯

    12.4 程序生成随机数的方法

    用公式产生的随机数具有一定的规律 称为伪随机数

    线性同余法
    时间作为随机数的种子

    12.5 活用记忆功能以达到跟接近人类的判断

    12.6 用程序表示思维模式

    展开全文
  • 通过这样与按钮执行命令功能再结合其他插件可以做成实时可变功能,比如添加好友、cdk兑换、购买物品数量等 9.需求者做出addon像插件那样,一个服可以装多个“window”插件,需求者改插件名...
  • LINGO软件学习

    2009-08-08 22:36:50
    原始集可以由显式罗列和隐式罗列两种方式来定义。当用显式罗列方式时,需在集成员列表中逐个输入每个成员。当用隐式罗列方式时,只需在集成员列表中输入首成员和末成员,而中间成员由LINGO产生。 另一方面,派生集...
  • HTML标签及属性总结

    2020-12-20 15:54:55
    HTML文本是HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。 HTML知识总结 加粗部分为较常用 文档 HTML:html文档标签 body:可见内容标签 head:是所有头部元素

    什么是HTML

    HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。

    HTML知识总结

    加粗部分为较常用的

    文档

    • HTML:html文档标签
    • body:可见内容标签
    • head:是所有头部元素的容器标签
      • title:标签元素会显示在窗口元素的标题上
      • link:定义html与外部文档之间的关系(常用于连接样式表)
      • style:为html文档定义样式信息
      • meat:元数据,不会显示,但会被机器识别,用于浏览器搜索引擎,获取页面的关键字

    标题

    • h1~h6:6个标签级别,从大到小

    段落

    • p:段落标签
    • br/:换行符
    • hr/:水平线

    连接

    • a
      • href属性:属性值是一个URL地址
      • target属性:定义目标显示方法(当前页/新页面)
      • name属性:命名锚

    图像

    • img
      • src属性:属性值是一个图像的绝对地址
      • alt属性:当一个图片还未加载出来时显示的文字

    属性

    • class属性:规定元素的类名
    • id属性:规定HTML元素的唯一id
    • style属性:规定元素的行内样式
    • title属性:规定关于元素的额外信息
    • lang属性:规定元素内容的语言
    • accesskey属性:规定激活(使元素获得焦点)元素的快捷键

    文本格式化

    • b:用于定义表示粗体的文本
    • em:用于定义表示强调的文本
    • strong:用于定义表示重要的文本
    • address:定义文档或文章的作者/拥有者的联系信息
    • bdi:允许设置一段文本,使其脱离其父元素的文本方向设置
    • bdo:修改默认的文本方向
    • blockquote:定义块引用
    • cite:定义作品(比如书籍、歌曲、电影、电视节目、绘画、雕塑等)的标题
    • i:用于定义表示斜体的文本
    • mark:用于定义带有标记的文本
    • meter:定义一个范围内的测量值/分数值
    • progress:定义运行中的任务进度
    • ruby:定义注音符号
    • del:用于定义已被删除的文本

    表格

    • caption元素:定义表格标题
    • col:为表格中一个或多个列定义属性值
    • colgroup:用于对表格中的列进行组合,以便于对其进行格式化
    • table:用于定义HTML表格
    • tbody:用于组合HTML表格的主体内容
    • td:用于定义HTML表格中的标准单元格
    • tfoot:定义表格的页脚(脚注或表注)
    • th:用于定义表格内的表头单元格
    • thead:定义表格的表头
    • tr:用于定义HTML表格中的行

    表单

    • button:用于定义一个按钮
    • datalist:规定了input标签可能的选项列表
    • fieldset:将表单内容的一部分打包,生成一组相关表单的字段
    • form:用于为用户输入创建HTML表单。用于向服务器传输数据
    • input:标签用于收集用户信息
    • label:为input元素定义标注(标记)
    • legend:用于为fieldset元素定义说明文字
    • optgroup:用于为下拉列表的选项进行分组
    • option:用于定义下拉列表中的一个选项
    • output:将计算结果输出显示(比如执行脚本的输出)
    • select:用于创建单选或多选菜单
    • textarea:定义多行的文本输入控件

    列表

    • 无序列表
      • ul:用于定义无序列表
      • li:用于定义列表中的项目
      • type:设置列表的标记
    • 有序列表
      • ul:用于定义有序列表
      • li:用于定义列表中的项目
      • type:设置列表的标记
    • 自定义列表
      • dl:定义了一个包含术语定义以及描述的列表
      • dt:用于定义列表中的项目(即术语部分)
      • dd:标签用于定义列表中项目的描述部分

    语义化结构

    • article:用于定义一篇文章,与页面其他部分无关
    • aside:定义侧边栏,通常是网页的说明、提示、引用、附加注释、相关连接、广告等内容
    • data:将一个指定的内容和机器可读的翻译联系在一起
    • details:用于定义用户可见的或者隐藏的需求的补充细节
    • dialog:定义一个对话框、确认框或窗口
    • div:定义HTML文档中的一个分隔区块或者一个区域部分(经常和css一起使用)
    • footer:标签定义文档或节的页脚
    • header:标签用于定义文档的页眉(介绍信息)
    • main:用于定义文档body或应用的主体部分
    • nav:用于定义页面的主导航功能
    • section:用于定义文档中的节
    • summary:定义detail元素的标题
    • span:用于组合文档中的行内元素

    多媒体

    • audio:定义声音,比如音乐或其他音频流
    • source:为picture,audio,video元素指定多个媒体资源
    • track:用于为HTML5的媒体文件添加字幕
    • video:标签定义视频,比如电影片段或其他视频流
    • canvas:定义图形,比如图表和其他图像
    • SVG文件可以通过或者嵌入HTML文档
    展开全文
  • 简便统一编程方法,对菜单、按钮、提示框等组成的传统人机交互方式产生了很大影响, 在多媒体创作、Web应用、教育软件、软件帮助系统和辅助工具制作等方面,具有广阔应用前景。 一、 Microsoft Agent技术...
  • 元素是XML文档基本组成部分。你要在DTD中定义一个元素,然后在XML文档中使用。元素定义语法为:<!ELEMENT DESCRIPTION (#PCDATA, DEFINITION)*> 说明: "<!ELEMENT" 是元素声明,说明你要定义是一个元素...
  • 其次,应用程序大体上哪些元素组成?也就是应用程序操作界面如何,如果可能,最好先用笔把程序界面画出来;然后是对程序界面中每一个元素属性进行设置;最后输入程序代码和调试。 2、前面我们所谈到命令...
  • 执行文件菜单中创建备份命令,弹出备份对话框,你可以指定备份文件名和路径、备份说明,还可以选择是否自动备份管理指定文件夹,是否保存检查和摘要,是否压缩备份和加密备份,这样你可以方便将你文件进行...
  • jpivot学习总结.doc

    2011-12-09 08:38:08
    allMemberName 所有成员的名字 , 也就是总的标题 , 例如: allMemberName= “全部产品” allLevelName 所有级别的名字,它会覆盖其下所有的 Member 的 name 和所有的 Level 的 name 属性的值。 allMemberCaption...
  • //得到所有窗口的标题 selenium.selectWindow("title="+titles[titles.length-1]); //选择最后打开的一个窗口 selenium.close(); //关闭最后打开的一个窗口 selenium.selectWindow("null"); //重新聚集在最开始...
  • 思科网络技术学院教程CCNA1

    热门讨论 2013-05-28 06:37:53
    wendell在网络界工作20多年,曾做过售前和售后技术咨询,教师和课程开发等工作,写过一些cisco press出版书,包括最畅销ccna icnd exam certification guide(中文版《ccna icnd认证考试指南》已人民邮电出版社...
  • 会计理论考试题

    2012-03-07 21:04:40
    34.对话框常见的组成元素不含___A___。 A、菜单栏 B、复选栏 C、标签 D、滚动条 35.有关Windows屏幕保护程序说法,正确是___A____。 A、可以减少屏幕损耗 B、可以节省计算机内存 C、可以保障系统安全 D、可以...
  • windows 程序设计

    2011-07-24 21:16:30
    MS-DOS提供给用户一种命令列接口,提供如DIR和TYPE的命令,也可以将应用程序加载内存执行。对于应用程序写作者,它提供了一组函数呼叫,进行文件输入输出(I/O )。对于其它外围处理-尤其是将文字或图形写到...
  • 不只是黑客,现在开源(Open Source)软件已经相当盛行,你常常也可以由其他有经验使用者身上得到好答案,这是件好事;使用者比起黑客来,往往对那些新手常遇到问题更宽容一些。然而,将有经验使用者视为黑客...
  • 6.1.1 使用recover...block命令的先决条件 214 6.1.2 使用recover...block命令 215 6.2 RMAN管理增强 217 6.2.1 用RMAN替换变量编写脚本 217 6.2.2 新RMAN配置参数 219 6.2.3 分段备份大文件 220 6.2.4 创建...
  • php高级开发教程说明

    2008-11-27 11:39:22
    行是干什么,它们在什么条件下执行,它们所要求设置。即使你缺乏背景知识,遇到了 一个错综复杂算法,你也能很快看出它所从事任务,以及它风格。 举个例子,然后说“照着做”总是很容易,但我想这一章...
  • PT80-NEAT开发指南v1.1

    2014-06-24 18:38:34
    应用程序关闭 .................................................................................................................................... 19 框架窗口 ...........................................
  • 中文版Excel.2007图表宝典 1/2

    热门讨论 2012-04-06 18:49:24
    1.3 图表的组成部分/9 1.4 创建图表基本步骤/11 1.4.1 创建图表/11 1.4.2 切换行和列方向/12 1.4.3 改变图表类型/13 1.4.4 应用图表布局/14 1.4.5 应用图表样式/15 1.4.6 添加和删除图表元素/15 1.4.7 格式化...
  • 中文版Excel.2007图表宝典 2/2

    热门讨论 2012-04-06 19:01:36
    1.3 图表的组成部分/9 1.4 创建图表基本步骤/11 1.4.1 创建图表/11 1.4.2 切换行和列方向/12 1.4.3 改变图表类型/13 1.4.4 应用图表布局/14 1.4.5 应用图表样式/15 1.4.6 添加和删除图表元素/15 1.4.7 格式化...
  • 多媒体教室

    2013-06-14 08:10:31
    当教师在未锁定学生机键盘、鼠标情况下广播或回放时,学生可以利用智能滚动窗口模式接收广播,此模式可以使学生轻松地跟着教师进行同步操作,边看边练习,使学习被动转为主动。 教师广播教学和语音教学时允许...
  • GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序目录是什么 GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件目录 OpenPrinter 打开指定打印机,并获取打印机...
  • 6.开机常按F8可以进入安全模式或是带DOS命令的安全模式。 33 第六章GHOST的备份与恢复 34 第七章 综合应用 44 一.文件的后缀名, *号任意的文件名 44 二.内存出错或是系统出错引起蓝屏 48 三.本机病毒删除不了,...
  • “LegalNoticeCaption”是指弹出窗口的标题,修改它的值。在这里自己可以随便起个名字如“我的计算机”。 "LegalNoticeText",是指你想在登录对话框中显示的文字,如改为“祝你今天工作愉快!”这样,以后启动电脑...
  • ASP.NET精品课程+源代码

    千次下载 热门讨论 2009-01-05 20:15:51
    使用可合并 HTML 页、脚本命令以及 COM 组件,可以创建交互式 Web 页和功能强大 Web 应用程序。应用ASP.NET知识可以方便、快捷建设网站。因此,掌握ASP.NET技术对于网站建设有着极其重要实用价值。 三、课程...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    � 良好盈利模式( 3/7 开),产业链条各方:运营商、制造商、独立软件生产商都可以获得不错利 益 。 将移动终端评价标准从硬件向软件转变,极大激发了软件开发者热情。 � Android 源代码遵循 Apache...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

命令的标题可以由什么组成