在我正在进行的项目中,我必须处理汇编语言指令的编码。通常,在这个空间中,需要代表所有编码而不是一个。
我为二进制数字创建了一个表示法,允许我以紧凑的形式表示。
是否有这种表示法的名称?
在我的表示法中,以下两种编码覆盖整个16位编码空间:
-------DDD------ // DDD represents 000/001/010/011/100/101/110 -- everything but 111
-------111------
同样,这两种编码将覆盖整个16位编码空间:
-------dDd------ // dDd represents 000/001/011/100/101/110/111 -- everything but 010
-------010------
如果有这个表示法的名称,我可以找到可以操作这些编码的算法,而不必从头开始创建这些算法(这就是我一直在做的)。
这种表示法在代表指令集编码时可以派上用场。
给定一个16位指令集,其中指令可能具有以下格式,其中操作码在[15:9]中,目标寄存器在[8:6]中,源1在[5:3]中并且源2在[2:0]中:
1
5 9 8 6 5 3 2 0
------- --- --- ---
0000000 Rd S1 S2 ADD Rd = S1, S2
指令集的设计者可能不允许Rd为R7(例如,编码为0b111)用于ADD,因此S2的位可用于编码更多操作码空间以表示单个源指令。
0000000 111 S1 000 NEG R7 = S1
为了使用这些指令编码,我创建了一个表示来指示编码或编码的一部分何时具有除给定值之外的所有值。
因此上面的ADD和NEG指令可能表示为
0000000 DDD --- --- ADD Rd = S1, S2
0000000 111 --- 000 NEG R7 = S1