Assembly 汇编语言指令转换为机器语言指令

Assembly 汇编语言指令转换为机器语言指令,assembly,binary,opcode,operands,Assembly,Binary,Opcode,Operands,参考: 问题: 我得到的值与他们在答案中得到的值不一样 ld(立即数)的操作码为0x31=0011 0001 该值为0x10A=0001 0000 1010。 我不知道如何解释这里的国际扶轮登记册 ld(0x31)的物理格式为两个字长 字1:位7-2用于操作码。因此,ld的二进制序列缩短为110001位 位1-0表示Ri 字2:为值保留的所有8位 10A=0001 0000 1010缩短为。。。0000 1010? 0001怎么样( 我的结果-1100 01 Ri 0000 1010。是的,图像

参考: 问题:

我得到的值与他们在答案中得到的值不一样

ld(立即数)的操作码为0x31=0011 0001 该值为0x10A=0001 0000 1010。 我不知道如何解释这里的国际扶轮登记册

ld(0x31)的物理格式为两个字长

字1:位7-2用于操作码。因此,ld的二进制序列缩短为110001位

位1-0表示Ri

字2:为值保留的所有8位

10A=0001 0000 1010缩短为。。。0000 1010? 0001怎么样(


我的结果-1100 01 Ri 0000 1010。

是的,图像中的答案是错误的,是0x10D而不是0x10A。你的答案也是错误的

对于初学者来说,
ld
有两个版本,一个用于内存加载,另一个用于恒定加载。问题中的一个是内存加载,而操作码为0x30
Ri
只是操作数的寄存器号,这里显然是
1
。因此,第一个字节看起来像
1100 0001
(这在图中是正确的)。然后只需将常量作为两个字节放在后面,即big-endian


因此,正确答案是
1100 0001 0000 0001 0000 1010

是的,图像中的答案是错误的,这是针对0x10D而不是0x10A的。你的答案也是错误的

对于初学者来说,
ld
有两个版本,一个用于内存加载,另一个用于恒定加载。问题中的一个是内存加载,而操作码为0x30
Ri
只是操作数的寄存器号,这里显然是
1
。因此,第一个字节看起来像
1100 0001
(这在图中是正确的)。然后只需将常量作为两个字节放在后面,即big-endian


因此,正确的答案是
1100 0001 0000 0001 0000 1010

查看问题中包含的文档,有几个建议的说明。机器有四个8位寄存器,编号为R0、R1、R2和R3,使用两位寻址

指令的操作码在文档中指定为两个十六进制数字。然而,在实际实现中,指令的操作码区域的大小不是两个十六进制数字,因此必须取十六进制值并将值左移2位。因此,加载0x30(0011 0000)的操作码左移导致0xC0(1100 0000二进制)或存储0x32(0011 0010)的操作码左移,导致0xC8(1100 1000),并且将0到3的寄存器号插入两个十六进制数字的下两位

“从地址加载”指令是
ld Ri,xxxx
,其中xx是包含要加载到寄存器中的8位值的位置的16位地址。此加载指令将指定的8位寄存器(R0、R1、R2或R3)设置为在指定地址处的8位值

加载指令的实际位格式为:(1)最高有效6位的操作码(0x30),然后是(2)接下来两位的寄存器号(0-3),然后是(3)16位值,该值是要加载的值的地址

然后,
ld R1,0x10A
在二进制中应该看起来像1100 0001 0000 0001 0000 1010,作为操作码0x30分离为1100 00,01作为寄存器号R1,0000 0001 0000 1010是0x010A

load immediate
ld R3,$-12
应该看起来像1100 01111 1111 0400,因为-12是0xfff4

假设未使用的位被设置为零,
add R1,R3
应该看起来像0100 0001 1100 0000。这将是010000作为add的0x10操作码,01用于寄存器R1,11用于寄存器R3。add指令第二个8位部分中的剩余6位未使用并被忽略


sto R1,0x10B
应该看起来像1100 1001 0000 0001 0000 1011,它是0x32寄存器1的操作码,存储在0x010B的16位地址。

查看问题中包含的文档,有几个指令正在被提出。机器有四个8位寄存器,编号为R0、R1、R2,和R3,它们使用两个位寻址

指令的操作码在文档中指定为两个十六进制数字。然而,在实际实现中,指令的操作码区域的大小不是两个十六进制数字,因此必须取十六进制值并将值左移2位。因此,加载0x30(0011 0000)的操作码左移导致0xC0(1100 0000二进制)或存储0x32(0011 0010)的操作码左移,导致0xC8(1100 1000),并且将0到3的寄存器号插入两个十六进制数字的下两位

“从地址加载”指令是
ld Ri,xxxx
,其中xx是包含要加载到寄存器中的8位值的位置的16位地址。此加载指令将指定的8位寄存器(R0、R1、R2或R3)设置为在指定地址处的8位值

加载指令的实际位格式为:(1)最高有效6位的操作码(0x30),然后是(2)接下来两位的寄存器号(0-3),然后是(3)16位值,该值是要加载的值的地址

然后,
ld R1,0x10A
在二进制中应该看起来像1100 0001 0000 0001 0000 1010,作为操作码0x30分离为1100 00,01作为寄存器号R1,0000 0001 0000 1010是0x010A

load immediate
ld R3,$-12
应该看起来像1100 01111 1111 0400,因为-12是0xfff4

假设未使用的位被设置为零,
add R1,R3
应该看起来像0100 0001 1100 0000。这将是010000作为add的0x10操作码,01用于寄存器R1,11用于寄存器R3。add指令第二个8位部分中的剩余6位未使用并被忽略

T