计算机中的信息=位+上下文(转)

  计算机中的信息=位+上下文。进一步,信息可以分为两大类:一类是数据,一类是指令。指令用来表明操作的动作,数据用来表明被操作的对象,这两者同时也构成了一个完整的程序。

  对于数据而言,我们先来谈整数的表示和运算。无符号编码表示无符号数,补码表示有符号数,相信大家对这两种编码应该是非常熟悉的(无符号编码没有符号位,补码的最高位表示符号位)。

  在整数的运算方面一共有两种,一种是算术运算,一种是逻辑运算。算术运算就指平常的加减乘数,当然要注意溢出、符号位等各种情况(这个讲起来的话太多了,而且我也担心自己讲不好,不懂的读者可以去翻翻书)。逻辑运算主要包括移位操作、或与非等,对于移位操作,一定要注意是算术右移还是逻辑右移,算法右移在所缺的位置要补齐符号位,逻辑右移要补齐零。

  由于浮点型的表示和运算,我也掌握的不是太好,读者自己翻书吧。

  对于指令而言,有传送指令、算术指令、逻辑指令、跳转指令以及支持过程调用和返回的指令。这些指令与c语言中的结构都是对应的,下面我会为大家讲解。

  传送指令主要是mov a, b这种形式,像c语言中的赋值操作以及取某个变量的值等最后都会转化为这种指令。传送指令一共有三种寻址方式。第一种方式为立即数寻址,形式为mov $imm, EM,表示将imm传送到寄存器或者存储器EM中;第二种方式为寄存器寻址,形式为mov Ea, EM,表示将寄存器Ea中的值传送到EM中;第三种为存储器寻址,形式为mov (Ea), EM,表示将寄存器中的值所表示的存储器位置的值传送到EM中,当然这个有很多变形,但本质是一样的。要注意到不能从存储器传送到存储器。

  在算术和逻辑指令中,像加减乘除、或与非、移位操作自不必说,在c语言中的这些操作与汇编中基本是没什么区别。我主要来说一下lea,即加载有效地址指令,它是mov指令的变形。指令形式为lea S, D,效果是将S的地址传送到D中,其中D必须为寄存器,像c语言中的求地址操作&就对应这种汇编语言。例如lea (Ea), Eb,在mov指令中表示将寄存器中的值所表示的存储器位置的值传送到Eb中,而在lea指令中表示将寄存器Ea中的值传送到寄存器Eb中。同时还可以用这个指令来进行一些算术运算。

  跳转指令主要包括无条件跳转和有条件跳转,无条件跳转的形式为jmp Label或者jmp *Operand,后者的跳转目标是从寄存器或者存储器中读出的。对于有条件跳转,只有在符合某些条件的情况下才会跳转,比如je、jne等,那么在汇编中是如何知道这些条件成立不成立呢?除了整数寄存器,CPU还包含一组单个位的条件码寄存器,比如CF(无符号溢出)、ZF(零)、SF(负数)、OF(有符号溢出),它们描述的是最近操作的属性,也有一些指令专门用来设置条件码而不修改其他寄存器,像test、cmp。跳转指令根据这些条件码的组合情况来决定是否跳转。在c语言中像if语言、for语言、while语言、switch语言最终都会翻译成跳转指令。

  最后一种指令就是支持过程调用和返回的指令。其中call指令用来过程调用,ret指令用来从过程调用中返回。c语言中的过程最后会翻译为汇编中的过程调用代码。在x86系统中一共有8个整数寄存器,其中有两个寄存器支持过程的实现,分别是栈指针%esp,帧指针%ebp。当执行call Label时(Label表示被调用的标记,也可以是*Operand的形式),计算机将返回地址(调用者的下一条指令地址)入栈,再将帧指针中保存的值(调用者的帧指针)入栈,最后将栈指针中保存的值传给帧指针,下面就开始执行被调用者中的指令,当执行ret返回时就是call指令的逆序,先将帧指针中保存的值传给栈指针,再push %ebp,将返回地址更新到程序计数器中,继续调用函数的执行。

http://www.cnblogs.com/yilinglingyi/p/4224918.html

时间: 2024-08-02 23:03:29

计算机中的信息=位+上下文(转)的相关文章

