精华内容
下载资源
问答
  • 1.设相对寻址的转移指令占两个字节,第一字节是操作码,第二字节是相对位移量(用补码表示),若CPU每当从存储器取出一个字节时,即自动完成(PC)+1一PC。 设当前PC的内容为2009H,要求转移到2000H地址,则该转移指令...

    (PC)+ 相对位移 =有效地址
    低字节地址为字地址:低位字节在低地址
    例:FFDFH这个十六进制数中,FF为高位字节,DF为低位字节

    在这里插入图片描述

    1.设相对寻址的转移指令占两个字节,第一字节是操作码,第二字节是相对位移量(用补码表示),若CPU每当从存储器取出一个字节时,即自动完成(PC)+1一PC。

    设当前PC的内容为2009H,要求转移到2000H地址,则该转移指令第二个字节的内容应为( A )。
    A.F5H 1111 0101 B.F7H 1111 0111
    C 08H 0000 1000 D.09H 0000 1001
    解答:
    转移指令是2字节,所以2009H转移后,变成2009H+2=200BH
    因此,200BH转到2000H,即(2000H – 200BH = - B)需要减11,-11用补码表示,-11的补码1111 0101,16进制是F5H,所以-11的补码为F5H,所以选择A项。

    2.假定采用相对寻址方式的转移指令占两个字节,第一字节是操作码,第二字节是相对位移量(用补码表示)。取指令时,每次CPU从存储器取出一个字节,并自动完成PC加1的操作。假设执行到某转移指令时(即取指令前)PC的内容为200CH,该指令的转移目标地址为1FBOH,则该转移指令第二字节的内容应为( C )。
    A. 5CH B.5EH C. A2H D. A4H
    解答
    因为转移指令占两字节,且取出一个字节时,PC+1,当取出这条指令后,PC的内容为200EH,根据相对寻址(PC)+相对位移=有效地址,则相对偏移量为1FB0H-200EH=DEH(最高位为符号位),转化为补码为A2H。

    3.设相对寻址的转移指令占两字节,第一字节是操作码,第二字节是相对位移量(用补码表示),每当CPU从存储器取出一字节时,即自动完成(PC)+1→PC。若当前PC的内容为2008H,要求转移到2001H,则该转移指令第二字节的内容为(D)。
    A 05H B 07H C.F8H D.F7H
    解答:
    由于转移指令占两字节,当PC的内容为2008H时,执行完转移指令后PC的内容为200AH,所以有2001H-200AH=-9H,用补码表示为F7H。由于转移指令占两字节,当PC的内容为2008H时,执行完转移指令后PC的内容为200AH,所以有2001H-200AH=-9H,用补码表示为F7H。

    4.设相对寻址的转移指令占3个字节,第1个字节为操作码,第2,3个字节为相对位移量(补码表示),当CPU从存储器中取出一个字节时完成PC+1→PC。数据存储方式为低位字节所在地址为字地址。

    设当前PC=1000H,要求转移到100FH,则该转移指令第2,3个字节的内容为(B)。
    A. 000CH B. 0C00H C. FF0CH D. 0CFFH
    解答:
    PC当前值为1000H,该指令取出后PC值为1003H,要求转移到100FH,即相对位移量为100FH-1003H=12,正数的补码和原码相同即 00 0CH。低位字节在低地址(第二字节为低地址),000C中,00为高位字节,0C为低位字节,故该转移指令的第二字节为0CH,第三字节为00H(0C00H)。

    5.设相对寻址的转移指令占3个字节,第一字节为操作码,第二,三字节为相对位移量(补码表示)。而且数据在存储器中采用以低字节地址为字地址的存放方式。每当CPU从存储器取出一个字节时,即自动完成(PC)+1PC。

    1. 若PC当前值为240(十进制),要求转移到290(十进制),则转移指令的第二、三字节的机器代码是什么?
    2. 若PC当前值为240(十进制),要求转移到200(十进制),则转移指令的第二、三字节的机器代码是什么?

    解答

    1. PC当前值为240,该指令取出后PC值为243,要求转移到290,即相对位移量为290-243=47,转换成补码为002FH。低位字节在低地址(第二字节为低地址),002F中,00为高位字节,2F为低位字节,故该转移指令的第二字节为2FH,第三字节为00H。
    2. PC当前值为240,该指令取出后PC值为243,要求转移到200,即相对位移量为200-243=-43,转换成补码为FFD5H。由于数据在存储器中采用以低字节地址为字地址的存放方式,故该转移指令的第二字节为D5H,第三字节为FFH。

    6.设相对寻址的转移指令占3个字节,第1个字节为操作码,第2,3个字节为相对位移量(补码表示),当CPU从存储器中取出一个字节时完成PC+1→PC,数据存储方式为低位字节在高地址。设当前PC=2005H,要求转移到2000H,则该转移指令第2,3个字节的内容为( )。
    A. 0008H B. 0800H C. 08FFH D. FF08H

    展开全文
  • RISC-V处理器:1.取指令 RTL 代码分析

    千次阅读 2019-03-08 21:51:25
    处理器从存储器中取出指令的目标是:快速和连续不断 指令分为普通指令,非分支跳转指令和分支跳转指令 对于非分支跳转指令,即便是对于地址不对齐的32位指令,也要求能够连续不断的从一个周期内读...

    RISC-V处理器:1.取指令 RTL 代码分析

    1. 取指特点

    1. 指令在存储空间中所处的地址,称为它的指令PC(Program Counter)
    2. 取指是指处理器将指令,按照其指令PC,从存储器中读取出来的过程
    3. 处理器从存储器中取出指令的目标是:快速连续不断
    4. 指令分为普通指令非分支跳转指令分支跳转指令
    5. 对于非分支跳转指令,即便是对于地址不对齐的32位指令,也要求能够连续不断的从一个周期内读取出来
    6. 对于分支跳转指令,要能够迅速判断是否需要跳转。若果需要跳转,则从新的指令PC地址处快速取出指令。

    2. 快速取指

    首先应该保证存储器的读延迟越小越好:

    1. 片外DDR或者Flash存储器可能需要几十个周期的延时
    2. 片上的SRAM也可能需要几个周期的延时

    我们采取 ITCM 和 I-Cache 的方法:

    1. ITCM(Instruction Tightly Coupled Memory)
      指令紧耦合存储器,指配置一小段容量很小(即使KB)的存储器(通常为SRAM),用于存储指令,且在物理上,举例处理器核很近,并且专属于处理器核,因此能够取得很小的访问延迟。这种方式只能用来存放容量大小有限的关键程序指令;
    2. I-Cache(Instruction Cache)
      指令缓存,利用软件程序的时间局部性和空间局部性,将容积量巨大的外部指令存储器空间,动态映射到容量有限的指令缓存中,将访问指令存储器的平均延迟降低到最小。但是因为缓存的容量有限,因此访问缓存存在着相当大的不确定性。
    TIPS:

    大多数的低功耗处理器应用场景都应用实时性较高的场景,因此更加倾向于使用延迟确定的 ITCM 。

    3. 处理非对齐指令

    非对齐指令:32位指令PC数值无法被4整除
    因为作为存储器的 ITCM 或者 I-Cache 往往使用SRAM,而SRAM读端口的宽度是固定的。对于32位SRAM,一个时钟只能读出1个32位的数据,如果一个32位的长指令地址不对齐,则需要两个时钟周期才能取出,之后各取一部分,拼接为真正需要的32位指令。
    我们要做的,就是令处理器在一个周期内取出这条指令。以普通指令非对齐和分支跳转指令讨论:

    1.普通指令的非对齐

    这种指令可以按顺序取指,地址连续增长,利用剩余缓存(Leftover Buffer)保存上次取指令没有用完的比特位,供下次使用。

    2. 分支跳转指令的非对齐

    如果跳转的目标地址和32位地址边界不对齐,并且需要取出一个32位的指令字,剩余缓存不能使用,因为剩余缓存只能在按顺序取指的情况下,才能够提前预存上次没有用完的指令字。
    常见的解决方式是,采用多体化(Bank)的SRAM进行指令存储。其中,奇偶交错的方式最为常见。使用32位宽的SRAM交错进行存储。这样地址不对齐的32位地址,在一个周期内,可以同时访问两块SRAM,取出两个连续的32位指令字。各取一部分拼成真正需要的32位指令字。

    4. 处理分支指令

    RISC-V架构处理器的分支指令类型:

    1. 无条件跳转/分支指令:
      无条件直接跳转指令:jal(jump and link):

       jal x5,offset // 此为汇编示例,jal使用编码在指令字中的20位立即数(有
       			    // 符号)作为offset偏移量。offset x 2,之后与当前指令所在地址
       			    // 相加
      

      无条件间接跳转指令: jalr(jump and link-register) :

       jalr x1,x6,offset // 将指令字中的12位立即数作为偏移量(offset),
                         //与另一个寄存器索引的操作数相加,得到最终的跳转目标地址
      
    2. 带条件跳转/分支:
      带条件直接跳转指令
      带条件间接跳转指令

    对于分支指令,处理器采用分支预测方式:
    是否需要跳转,简称为预测方向。这是对带条件跳转语句来说的。
    如果跳转,目标地址是什么?简称为预测地址。

    5. 简单的带条件直接跳转指令

    beq:两个整数操作数相同则跳转
    bne:两个整数不相等则跳转
    blt:第一个有符号数小于第二个有符号数,则跳转
    blut:第一个无符号数小于第二个无符号数,则跳转
    bge:第一个有符号数大于第二个有符号数,则跳转
    bgru:第一个无符号数大于第二个无符号数,则跳转

    展开全文
  • 读世界是数字的(3)

    2016-12-18 15:26:00
    取指令:就是从存储器中取出指令 译码:即对指令进行译码操作,让指令变成计算机可以进行操作的二进制符号 执行:从存储器中取出相关数据并执行上一步译码后的结果 关于缓存 存在的原因:因为...

    第三章——CPU

    CPU的功能

    • 从RAM中获得操作数据,再把结果保存回RAM,即计算后又存储
    • 控制其他组件,例如鼠标,键盘等外围设备输入的数据得到响应
    • 控制和协调连接到计算机的其它所有器件

    CPU的操作过程

    • 取指令:就是从存储器中取出指令
    • 译码:即对指令进行译码操作,让指令变成计算机可以进行操作的二进制符号
    • 执行:从存储器中取出相关数据并执行上一步译码后的结果

    关于缓存

    • 存在的原因:因为CPU处理指令的速度非常快,但是从RAM中取出数据则相比于处理的速度而言就慢很多,因此CPU就需要等待,而等待是浪费时间的,因此就诞生了缓存(本质上就是个存储器,但速度相比RAM而言快了很多),把最近经常需要用到的信息先保存到缓存上,这样就大大缩短了等待时间

      当然让CPU跑得更快也有其他方法,例如,并行执行多条互不干扰、互不依赖的指令;同时运行多个CPU;让CPU交替地取得和执行指令(类似流水线)

    • 缓存不能无限延长,新的内容会代替旧的内容
    • 缓存的思想:现在用到的东西不久后还会用到或者还可能用到与之邻近的东西就用缓存

    图灵测试

    • 图灵机与通用图灵机:图灵机即可以完成任何计算的计算机;通用图灵机则是一种能够模拟其他图灵机的图灵机
    • 图灵测试:即计算机能否体现出人工智能。计算机与人和另外的一个提问者进行交流,若不能很好地辨别哪个是人哪个是机器,则计算机体现了人工智能。
    • 反向图灵测试:例如扭曲变形的文字、数字、字母,现在的验证码就是使用了这点来区别人和计算机,因为人比计算机更擅长识别文字。

    转载于:https://www.cnblogs.com/rafell/p/6194564.html

    展开全文
  • Linux:进程

    2020-06-12 17:08:36
    冯诺依曼 ...计算机工作的时候能够自动从存储器中取出指令然后执行。 程序和进程 进程是操作系统分配时间片、内存等资源的基本单位(最小单位),每个进程都有自己的状态、有独立的地址空间。 ...

    冯诺依曼

    • 程序和数据都以二进制存储在存储器中,存放在存储器的位置由存储器指定。
    • 计算机工作的时候能够自动从存储器中取出指令然后执行。
      在这里插入图片描述

    进程

    进程是操作系统分配时间片、内存等资源的基本单位(最小单位),每个进程都有自己的状态、有独立的地址空间。

    • 程序:代码 + 数据
    • 进程:代码 + 数据 + PCB(操作系统通过PCB感知一个进程的存在,PCB能够将代码和数据有效地整合)
    • ps aux 查看进程状态

    linux的进程状态:

    • R 正在运行或就绪
    • S 可中断的睡眠状态
    • D 不可中断睡眠
    • Z 僵尸状态
    • T 停止状态

    创建进程fork():

    1. 给进程分配pid,创建PCB
    2. 复制父进程的环境
    3. 为新进程分配资源
    4. 拷贝父进程的地址时间内容
    5. 放入就绪队列

    fork()

    创建一个子进程,一次调用两次返回,父进程的返回值是子进程的的进程id,子进程的返回值是0。

     //创建一个进程
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
     int main(void){
         printf("before fork()\n");
         pid_t pid = fork();//-->创建进程
         if(pid == 0){
             printf("child porcess: gtepid() = %d, return value = %d\n", getpid(), pid);
         }else{
             printf("parent porcess: gtepid() = %d, return value = %d\n", getpid(), pid);
         } 
         getchar();
     }
     //运行结果
    /*
    before fork()
    parent porcess: gtepid() = 3944, return value = 3945
    child porcess: gtepid() = 3945, return value = 0
    */
    

    多进程调试:set-fllow-mode parent/child (默认走父进程)

    //设置进程之跑固定CPU上
     #define _GNU_SOURCE
     #include <stdio.h>
     #include <stdlib.h>
     #include <unistd.h>
     #include <sched.h>
     
     int main(void){
         cpu_set_t cpu;
     
          pid_t pid = fork();
          if(pid == 0){
              CPU_ZERO(&cpu);//把cpu变量清空
              CPU_SET(0, &cpu);//把变量cpu放到0号cpu上
              sched_setaffinity(0, sizeof(cpu_set_t), &cpu);//设置进程之跑固定CPU上
             while (1){
             }
         }else{
             CPU_ZERO(&cpu);
             CPU_SET(1, &cpu);
             sched_setaffinity(0, sizeof(cpu_set_t), &cpu);
             while (1){
             }
         }
     }
    

    错误处理

    • int setjmp(jmp_buf env);保存程序堆栈信息的上下文到变量env,首次调用返回值为0
    • void longjmp(jmp_buf env, int val);恢复env保存的点,并设置setjmp()的返回值为val
    • char *strerror(int errnum);返回错误号的字符串
    #include <stdio.h>
    #include <setjmp.h>
    #include <stdlib.h>
     
    jmp_buf buf;
     
    void func(int s){
        printf("func(int s)\n");
        if (s == 1){
             longjmp(buf, 1);//跳回20行,setjmp(buf))返回值变为1
         }
    
    	printf("fun finsh\n");
    }
     
    int main(void){
    	 int r;
    	 printf("int main(void)\n");
     
         if ((r = setjmp(buf)) == 0){//首次调用返回值为0
             func(1);
         }else if (r == 1){
             printf("exception 1\n");
         }
    
         printf("main finish\n");
    }
    /*运行结果
    int main(void)
    func(int s)
    exception 1
    main finish
    */
    
    展开全文
  • 28多模块存储器原理

    2021-01-13 08:01:37
    CPU的速度比存储器块,若同时从存储器中取出n条指令,就可以充分利用CPU资源,提高运行速度。 1、 单体多字存储器:存储器中只有一个存储体,每个存储单元存储m个字,总的宽度也为m个字。一次并行读出m个字,地址...
  • 虚拟存储器

    2019-10-08 05:00:07
    计算机中设置虚拟存储器的目的是扩大用户的编程空间。 在主存之外增加第二级大容量辅存,页式虚拟存储器把主存和辅存都分成大小相同...其后CPU根据程序的局部性原理,可多次主存这个页面中取出需要的有关指令和数...
  • 简述冯诺依曼计算机体系结构的基本思想 答冯诺伊曼基本设计思想为 以二进制形式表示指令和数据 程序和数据事先存放在存储器中计算机在工作时能够高速地从存储器中取出 指令并加以执行 由运算器控制器存
  • C语言内存分配

    2020-02-27 19:57:18
    先介绍一下计算机组成和基本原理 一、计算机的组成 ...计算机的指挥中心,它通过地址访问存储器,从存储器中取出指令(程序),并指出下一指令在存储器中的位置,将取出的指令经指令寄存器送往指令...
  • 浅谈冯诺依曼体系

    2019-09-28 00:09:53
    冯诺依曼体系   下图就展现了一种类型的计算机的框架。该计算器由一个中央处理单元(CPU)和一个存储器组成。存储器存储数据和指令,并且根据所给的地址对...CPU先从存储器中取出指令,然后对指令进行译码,最后执...
  • 计算机硬件基础

    2018-05-24 22:57:00
    1. 中央处理器CPU CPU由控制器、运算器和...控制器从存储器中取出指令(比如从内存或磁盘中取出指令) 然后将指令交给运算器运算,将运算结果翻译成二进制 最后交给主板上的各个硬件,控制各个组件根据指令...
  • 2.将程序(数据和指令序列)预先存放在主存储器中(程序存储),使计算机在工作时能够自动高速地从存储器中取出指令,并加以执行(程序控制); 3.由运算器、控制器、存储器、输入设备、输出设备五大基本部件组成...
  • ③计算机在工作时能够自动从存储器中取出指令加以执行 ... 控制器发送地址给存储器,存储器吧地址里面存储指令返回给控制器,控制器获得指令并编译然后 让运算器运行,运算器得到命令进行执行并把执行状态返回...
  • 目前绝大多数计算机硬件系统仍然是冯·诺依曼“存储程序”式结构,思想核心是将编好的程序预先存入主存,然后启动计算机工作,计算机在不需人工干预的情况下,高速的主存中取出指令进行执行。事实上,在计算机中,...
  • CPU的实质包括运算器和控制器。 一旦程序进入存储器后,就...控制器必须具备能自动的从存储器中取出指令的功能。 2、分析指令 其一、分析此指令要完成什么操作,即控制器需发出什么操作命令。 其二、分析...
  • 要想完全理解C语言的内存分配,必须要知道计算机的组成和基本原理。...2.控制器计算机的指挥中心,它通过地址访问存储器,从存储器中取出指令(程序),并指出下一指令在存储器中的位置,将取出的指令经指
  • 程序和数据事先存放在存储器中,计算机在工作时能够快速的从存储器中取出指令加以执行。 由运算器、控制器、存储器、输入设备,输出设备五大部件组成计算机硬件系统 微机体系结构的特点之一就是采用总线结构,通过...
  • 冯诺依曼原理: “存储程序控制”原理是19454年由美籍匈牙利数学家冯诺依曼提出的,...将程序(数据和指令序列)预先存放在主存储器中(程序存储),使计算机在工作时能够自动高速地从存储器中取出指令,并加以执...
  • 计算机硬件-CPU

    2019-10-04 18:40:11
    3.将程序(数据和指令序列)预先存放在主存储器中,使计算机在工作时能够自动高速地从存储器中取出指令并加以执行 CPU 作用 CPU的工作主要是运算和管理,分别是算数逻辑单元与控制单元。其中算数逻辑单元主要负责...
  • 指令是保存在存储器中,CPU运行时,先从存储器中取出指令,然后就需要对指令进行“译码”。就是翻译指令码,看它到底是要做什么操作和运算,译码后产生各种控制标志,作为控制器(Control Unit)的输入。 输入:一...
  • 东北大学-计算机硬件技术基础 计算机系统的物理组成 ...计算机在工作时能自动从存储器中取出指令并执行。 总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线 地址总线(Address Bus,AB),...
  • 计算机系统: 硬件系统:运算器 控制器 存储器 输入设备 输出设备 五个部分组成 其中 中央处理器CPU=运算器+控制器 主机 = 中央处理器 + 主...2,控制器:负责从存储器中取出指令,并对指令进行编码,并根据指令译...
  • 第十三周课后总结

    2019-12-01 13:36:23
    (2)将程序(数据和指令序列)预先存放在主存储器中(程序存储),使计算机在工作时能够自动高速地从存储器中取出指令,并加以执行(程序控制)。 (3)由运算器、控制器、存储器、输入设备、输出设备五大基本部件...
  • 背景介绍 第一台通用电子计算机 ENIAC EDVAC -> 冯诺伊曼关于EDVAC的报告草案,即是冯诺伊曼结构计算机的起始 ...计算机在工作时能够自动地从存储器中取出指令加以执行 在EDVAC之前,如ENIAC计算机,采用的是10进
  • 一套完整的计算机系统分为:计算机硬件,操作系统,应用软件,如下图。因而我们的python编程之路分为计算机硬件基础,...控制器通过地址访问存储器,从存储器中取出指令,经译码器分析后,根 据指令分析结果产生相...
  • 操作系统笔记之基础

    2017-11-30 17:10:10
    设定一个程序指针PC指向指令,由PC指针从存储器中取出指令,交给运算器和控制器,程序指针PC自动指向下一个指令。那么问题:打开电源以后,计算机执行的第一条指令是什么? x86pc,计算机刚打开时
  • CPU的结构与功能

    2020-02-13 14:50:04
    文章目录CPU的功能1、取指令2、分析指令3、执行指令 CPU的功能 CPU实质包括运算器和控制器两大部分,对于冯诺依曼结构的计算机而言,一旦...控制器必须具备能自动的从存储器中取出指令的功能。为此,要求控制器能...
  • C++面试题(~01)

    2017-08-07 22:38:39
    执行前,将需要的程序和数据先放入存储器(PC为内存),当执行时把要执行的程序和要处理的数据按顺序从存储器中取出指令并一条一条执行,称作顺序执行程序; 计算机硬件由运算器、控制器、存储器、输入设备和输出...
  • 以程序计数器PC中的内容作为地址,从存储器中取出指令并放入指令寄存器IR; 同时PC值加4(假设每条指令占4个字节),指向顺序的下一条指令; 指令译码/读寄存器周期(ID) 对指令进行译码,并用IR中的寄存...
  • 嵌入式微处理器体系结构

    千次阅读 2012-03-19 17:36:45
     处理器执行指令时,先从存储器中取出指令解码,再取出操作数执行运算,即使单条指令也要耗费几个甚至几十个周期,在高速运算时,在传输通道上会出现瓶颈效应。  CPU通过程序计数器PC提供的地址信息,对存储器...
  • 控制器:从存储器中取出指令、翻译指令、分析指令,向其他部件发出控制信号,指挥计算机各部件协同工作; 存储器:存放数据和程序; 输出设备:将经过计算机处理的数据输出,输出的形式包括字符、图片声音等; 输入...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 319
精华内容 127
关键字:

从存储器中取出指令