通过机器码程序理解冯诺依曼体系

小说:手机自动挂机软件赚钱作者:建卓秉更新时间:2018-12-16字数:48089

四天、五天、六天,李景隆终于熬不住,舔了一下嘴巴勉强从地上站起,各营每天都有饿死的人数报上来,死亡的人数在不断的攀升。

日赚1000元项目

“以你现在的实力能不能推演出兽神的位置?”布玛想到什么立刻问道。
而叶扬则是和风从云分开了,风从云去找食物,叶扬则是去找水喝。其实这两样都很简单,首先是食物,守着这么一座大宝库,那鱼多的不可胜数,还能找不到食物吃吗。然后自然就是淡水了,这也很简单,叶扬挥手制造出了一个大容器,然后将海水放进去,再加热冷却,收集那些水蒸气,虽然颇为麻烦,但是很快便是弄出了不少淡水。

随着几个鬼子军曹手中的东洋刀朝前面狠狠一指,大批鬼子分成多路猫腰朝阵地扑上来,这次鬼子冲锋可没有咋呼呼的乱喊乱叫,而是以三五人一组,相互掩护这朝阵地扑上来。

通过机器码程序理解冯诺依曼体系


冯诺依曼体系结构


简介

现今所有的商用计算机都是基于冯诺依曼体系的计算机。

冯·诺依曼体系结构冯·诺依曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存,二者地位是相等的。

通过机器码程序理解 冯诺依曼 计算机

下面将通过基于Pep8虚拟计算机运行的机器码程序理解冯诺依曼计算机。(Pep8是用于教学的开源小型计算机,可以执行机器码和汇编程序 下载链接 http://computersystemsbook.com/5th-edition/pep9/ )

首先介绍 冯诺依曼周期

一个冯诺依曼周期包含 5 个操作:

  • 取指
  • 译码
  • 增加PC(程序计数器)
  • 执行指令
  • 重复
    如图:
      加载机器语言到内存
    初始化寄存器(PCSP,IR等)
    do {
    取下一条指令
    解码 指令指示符
    递增PC
    执行取出的指令
    } while(没有执行停止指令)
指令和寄存器

每种计算机都有自己的指令集,固化在cpu中。Pep8有39条指令,这些指令分为两类,由一个字节(8位二进制)组成的 指令指示符,或者由一个 指令指示符 和一个由一个字(两个字节)组成的 操作数指示符 组成。
Pep8中包含不限于PC(程序指令计数器),SP(栈指针计数器),IR(24位指令寄存器(3字节))等寄存器。

将要用到的指令:

    0000 0000 停止执行
0100 1aaa 字符输入
0101 0aaa 字符输出
注(aaa表示一个字段,a可为01,表示寻址方式)


一个字符输出程序
    地址         机器语言(bin)
---- -------
0000 0101 0001 0000 0000 0000 0111
0003 0101 0001 0000 0000 0000 1000
0006 0000 0000
0007 0100 1000
0008 0110 1001

地址 机器语言(hex)
---- --------
0000 510007
0003 510008
0006 00
0007 48
0008 69

输出
----
Hi

这两段代码是等价的,只不过是前者更利于计算机识别和读取,后者利于人类,但是计算机最终是要保存二进制的序列,而非其他任何形式的结果。(注:地址为了便于表示使用四位十六进制数表示)

分析程序

首先将上面代码输入Pep8虚拟机后,首先要做的是,装载。即将每条指令(每行右侧序列)装载到左侧序列标识的地址。如果装载的指令是一元指令即 指令指示符 ,那么他占据一个内存单元即一个字节。如果指令是一个二元指令也即 操作数指示符 那么他占据三个内存单元,所以第一条指令被装载到 0000、0001、 0002 所标识的内存。
当所有的指令装载完成后,也就意味着一个程序在内存中,并处于可执行状态。注意一点,这个程序的指令在内存中是逐条紧邻的。

执行程序

根据 冯诺依曼周期,程序是顺序执行的,所以初始化程序指令计数器PC,

    PC: 0000  

CPU根据PC的值作为内存地址索引,找到该内存并将该内存的值(二进制序列)复制,通过总线传输到CPU的指令寄存器IR中,

    IR:Mem[PC]       // 类比 数组索引值 a[i];

此时CPU解释IR中的指令,指令:0101 0001 0000 0000 0000 0111
我们来解释一下这个指令,首先这是一个二元指令,所以前一个字节是指令指示符,后两个字节是操作数指示符。第一个字节 0101 0001 (原指令模式 0101 0aaa)代表以直接寻址的方式输出字符,后两个字节指示要输出的字符的地址,可以看出,这块地址就是之前我们装载程序时 0007 这块内存,而内存中的值正是 ‘H’ 的ASCII码值 48 。到此我们可以看出,其实 程序 和 程序的数据 对于计算机来说没有区别,都是保存在内存中的二进制数,计算机只单纯的将他们作为二进制数处理,而是作为 指令 被解释还是作为 数据 被解释是需要我们来定义。
接下来继续程序的执行,当获取到 操作数指示符 标识内存中的值后,将这个值发送到输出设备,此时由输出设备负责将该二进制数解释为字符。
下一步,根据取出指令的长度进行PC的自增。重复上述过程,直到

    PC0006

索引值为指令

    0000 0000  ;结束指令

程序结束。

当前文章:http://zxqss.com/ask/question_88997.html

发布时间:2018-12-16 02:41:07

兼职招聘平台 用电脑可以做哪些兼职 电子行业创业项目 当兵体检项目有哪些 小型工厂项目 2018年致富小项目 没有本钱做什么 微信试玩赚钱是真的吗

编辑:帝马平

我要说两句: (0人参与)

发布