JAVA 读取计算机中相关信息

java读取 计算机 cup号 读取版本 显卡 ................. package com.swt.common.util; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.LineNumberReader; /** * 获取硬件信息 * @author luoxf * */

简单理解信息在计算机中的表示

信息是一个很宽泛的概念,说大了是与物质和能量鼎立的自然界三要素,这里仅仅涉及到计算机中的信息: 众所周知,对计算机自身而言,所有信息都是0/1二进制形式: 作为JavaEE/Android程序员,在开发过程中有时会遇到字符编码,进制转换这样的基础问题,虽然依靠经验或者网络搜索能很快实现功能,但每次都感觉对基本概念理解得不是很透彻,不如把现有的理解记录下来,以备后用: 信息在计算机中大致分为控制信息和数据信息: 控制信息是计算机系统内部运转用到的控制命令,例如读写命令,中断信号,片选信号,复位信号

计算机中信息表示

1.概述 现在的我们无时无刻不在接触计算机,即常说的电脑.计算机能干很多事,比如浏览网页.看视频.玩游戏.办公等,实现这些功能都需要计算机有信息存储和处理的能力.现代计算机的信息存储和处理都以二进制为基础,简单来说我们在电脑上看到的信息(比如文字.图片.音频.视频)都是以二进制表示的形式存储在计算机上或被计算机以二进制这种形式处理的.比如我们在计算机上的记事本中写日记,写入的是中文,在计算机中是以二进制编码(01010......)存储的,同时会给这些二进制编码指定一种解释方式,比如GB2312

关于计算机中的《补码》,公式:-n=~n+1 引伸:~n=-n-1

在计算机系统中,数值一律用补码来表示(存储).主要原因是使用补码可以将符号位和其他位统一处理:同时,减法也可以按加法来处理.另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃.补码跟源码的转换过程几乎是相同的. 补码概述 求给定数值的补码表示分以下两种情况: ⑴正数的补码 与 原码 相同. [例1]+9的补码是00001001.(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等.) ⑵负数的

计算机中位(bit), 字节(byte), 字(word)的关系

1.位(bit) 来自英文bit,音译为“比特”,表示二进制位.位是计算机内部数据储存的最小单位,11010100是一个8位二进制数.一个二进制位只可以表示0和1两种状态(21):两个二进制位可以表示00.01.10.11四种(22)状态:三位二进制数可表示八种状态(23)……. 2.字节(byte) 字节来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示. 字节是计算机中数据处理的基本单位.计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特(1B

计算机中的位运算

位运算是C/C++中的基本运算之一,即便是这样,它对大多数程序员来说是一个比较陌生的运算——大多数程序员很少使用位运算.本篇先简要介绍基本的位运算操作符及其用法(何时使用),然后介绍位运算符的几个典型应用: (1)      三种不用临时变量交换两个整数的实例,并分析每个实例的优缺点 (2)      进制转换,通过位运算实现将十进制数按二进制和十六进制输出,并得出一个通用的,用于将十进制按照2的n次方进制输出的程序. (3)      给出利用位运算实现的计算整数的二进制表示中有多少个1的实例

64位win7 安装apache 无法启动此程序 因为计算机中丢失 MSVCR100.dll

点击链接下载: Microsoft Visual C++ 2010 SP1 Redistributable Package (x64) 安装后就好了 64位win7 安装apache 无法启动此程序 因为计算机中丢失 MSVCR100.dll,布布扣,bubuko.com

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息. 说白了session就是一种可以维持服务器端的数据存储技术.session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能 3. 单纯的使用session来维持用户状态的话

计算机中的整数(原码、反码、补码)

系统中所有的信息——包括磁盘文件.存储器中的程序存储器中存放的用户数据以及网上落上传送的数据,都是由一串位表示的.区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文.比如,在不同的上下文中,一个同样的字节序列可能表示一个整数.浮点数.字符串或者机器指令. 计算机中的整数可以分为无符号整数和有符号整数两种类型.无符号整数不存在正负之分,在计算机中以其二进制真值的形式存放.而有符号整数由于有正负数的区分,表示相对复杂. 计算机中的符号数有三种表示方法,即原码.反码和补码.三种表示方法均有符号