1

考虑指令 MVI A,32H 将 32H 加载到寄存器 A(Intel 8085 微处理器)中。

我的书说它是一个双字节指令,其中第一个字节是操作码,第二个是操作数。第一个字节是 0011 1110(十六进制的 3E),第二个字节是 0011 0010(十六进制的 32)。

我对操作码部分如何准确地转换为机器码感到困惑。我的意思是......“0011 1110”的哪一部分代表“MVI”,它的哪一部分告诉要加载寄存器A?“3E”如何告诉微处理器这两个信息?那就是它必须加载数据以及目标寄存器。还是这整个操作码是预定义的,您无法将操作码中的“MVI”和“目标寄存器”分开?

我希望我的问题是有道理的,哈哈。

4

2 回答 2

3

http://www.pastraiser.com/cpu/i8085/i8085_opcodes.html

整个 0x3E 表示 MVI A。

从上面链接中的表格(假设它可以信任)

0x0E MVI C  00001110
0x1E MVI E  00011110
0x2E MVI L  00101110
0x3E MVI A  00111110

0x06 MVI B  00000110
0x16 MVI D  00010110
0x26 MVI H  00100110
0x36 MVI M  00110110

该图表上的颜色编码强烈指示操作码解码器,如果 2 msbit 为 00,则如果低 2 位为 10,则如果位 2 为 1,则它是 MVI,位 3-6 确定哪个寄存器。基本上 0b00rrr110 是一个 MVI。

于 2013-01-10T01:08:14.273 回答
1

改进这里给出的答案。 MVI R,d8将提供的 8 位数据 ( d8) 加载到指定的寄存器或内存位置 ( R)。有八种可能的选择,RBCDEH、和。这八种可能性可以用三位编码如下。LMA

name | code
-----|-----
  B  | 000
  C  | 001
  D  | 010
  E  | 011
  H  | 100
  L  | 101
  M  | 110
  A  | 111

MVI R,d8将寄存器名称编码为 8 位操作码本身,00rrr110其中rrr代表寄存器的 3 位代码,如上表所示。因此MVI A,32H将导致其第一个字节(操作码)为00 111 110or0x3E而第二个字节(数据)为0x32

于 2021-06-25T10:58:05.430 回答