考虑指令MVI A,32H在寄存器A(Intel 8085微处理器)中加载32H。
我的书说这是一个双字节指令,其中第一个字节是操作码,第二个字节是操作数。第一个字节为0011 1110(3E为十六进制),第二个字节为0011 0010(十六进制为32)。
我对操作码部分如何转换成机器代码感到困惑。我的意思是......“0011 1110”的哪一部分代表“MVI”,它的哪一部分告诉我要加载寄存器A? “3E”如何告诉微处理器这些信息?那就是它必须加载数据以及目标寄存器。或者是整个操作码是预定义的,你不能将操作码中的“MVI”和“目标寄存器”分开?
我希望我的问题有道理。
答案 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)
改进给出的答案 here。
MVI R,d8
将提供的 8 位数据 (d8
) 加载到指定的寄存器或内存位置 (R
)。 R
有八种可能的选择,即B
、C
、D
、E
、H
、L
、{{ 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,32H
或 00 111 110
,第二个字节(数据)为 0x3E
。