矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 4113|回复: 17

请问计算机指令集是放在CPU的什么地方,具体形式是逻辑电路还是ROM中的编码?

[复制链接]
     
发表于 2020-1-15 14:52:07 | 显示全部楼层 |阅读模式
最近在看计算机的书籍,突然想到一个问题,CPU中的指令是个怎样的存在形式,是一堆复杂的逻辑电路还是ROM中的编码?请知道的老师给解释下。
     
发表于 2020-1-15 15:28:30 | 显示全部楼层
指令实际上是一组逻辑变量状态,通过CPU里的逻辑电路来实现数据操作,指令集实际是对CPU逻辑电路有意义的变量状态组集合,不用存储在哪
回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-1-15 16:49:54 | 显示全部楼层
楼主所说的两种形式都有。
由硬件组成的规范化的逻辑电路操作,一般都是等长的代码来控制开关,代码中的各个位的电平,决定了对应硬件的开关状态。而这个控制代码的读入,由接口的移位寄存器来完成。通常情况下,代码由两字节实现,前一字节是指令,后一字节是参数。这种指令的存在方式是隐含在电路中的,与具体的硬件结构有关。
另一种就是固化在CPU中的小程序,称为“微程序”,用来将读入的指令字节变换成对应的硬件操作。这种方式是在cpu复杂性增加以后的做法,能够适应不断增长的cpu体积。


回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-1-15 16:35:05 | 显示全部楼层
对于规模比较小的CPU,多数是硬连接决定的。也就是已经固定的逻辑电路。而规模大的CPU还会有一个微指令的设计,那个是一小块ROM,把一条复杂指令翻译成多条微指令再送去ALU执行
回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-1-15 15:07:16 | 显示全部楼层
指令集在cpu里,是cpu硬件单元设计时固有的,不是写进去的代码
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 15:40:06 | 显示全部楼层
指令在内存中,双击EXE,之后PE结构会创建文件的内存映射
根据基址,段(节表),虚拟地址来进行映射,完了交给CPU去处理
多核CPU或者多CPU架构的话这种处理比较复杂,依赖于NUMA机制处理
Linux下同理,只不过是ELF。
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 15:53:54 | 显示全部楼层
引导程序的话,大同小异
以MBR程序为例,BIOS先读取硬盘的0柱面0磁道1扇区,完了加载到内存0:7c00
之后jmp到内存地址0:7c00执行引导程序。所以指令也是在内存中。
DOS的话,执行COM之后,程序会装载到 随机段:100内存,之后跳转过去,把代码交给CPU执行。
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 16:00:49 | 显示全部楼层
是一堆复杂的逻辑电路
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 16:06:42 | 显示全部楼层
本帖最后由 JuncoJet 于 2020-1-15 16:10 编辑

指令集的话就是所有支持的指令,CPU相当于解释器,JAVA VM或者VB PCODE,都是这么个东西
Native Code的话是CPU硬解,PCODE是软解,所以JAVA跑的慢,Android没iOS的APP快

使用下面命令可以在flags中看到支持的指令集
  1. # cat /proc/cpuinfo
  2. processor       : 0
  3. vendor_id       : GenuineIntel
  4. cpu family      : 6
  5. model           : 60
  6. model name      : Intel(R) Core(TM) i3-4130 CPU @ 3.40GHz
  7. stepping        : 3
  8. microcode       : 26
  9. cpu MHz         : 800.000
  10. cache size      : 3072 KB
  11. physical id     : 0
  12. siblings        : 4
  13. core id         : 0
  14. cpu cores       : 2
  15. apicid          : 0
  16. initial apicid  : 0
  17. fpu             : yes
  18. fpu_exception   : yes
  19. cpuid level     : 13
  20. wp              : yes
  21. flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm arat xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 avx2 smep bmi2 erms invpcid
  22. bogomips        : 6798.32
  23. clflush size    : 64
  24. cache_alignment : 64
  25. address sizes   : 39 bits physical, 48 bits virtual
  26. power management:
复制代码
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 16:40:06 来自手机 | 显示全部楼层
就是有电(1)和无电(0)的存在,
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 17:23:07 | 显示全部楼层
似乎就是硬件组成的,
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 18:55:48 | 显示全部楼层
微指令是CISC结构的特征,RISC结构的为了跑得快是没有微指令的(或者说尽可能避免微指令),靠编译器把复杂操作翻译成多条RISC指令。

一般来说单周期指令都是不用微指令的,8086的乘法需要180个时钟周期,那就是在里面运行一段“小程序”的微指令。
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 23:11:48 来自手机 | 显示全部楼层
不用想的太复杂,就是简单的有电和没电,想了解更多推荐两本书,穿越计算机的迷雾、编码的奥秘,推荐去科创论坛计算机板块,那里有很多自制的CPU
回复 支持 反对

使用道具 举报

     
发表于 2020-1-19 16:04:14 | 显示全部楼层
CPU里面没有指令,CPU里面只有执行指令的电路,比如从程序中执行加法指令是由加法器电路完成。指令集是一系列指令的集合,CPU有某个指令集是指CPU内部有完成这些指令的电路。CPU的指令是以软件形式存在,作为PC机来说,逻辑上指令包含在程序内保存在磁盘上,加载程序的时候读到内存,CPU读内存执行指令。实际情况还要复杂一点,CPU获取指令的过程是磁盘->内存->二级缓存->一级代码缓存->CPU指令译码单元寄存器.
回复 支持 反对

使用道具 举报

     
发表于 2020-2-19 15:17:39 | 显示全部楼层
有啥指令,你以为像操作系统的文件一堆一堆的?都是些成熟的逻辑电路。比如读、写,传送,寻址等等,数据么放在寄存器或存储器中,我的理解。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-3-29 23:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表