计算机组成原理第十一次笔记(指令格式)

本文介绍了计算机指令的基本格式,包括零地址到四地址指令,以及操作码的定长和扩展方式。此外,讨论了常见的指令操作类型,如数据传送、算术运算、移位和转移操作。还详细阐述了指令的十大寻址方式,包括隐含、立即数、直接、间接等寻址方式,强调了各种寻址方式对访存次数的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.指令的基本格式:操作码+地址码

  1. 零地址:OP;不需要操作数的指令,如关中断指令。
  2. 一地址:OP+A1;只有一个目的操作数的指令如自增1,自减1,求反等操作指令。隐含一个地址的指令,比如加法不用指定目的地址ACC,默认为ACC。
  3. 二地址:OP+A1+A2;常见的格式,一般的运算操作都是有一个目的地址和一个源操作数地址。
  4. 三地址:OP+A1+A2+A3;一般A1,A2为两个源操作数的地址,A3为目的地址。
  5. 四地址:OP+A1+A2+A3+A4;和三地址不同的地方在于A4为下一条执行的指令地址。

2.操作码的个数

2.1定长操作码:操作码有几位就有2^n个指令操作码
2.2扩展操作码:高阶的操作码留出一条来作为低阶操作码的扩展,例:0000 0000 0000是一个指令格式,地址为4位,可以有2^4个二地址指令,则可以把1111留下作为操作码的扩充,则可以扩充出16个一地址指令。也可以多留出几位作为低阶而多流出一个就会多出很多(2的n次方个低阶指令)。

3.常见的指令操作类型

3.1 数据传送:寄存器之间传送MOV,从内存单元读取数据到CPU寄存器LOAD,从CPU到主存STORE.
3.2 算术运算:加ADD,减SUB,乘MUL,比较CMP……。
3.3 移位运算:逻辑移位,算术移位,循环移位。
3.4 转移操作:跳转
3.5 输入输出操作

4.指令的十大寻址方式

4.1 指令的两大寻址方式:根据指令寻址,根据指令中数据寻址。指令寻址一般为顺序寻址或指令给出下一跳计算方式的跳跃寻址。数据寻址一般在指令中会有一段专门标记寻址方式。
4.2数据寻址方式
4.2.1隐含寻址:指令中不给出操作数的地址,在指令中暗含了操作数的地址,例如ACC累加器的地址。
4.2.2立即数寻址:指令的地址字段直接给出了操作数本身,不需要访存。
4.2.3直接寻址:指令的地址直接给出操作数的地址,需要访问一次主存。
4.2.4间接寻址:按照指令中给出的地址可以找到一个地址,再根据这个地址可以找到操作数,这是一次间接寻址,可以无限嵌套,访存次数为间接次数+1.
4.2.5寄存器寻址:按照指令中给出的寄存器编号可找出一个寄存器,该寄存器中保存着操作数。访存次数为0次。
4.2.6寄存器间接寻址:按照指令中给出的寄存器编号可找出一个寄存器,该寄存器中保存着一个地址,该地址为操作数的地址。访存次数为1次。
4.2.7相对寻址:将PC中的地址加上指令格式中的形式地址形成有效地址,常用于跳转指令。
4.2.8基址寻址:将CPU中的基址寄存器的内容加上指令格式中的形式地址A形成操作数的有效地址,基址寄存器的内容不会变,可给出不同的指令来改变形式地址,所以有利于编制浮动程序,扩大寻址范围。
4.2.9变址寻址:将指令字的地址和变址寄存器的内容加和形成有效地址,和基址寻址的区别在于变址寻址是面向用户的所以其变址寄存器的值是可以变化的而指令中的数值不能变化。
4.2.10堆栈寻址:一般以0地址指令的形式出现,指令中SP(堆栈指针)所指栈顶为所操作数的地址。

$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单树的引用,以便在对象中使用该菜单树 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值