某计算机字长为16位,主存地址空间大小为128KB,按字编址。采用单字长指令格式,指令各字段定义如图B-4所示.
15 | 12 | 1 1 | 6 | 5 | 0 |
OP | Ms | Rs | Md | Rd | |
| 源操作数 | | 目的操作数 |
图B-4
转移指令采用相对寻址方式,相对偏移量用补码表示,寻址方式定义见表B-1。
表B-1
Ms/Md | 寻址方式 | 助记符 | 含义 |
000B | 寄存器直接 | Rn | 操作数=(Rn) |
001B | 寄存器间接 | (Rn) | 操作数=((Rn)) |
010B | 寄存器间接、自增 | (Rn)+ | 操作数=((Rn)),(Rn)+1→Rn |
011B | 相对 | D(Rn) | 转移目标地址=(PC)+(Rn) |
注:(X)表示存储器地址X或寄存器X的内容。
请回答下列问题:
1)该指令系统最多可有多少条指令?该计算机最多有多少个通用寄存器?存储器地址寄存器(MAR)和存储器数据寄存器(MDR)至少各需要多少位?
2)转移指令的目标地址范围是多少?
3)若操作码0010B表示加法操作(助记符为add),寄存器R4和R5的编号分别为100B和101B,R4的内容为1234H,R5的内容为5678H,地址1234H中的内容为5678H,地址5678H中的内容为1234H,则汇编语言为“add(R4), (R5)+”(逗号前为源操作数,逗号后为目的操作数)对应的机器码是什么(用十六进制表示)?该指令执行后,哪些寄存器和存储单元中的内容会改变?改变后的内容是什么?
1)操作码占4位,则该指令系统最多可有24=16条指令。操作数占6位,其中寻址方式占3位、寄存器编号占3位,因此该机最多有23=8个通用寄存器。主存地址空间大小为128KB,按字编址,字长为16位,共有128KB/2B=216个存储单元,因此MAR至少为16位;因为字长为16位,故MDR至少为16位。
2)寄存器字长为16位,PC和Rn可表示的地址范围均为0~216 -1,而主存地址空间为216,故转移指令的目标地址范围为0000H~FFFFH(0~216 -1)。
字段
OP
Ms
Rs
Md
Rd
内容
0010
001
100
010
101
说明
add
寄存器间接
R4
寄存器间接、自增
R5
将对应的机器码写成十六进制形式为0010 0011 0001 0101B=2315H。
该指令的功能是将R4的内容所指存储单元的数据与R5的内容所指存储单元的数据相加,并将结果送入R5的内容所指存储单元中。(R4)=1234H,(1234H)=5678H;(R5)=5678H,(5678H) =1234H;执行加法操作5678H+1234H=68ACH,之后R5自增。
该指令执行后,R5和存储单元5678H的内容会改变,R5的内容从5678H变为5679H,存储单元5678H中的内容变为该指令的计算结果68ACH。
【注意】第3问中两操作数的存储地址和数值有晕头的作用,请读者务必保持清醒。