assembly 如何进行钻头旋转?

agyaoht7  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(121)

我想在HACK汇编中进行位旋转(nand2tetris)。例如:
11110000变为:11100001
我该怎么做呢?我看到普通汇编有这样做的rol语法,但我找不到一个用于HACK汇编

inb24sb2

inb24sb21#

这个答案在本质上是苏格拉底式的,因为Nand2Tetris的目的是学习东西,如果你自己弄清楚了,你会学到更多。
HACK中没有ROL指令,所以你必须从你现有的东西中构建它。这里有一些问题要问自己:

  • 如何在HACK中进行正常的左移操作?
  • 什么时候左移和左旋转相同,什么时候不同?
  • 我如何测试,看看是否只是一个左移将做的伎俩?
  • 当左移还不够的时候我该怎么办?

如果需要对小于完整字(16位)的值执行ROL,我建议您解决完整字的问题,然后调整它以处理所需的位长度。

  • 额外学分:如果位长度相对较小(例如8位或更少),并且您将大量执行此操作,那么是否有一种方法可以在牺牲其他可用资源的情况下使操作更快?
aor9mmx1

aor9mmx12#

首先检查msb。如果a〈0,则Nand 2 Tetris使用2的补码,msb = 1,否则(a〉= 0)msb = 0
保留msb 0或1
并且,左移意味着乘以2,a * 2 -〉D = D + D或D = D + M丢弃溢出
最后,添加保持MSB值…

相关问题