(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{693:function(v,_,t){"use strict";t.r(_);var d=t(6),r=Object(d.a)({},(function(){var v=this,_=v.$createElement,t=v._self._c||_;return t("ContentSlotsDistributor",{attrs:{"slot-key":v.$parent.slotKey}},[t("h2",{attrs:{id:"指令格式"}},[v._v("指令格式")]),v._v(" "),t("h3",{attrs:{id:"基本格式"}},[v._v("基本格式")]),v._v(" "),t("p",[v._v("一条指令通常包括操作码和地址码。操作码指出指令执行什么性质的操作（就是是啥指令），地址码给出被操作的数据；")]),v._v(" "),t("p",[v._v("有零地址、一地址、二地址、三地址（第三个为结果存放的地址）、四地址指令（都四个为下址）；")]),v._v(" "),t("h3",{attrs:{id:"定长操作码"}},[v._v("定长操作码")]),v._v(" "),t("p",[v._v("操作码是固定长度，简化硬件设计、提高指令译码和识别速度。")]),v._v(" "),t("h3",{attrs:{id:"扩展指令码"}},[v._v("扩展指令码")]),v._v(" "),t("p",[v._v("变长操作码，操作码的长度随地址码的减少而增多。")]),v._v(" "),t("p",[t("strong",[v._v("不允许短码是长码的前缀")]),v._v("，不然识别很麻烦，根据前缀就能识别是什么地址的码")]),v._v(" "),t("h3",{attrs:{id:"类型"}},[v._v("类型")]),v._v(" "),t("ol",[t("li",[v._v("数据传送")]),v._v(" "),t("li",[v._v("算术和逻辑运算")]),v._v(" "),t("li",[v._v("移位操作")]),v._v(" "),t("li",[v._v("转移操作")]),v._v(" "),t("li",[v._v("输入输出操作")])]),v._v(" "),t("h2",{attrs:{id:"指令寻址方式"}},[v._v("指令寻址方式")]),v._v(" "),t("h3",{attrs:{id:"指令寻址"}},[v._v("指令寻址")]),v._v(" "),t("ol",[t("li",[v._v("顺序寻址，PC+“1”，自动形成下一条指令地址")]),v._v(" "),t("li",[v._v("跳跃寻址，本条指令给出下条地址，通过修改PC值实现")])]),v._v(" "),t("h3",{attrs:{id:"数据寻址"}},[v._v("数据寻址")]),v._v(" "),t("p",[v._v("如何在指令中表达操作数的地址，")]),v._v(" "),t("h3",{attrs:{id:"寻址方式"}},[v._v("寻址方式")]),v._v(" "),t("ol",[t("li",[t("strong",[v._v("隐含寻址")]),v._v("，默认使用某个寄存器")]),v._v(" "),t("li",[t("strong",[v._v("立即（数）寻址")]),v._v("，给出的地址字段不是操作数的地址，而是操作数本身")]),v._v(" "),t("li",[t("strong",[v._v("直接寻址")]),v._v("，给出的地址是操作数的地址")]),v._v(" "),t("li",[t("strong",[v._v("间接寻址")]),v._v("，给出的地址是存放操作数地址的地址")]),v._v(" "),t("li",[t("strong",[v._v("寄存器寻址")]),v._v("，给出寄存器编号，操作数在寄存器内")]),v._v(" "),t("li",[t("strong",[v._v("寄存器间接寻址")]),v._v("，给出寄存器编号，寄存器中存这操作数的地址")]),v._v(" "),t("li",[t("strong",[v._v("相对寻址")]),v._v("，PC的内容加上给出的地址得到存放操作数的地址（相对于PC，下一条指令）")]),v._v(" "),t("li",[t("strong",[v._v("基址寻址")]),v._v("，BR的内容加上给出的地址得到存放操作数的地址，BR面向操作系统，内容由操作系统和管理程序确定，用于解决程序逻辑空间和存储器物理空间的无关性")]),v._v(" "),t("li",[t("strong",[v._v("变址寻址")]),v._v("，IX的内容加上给出的地址得到存放操作数的地址，IX面向用户，在程序执行过程中，变址寄存器可以由用户改变，作为偏移量，比如循环访问数组。")]),v._v(" "),t("li",[t("strong",[v._v("堆栈寻址")]),v._v("，取出堆栈指针SP的值。")])]),v._v(" "),t("p",[v._v("这块感觉学了好多次，汇编、系统结构、组成原理都讲了，还有什么相对基址变址寻址，比例因子什么的。")]),v._v(" "),t("h2",{attrs:{id:"汇编"}},[v._v("汇编")]),v._v(" "),t("p",[v._v("注意AT&T格式和Intel格式的区别。")]),v._v(" "),t("h2",{attrs:{id:"cisc和risc"}},[v._v("CISC和RISC")]),v._v(" "),t("table",[t("thead",[t("tr",[t("th",[v._v("对比项目")]),v._v(" "),t("th",[v._v("CISC")]),v._v(" "),t("th",[v._v("RISC")])])]),v._v(" "),t("tbody",[t("tr",[t("td",[v._v("指令系统")]),v._v(" "),t("td",[v._v("大")]),v._v(" "),t("td",[v._v("小")])]),v._v(" "),t("tr",[t("td",[v._v("指令数目")]),v._v(" "),t("td",[v._v("大于200")]),v._v(" "),t("td",[v._v("小于100")])]),v._v(" "),t("tr",[t("td",[v._v("指令字长")]),v._v(" "),t("td",[v._v("不固定")]),v._v(" "),t("td",[v._v("定长")])]),v._v(" "),t("tr",[t("td",[v._v("可访存指令")]),v._v(" "),t("td",[v._v("不加限制")]),v._v(" "),t("td",[v._v("只有Load/Store")])]),v._v(" "),t("tr",[t("td",[v._v("各指令执行时间")]),v._v(" "),t("td",[v._v("相差较大")]),v._v(" "),t("td",[v._v("绝大多数在一个周期内完成")])]),v._v(" "),t("tr",[t("td",[v._v("各指令使用频度")]),v._v(" "),t("td",[v._v("相差很大")]),v._v(" "),t("td",[v._v("都比较常用")])]),v._v(" "),t("tr",[t("td",[v._v("通用寄存器数量")]),v._v(" "),t("td",[v._v("较少")]),v._v(" "),t("td",[v._v("多")])]),v._v(" "),t("tr",[t("td",[v._v("目标代码")]),v._v(" "),t("td",[v._v("难以用优化编译生成高效的目标代码")]),v._v(" "),t("td",[v._v("采用优化的编译程序，生成代码较为高效")])]),v._v(" "),t("tr",[t("td",[v._v("控制方式")]),v._v(" "),t("td",[v._v("绝大多数为微程序控制（控制存储器占CPU50%面加")]),v._v(" "),t("td",[v._v("绝大多数为组合逻辑控制（硬布线，布线逻辑面积小）")])]),v._v(" "),t("tr",[t("td",[v._v("指令流水线")]),v._v(" "),t("td",[v._v("可以通过一定方式实现")]),v._v(" "),t("td",[v._v("必须实现")])])])])])}),[],!1,null,null,null);_.default=r.exports}}]);