是什么
-
定义:指令系统是计算机硬件能够直接识别并执行的全部机器指令的集合;寻址方式是指寻找操作数的有效地址(EA)或下一条要执行指令地址的方式。
-
大白话:指令是 CPU 听得懂的“密码条”,操作码告诉你“干什么”,寻址方式告诉你“去哪里抓数据、算完放哪里”。
核心内容
1. 指令格式与参数对应关系
-
指令字长 vs 机器字长:
-
机器字长:CPU 内部寄存器和 ALU 一次能直接处理的二进制位数(如 16 位)。
-
单字长指令:指令长度等于机器字长;双字长/半字长依此类推。
-
-
MAR 与 MDR 位数确定:
-
(通常等于机器字长/数据总线宽度)。
-
(注意编址方式:若按字编址,需用总容量除以字长算出字数再求对数)。
-
-
位宽与区间计算(闭区间计数原理):
-
指令字段占位区间 ,其位数公式为:(加1是因为b减a算的是步长,而要的是点的总个数)
-
位二进制编码最多可区分 种操作或通用寄存器。
-
2. 常见寻址方式汇总(有效地址 EA 与操作数形式)
-
立即寻址: 即为操作数本身(速度最快,无需访存)。
-
直接寻址:(形式地址直接就是主存物理地址,访存 1 次)。
-
间接寻址:(一次间址访存 2 次,多次间址看最高位标志位)。
-
寄存器寻址:操作数存放在寄存器中,(不访存,速度极快)。
-
寄存器间接寻址:,操作数在主存中,地址由寄存器给出(访存 1 次)。
-
相对寻址:
-
偏移量 常用补码表示。若偏移量占 位,转移范围为 。
-
-
基址寻址:
-
基址寄存器内容由 OS 设定且在程序执行过程中不变,偏移量 可变(常用于多道程序并发与动态重定位)。
-
-
变址寻址:
-
变址寄存器内容由用户在执行中不断修改,基地址 保持不变(常用于数组遍历与循环程序)。
-
3. 汇编语句转机器码的标准流程
-
查表填码:根据指令助记符(如
ADD)确定OP字段二进制。 -
确定寻址与寄存器:
-
括号形式如
(Rn)对应寄存器间接寻址,填入对应寻址特征码与寄存器编号。 -
自增/自减符号如
(Rn)+对应自增间址。
-
-
按位拼接并转十六进制:
-
按照指令格式排列字段(
OP | Ms | Rs | Md | Rd)。 -
每 4 位二进制划分为一组,转换成十六进制(不足 4 位需跨字段按位拼凑)。
-
例题
-
题目:
某计算机字长为 16 位,主存地址空间大小为 128KB,按字编址,采用单字长指令格式,指令各字段定义如下:
-
位 15~12:
OP(4位) -
位 11~6:源操作数,包含
Ms(寻址方式 3位)和Rs(寄存器 3位) -
位 5~0:目的操作数,包含
Md(寻址方式 3位)和Rd(寄存器 3位)寻址方式定义:
-
000B: 寄存器直接Rn,操作数 -
001B: 寄存器间接(Rn),操作数 -
010B: 寄存器间接自增(Rn)+,操作数 -
011B: 相对D(Rn),转移目标地址
问:
-
该指令系统最多可有多少条指令?计算机最多有多少个通用寄存器?MAR 和 MDR 至少各需要多少位?
-
转移指令的目标地址范围是多少?
-
若操作码
0010B表示加法add,寄存器 R4、R5 编号分别为100B、101B,,,地址 单元内容为 ,地址 单元内容为 。给出add (R4), (R5)+对应的机器码(十六进制),并指出执行后哪些寄存器和存储单元的内容会改变及改变后的值。
-
-
分析:
-
第一问:
OP占 4 位确定指令数;Rs/Rd占 3 位确定寄存器数;按字编址容量为 个字,地址线 16 位。 -
第二问:Rn 长度为 16 位,16 位补码范围是 。
-
第三问:提取源操作数
(R4)寻址特征与编号,提取目的操作数(R5)+寻址特征与编号,按位拼接转 16 进制;根据间接寻址规则分别从主存取数,相加后写回目的地址 ,最后将 R5 自增 1。
-
-
答案:
1)
2)
通用寄存器 Rn 为 16 位,16 位补码表示范围为 ()。
转移指令的目标地址范围为:
3)
-
各字段编码:,,,,。
-
二进制拼接为
0010 0011 0001 0101B,机器码为: -
执行后改变的内容:
-
主存单元 5678H:内容变为 68ACH(由 )
-
通用寄存器 R5:内容变为 5679H(由 )
-
-
⚠️ 易错点
Warning
按字节编址 vs 按字编址:计算 MAR 位数时,必须将容量除以字长得到“字数”;若是按字节编址,则直接以字节为单位求对数。
自增量单位判断:在自增寻址中,加 1 还是加 2 取决于编址单位。按字编址且单字长访问时直接 ;按字节编址且访问 16 位字时需 (需以题目硬件规范为准)。
相对寻址 PC 陷阱:计算有效地址 时,若题目未特殊说明, 默认指向当前指令的下一条指令地址;如果指令格式明确给出偏移量存放在通用寄存器中,则严格依题意套用公式。
补码表示范围端点不对称: 位补码范围是 ,负数端比正数端绝对值多 1(因为 0 占用了正数形式
00...00)。