计算机组成原理问题 七种寻址方式

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/207085267876145.jpg

计算机组成原理的问题

题目中提到寻址方式,寻址方式分为两类,即指令寻址方式和数据寻址方式,前者比较简单,后者比较复杂。你给出的例子中,LOAD指令是一种数据寻址方式,它需要根据不同的地址码来确定操作数的值。
以下是我根据不同的寻址方式计算出的操作数的值:
(1) 间接寻址:操作数的值是3000H,因为地址码2000H指向了存储单元2000H,而存储单元2000H中存储的内容是3000H。
(2) 相对寻址:操作数的值是6000H,因为地址码2000H加上PC的值4000H得到6000H。
(3) 变址寻址:操作数的值是3000H,因为地址码2000H加上寄存器R中的数值1000H得到3000H。
(4) 寄存器寻址:操作数的值是1000H,因为地址码R指向了寄存器R中存储的内容1000H。
(5) 寄存器间接寻址:操作数的值是2000H,因为地址码R指向了寄存器R中存储的内容1000H,而存储单元1000H中存储的内容是2000H。
(6) 直接寻址:操作数的值是2000H,因为地址码1000H指向了存储单元1000H中存储的内容2000H。
(7) 相对寻址:操作数的值是2000H,因为地址码-2000(PC)等于-4000+4000=0000,而存储单元0000中存储的内容是2000H。
(8) 间接寻址:操作数的值是3000H,因为地址码1000H指向了存储单元1000H中存储的内容2000H,而存储单元2000H中存储的内容是3000H。 (9) 立即寻址:操作数的值就是地址码本身。

根据题目描述,可以得到LOAD指令存储在200和201地址处,第一个字节指定操作码和地址方式,第二个字节是地址码。可以得到操作码为双字长指令,操作码和地址方式在第一个字节,地址码在第二个字节,具体如下所示:

表头表头
地址内容
200操作码和地址方式
201地址码

根据操作码和地址方式确定不同的寻址方式,各寻址方式对应的操作数的值如下:

(1) 间接寻址:

操作数地址:2000H(从地址码中获取)
从2000H地址中读取内容:3000H
最终操作数的值:3000H
(2) 相对寻址:

操作数地址:4000H + 2 + (-2000H) = 2002H(从地址码中获取)
从2002H地址中读取内容:3000H
最终操作数的值:3000H
(3) 变址寻址:

操作数地址:R + 2000H(从地址码中获取)
R的值为1000H,所以操作数地址为3000H
从3000H地址中读取内容:空(未定义)
最终操作数的值:空
(4) 寄存器寻址R+:

操作数地址:R + 2000H(从地址码中获取)
R的值为1000H,所以操作数地址为3000H
从3000H地址中读取内容:空(未定义)
最终操作数的值:空
(5) 寄存器间接寻址R:

操作数地址:R中存储的地址值(从地址码中获取)
R的值为1000H,所以操作数地址为1000H
从1000H地址中读取内容:2000H
最终操作数的值:2000H
(6) 直接寻址1000H:

操作数地址:1000H(从地址码中获取)
从1000H地址中读取内容:2000H
最终操作数的值:2000H
(7) 相对寻址-2000(PC):

操作数地址:4000H + 2 + (-2000H) = 2002H(从地址码中获取)
从2002H地址中读取内容:3000H
最终操作数的值:3000H
(8) 间接寻址(1000H):

操作数地址:1000H中存储的地址值(从地址码中获取)
从1000H地址中读取内容:2000H
最终操作数的地址:2000H
从2000H地址中读取内容:3000H
最终操作数的值:3000H
(9) 立即寻址:

操作数的值:地址码中的值,即2000H

因为没有使用到偏移量,所以是寄存器间接寻址
选择5

参考GPT和自己的思路,根据题目描述,LOAD指令的操作码和地址方式存储在地址为200和201的存储单元,操作数存储在第二个字节指定的地址中。以下是不同寻址方式下访问操作数的过程和结果:

(1) 间接寻址:操作数为地址为2000H的存储单元中的内容,即3000H。
寻址过程:取出LOAD指令的地址码200H,将其作为地址,访问到地址为200H的存储单元,得到操作数的地址码为201H;将地址码201H作为地址,访问到地址为201H的存储单元,得到操作数的地址为2000H。将操作数的地址2000H作为地址,访问到地址为2000H的存储单元,得到操作数的值3000H。

(2) 相对寻址:操作数为地址为PC-2000H的存储单元中的内容,即2001H处的内容,即200H。
寻址过程:取出LOAD指令的地址码200H,将其作为地址,访问到地址为200H的存储单元,得到操作数的地址码为201H;将地址码201H作为地址,访问到地址为201H的存储单元,得到操作数的地址为2000H。PC寄存器的值为4000H,因此PC-2000H的值为2000H,将该值作为地址,访问到地址为2000H的存储单元,得到操作数的值200H。

(3) 变址寻址:假设寄存器R中的数值为X,操作数为地址为X+2000H的存储单元中的内容,即地址为3000H的存储单元中的内容,即3000H。
寻址过程:取出LOAD指令的地址码200H,将其作为地址,访问到地址为200H的存储单元,得到操作数的地址码为201H;将地址码201H作为地址,访问到地址为201H的存储单元,得到操作数的地址为2000H。将寄存器R中的值1000H与操作数的地址2000H相加,得到地址为3000H,将该地址作为地址,访问到地址为3000H的存储单元,得到操作数的值3000H。

