您可以在68000中移位长字的最大位数

时间:2016-03-10 13:54:38

标签: assembly 68000

这可能是非常愚蠢的事情,但我想问这个问题是为了澄清我的想法。

我正在做伟大的68k装配教程(link)。 Evrything顺利,但我不明白一件事。我来引用一下:

  

您可以使用一个数据寄存器作为移位大小进行移位,例如:

      lsl.l     d0,d1
     

现在在这个例子中,d1向左移动了d0中的数字。   我们假装d0包含0000010F。

     

对于源操作数,只读取一个字节作为移位计数。以来   d0包含0000010F,仅使用0F。所以,d1的长词是   向左移动0F位。

     

您可以移动的最大位数取决于您的大小   选择:

.b for byte gives a maximum shift of $08 bits.
.w for word gives a maximum shift of $10 bits.
.l for long-word gives a maximum shift of $1F bits.

这就是:为什么对于字节和16位字操作,您可以使用全长(字节为0x08,16位字为0x10)和32位长字仅为0x1F?那么32位长字不应该是0x20吗?

无论如何,我没有看到一个点8位字节,因为这将总是给出0x00作为结果。

在本教程中,我仍然不能理解这个例外。

任何有帮助的帮助。

1 个答案:

答案 0 :(得分:0)

移位大小最多只能使用0x1F,因为长字中有32位,因此只有31位可以在完全耗尽位置之前将最低位移位

至于为什么处理器或至少汇编器不接受0x20作为要移位的位数,这是设计芯片或汇编器的设计决定。请记住,如果汇编程序是守门员,除非您手动编辑二进制文件。如果汇编程序不接受代码,除非您手动编辑二进制文件,否则芯片是否接受它并不重要。