Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 68000中可移动长字的最大位数_Assembly_68000 - Fatal编程技术网

Assembly 68000中可移动长字的最大位数

Assembly 68000中可移动长字的最大位数,assembly,68000,Assembly,68000,这可能是非常愚蠢的事情,但我想问这个问题来澄清我头脑中的事情 我正在做很棒的68k汇编教程()。一切进展顺利,但有一件事我不明白。让我引述: 可以使用一个数据寄存器作为移位大小进行移位,例如: lsl.l d0,d1 现在在本例中,d1向左移动d0中保留的数字。 我们将假装d0包含00000 10F 对于源操作数,仅读取一个字节作为移位计数。自从 d0包含00000 10F,仅使用0F。因此,d1的长单词是 左移0位 可以移位的最大位数取决于所需的大小 选择: 下面是:为什

这可能是非常愚蠢的事情,但我想问这个问题来澄清我头脑中的事情

我正在做很棒的68k汇编教程()。一切进展顺利,但有一件事我不明白。让我引述:

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

      lsl.l     d0,d1
现在在本例中,d1向左移动d0中保留的数字。 我们将假装d0包含00000 10F

对于源操作数,仅读取一个字节作为移位计数。自从 d0包含00000 10F,仅使用0F。因此,d1的长单词是 左移0位

可以移位的最大位数取决于所需的大小 选择:

下面是:为什么对于字节和16位字操作,可以使用全长(0x08表示字节,0x10表示16位字),而对于32位长的字,只能使用0x1F?32位长的字不应该是0x20吗

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

在本教程中,我仍然不理解这个长单词的例外情况


谢谢你的帮助

移位大小最多只能使用0x1F,因为一个长字中有32位,因此只有31位可以将最低顺序的位移位,然后才能完全用完移位位的空间


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

我不确定他们是从哪里得到的。摩托罗拉M68000系列程序员参考手册说移位计数是64模寄存器的内容。我明白了,谢谢。我也不确定。为了进行比较,x86使用
cl&0x1F
为8、16和32位操作数大小屏蔽移位计数,因此可以使用移位将窄寄存器归零,但不能使用32位寄存器。64位操作数大小用
0x3F
屏蔽计数,即模64。(x86移位对于标志设置具有荒谬的CISC语义:如果计数为零,则标志不受影响,因此变量计数移位对标志具有输入依赖性。/facepalm)。@PeterCordes谢谢我现在理解了,所以Michael comment是正确的。@Michael如果你用你的注释回答,我将接受它。谢谢,很乐意帮忙。有时会出现不一致,尤其是在芯片的不同代之间。6800系列演变为680x0系列芯片,最终增加了32位指令。6800系列(两个零)实际上与68000系列(三个零)无关,其中包括68000、68010、68020、68030、68040和68060 CPU。此外,将32位寄存器移位到任意数量的位绝对没有障碍。如果我们有
rol
/
ror
命令,每32次移位,图片就会自动重复;如果我们有
lsl
/
lsr
,如果移位超过31位,我们会得到所有零;如果我们有
asr
,则会得到所有位的符号扩展。@lvd那么答案是错误的,是吗?教程制作者也错了?答案可以随时编辑:)关于教程,我认为在摩托罗拉的原始文档仍然可用的情况下,使用教程几乎没有任何意义。
.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.