对8085指令代码中MVI指令的二进制代码感到困惑。请参阅

时间:2013-01-10 00:48:42

标签: assembly microprocessors instruction-set machine-language 8085

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

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

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

我希望我的问题有道理。

2 个答案:

答案 0 :(得分:2)

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 msbits是00,那么该图表上的颜色编码给出了操作码解码器的强烈指示,那么如果低2位是10那么如果位2是1那么它是MVI并且位3-6确定哪个寄存器。基本上0b00rrr110是一个MVI。

答案 1 :(得分:1)

改进给出的答案 hereMVI R,d8 将提供的 8 位数据 (d8) 加载到指定的寄存器或内存位置 (R)。 R 有八种可能的选择,即BCDEHL、{{ 1}} 和 M。这八种可能性可以用三个比特编码如下。

A

name | code -----|----- B | 000 C | 001 D | 010 E | 011 H | 100 L | 101 M | 110 A | 111 将寄存器名称编码为 8 位操作码本身作为 MVI R,d8,其中 00rrr110 代表寄存器的 3 位代码,如上表所示。因此,rrr 将导致其第一个字节(操作码)为 MVI A,32H00 111 110,第二个字节(数据)为 0x3E