(4) 寄存器寻址R:操作数为寄存器R中的内容,即1000H。
寻址过程:取出LOAD指令的地址码200H,将其作为地址,访问到地址为200H的存储单元,得到操作数的地址码为201H;将地址码201H作为地址,访问到地址为201H的存储单元,得到操作数的地址为2000H。根据地址方式中的寄存器R,将寄存器R中的内容1000H作为操作数。

(5) 寄存器间接寻址(R):假设寄存器R中的值为X,操作数为地址为X的存储单元中的内容,即地址为1000H的存储单元中的内容,即2000H。
寻址过程:取出LOAD指令的地址码200H,将其作为地址,访问到地址为200H的存储单元,得到操作数的地址码为201H;根据地址方式中的寄存器R,将寄存器R中的内容1000H作为地址,访问到地址为1000H的存储单元,得到操作数的地址为2000H。将操作数的地址2000H作为地址,访问到地址为2000H的存储单元,得到操作数的值3000H。

(6) 直接寻址1000H:操作数为地址为1000H的存储单元中的内容,即2000H。
寻址过程:直接使用1000H作为操作数的地址,访问到地址为1000H的存储单元,得到操作数的地址为2000H。将操作数的地址2000H作为地址,访问到地址为2000H的存储单元,得到操作数的值3000H。

(7) 相对寻址-2000(PC):操作数为地址为PC-2000H-1的存储单元中的内容,即201H处的内容,即200H。
寻址过程:取出LOAD指令的地址码200H,将其作为地址,访问到地址为200H的存储单元,得到操作数的地址码为201H;将PC寄存器的值4000H减去2000H,再减去1,得到操作数的地址为201H,将该地址作为地址,访问到地址为201H的存储单元,得到操作数的值200H。

(8) 间接寻址(1000H):操作数为地址为1000H的存储单元中的内容,即2000H,再将该内容解释为地址,访问该地址中存储的内容,即3000H。
寻址过程:取出LOAD指令的地址码200H,将其作为地址,访问到地址为200H的存储单元,得到操作数的地址码为201H;将地址码201H作为地址,访问到地址为201H的存储单元,得到操作数的地址为2000H。将操作数的地址2000H作为地址,访问到地址为2000H的存储单元,得到操作数的值3000H。

(9) 立即寻址:操作数为LOAD指令的第二个字节中存储的内容,即地址为201H的存储单元中的内容,即2000H。
寻址过程:取出LOAD指令的地址码200H,将其作为地址,访问到地址为200H的存储单元,得到操作数的地址码为201H;将地址码201H作为地址,访问到地址为201H的存储单元,得到操作数的值2000H。

回答不易,还请采纳!!!

1.300
2.325
3.900
9.500
记得计算机组成原理教材上面有这个题,详细的可以去看一下

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
计算机组成原理中的七种寻址方式分别为:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和基址寻址。

  1. 立即寻址:把运算数直接放在指令中,比如ADD A,#5,表示把A寄存器的值和5相加。

  2. 直接寻址:把操作数的地址直接放在指令中,比如ADD A,B,表示把B存储单元中的值和A寄存器的值相加。

  3. 寄存器寻址:把操作数的地址寄存器中保存,比如ADD A,R1,表示把R1寄存器中的地址内存单元中的值和A寄存器的值相加。

  4. 寄存器间接寻址:把操作数的地址存储在一个寄存器中,该地址又指向实际的操作数存储单元,比如MOV A,(R1),表示A寄存器中的值等于R1寄存器中存储单元中的值所指向的存储单元存储的值。

  5. 变址寻址:通过寄存器和立即数中的值来计算操作数的地址,比如ADD A,(R1)+ #4,表示把(R1)所指存储单元中的值加上4,再把A寄存器中的值加上这个结果。

  6. 相对寻址:通过当前程序计数器(PC)的值(即下一条指令的地址)加上一个偏移值得到操作数的地址,比如JMP #5,表示把下一条指令的地址加上5,跳转到该地址处继续执行。

  7. 基址寻址:通过把基地址寄存器和偏移地址相加得到操作数的地址,比如MOV A,(BASE,R1),表示把BASE寄存器中的值和R1寄存器中存储单元中的值相加,得到操作数的地址,把该地址存储单元存储的值赋给A寄存器。

代码示例:

立即寻址:

ADD A, #5

直接寻址:

ADD A, B

寄存器寻址:

ADD A, R1

寄存器间接寻址:

MOV A, (R1)

变址寻址:

ADD A, (R1) + #4

相对寻址:

JMP #5

基址寻址:

MOV A, (BASE, R1)

如果我的回答解决了您的问题,请采纳!

1)在直接寻址方式下,有效地址是指令中的地址码部分500,装入AC的操作数是800。
(2)在立即寻址方式下,指令的地址码部分是操作数而不是地址,所以将500装入AC。
(3)在间接寻址方式下,操作数的有效地址存储在地址为500的单元中,由此得到有效地址为800,操作数是300。
(4)在相对寻址方式下,有效地址EA=(PC)
+A=202+500=702,所以操作数是325.这是因为指令是双字长,在该指令的执行阶段,PC的内容已经+2,更新为下一条指令的地址202。
(5)在变址寻址方式下,有效地址EA=(XR)+A=100+500=600,所以操作数是900。
(6)在寄存器寻址方式下,R1的内容400装入 AC。
(7)在寄存器间接寻址方式下,有效地址是R的内容400,装入AC的操作数是700.