【问题标题】:What does it mean by MOV D D?MOV D D 是什么意思?
【发布时间】:2013-07-16 10:19:00
【问题描述】:

汇编语言,指令

MOV A B

表示将B(源)的内容移动到A(目标)。
我突然想到了指令

MOV D D

这意味着什么?

我在我的实验室手册中看到了这一点。截图:

【问题讨论】:

  • 这可能是一种编写无操作代码的方法。
  • @HansPassant;您的意思是禁用这些说明只是为了不增加成本?
  • 这个问题是关于 8085 汇编语言的吗?
  • 为什么要关闭投票?和编程无关吗?

标签: assembly microprocessors 8085


【解决方案1】:

您必须牢记那个时代,8085 是在 1977 年设计的。当时集成电路工艺技术还没有那么先进,他们可以在芯片上放置的晶体管数量有一个非常严格的上限。它只使用了其中的 6,500 个。

这严重限制了他们可以用来实现处理器的逻辑类型。操作码中选择操作数的位直接传递给寄存器组多路复用器。并且在使用寄存器的其他指令中占据相同的位位置和含义。烧毁额外晶体管以对没有意义的操作数进行特殊例外的预算是不可用的。将它们留在原处而不用尽逻辑来处理异常情况要简单得多,而且成本更低。

问题不大,没有人会意外使用这些无意义的指令。

顺便说一句,它也以相反的方式工作,有时处理器在指令集中有一个明显的漏洞。 Z80就是这样。用于在最初的几次硅通道中出现错误并且被认为不足以修复的指令。所以他们只是把它排除在文档之外。或者将它们留在原处,6502 是notoriously buggy。不过价格非常诱人:)

【讨论】:

  • 感谢分享这些历史信息。很高兴知道。
【解决方案2】:

8085 寄存器到寄存器 MOV 指令是正交的。也就是说,有一些操作码可以将任何 8 位寄存器移动到任何其他 8 位寄存器。所以MOV D,D将D寄存器的内容移动到D寄存器。它没有做任何有用的事情,也不会影响任何标志,但它是一个有效的指令,就像MOV A,AMOV B,B 等一样。

将寄存器复制到自身实际上是“无操作”或NOP 指令。 “官方”8085 NOP 是操作码 00,但任何 register-move-to-itself 指令都具有相同的效果。

这实际上只是处理器设计方式的产物。您可以利用这些指令执行一些技巧,但它们通常没有用处。

【讨论】:

  • 什么时候需要NOP指令?
  • 根据Wikipedia article:“NOP 最常用于计时目的、强制内存对齐、防止危险、占用分支延迟槽或作为占位符稍后在程序开发中被主动指令取代......”
  • 不适用于 8085,这些注意事项仅适用于带有管道的处理器。您在调试汇编代码时使用它来禁用代码。这个问题让我觉得自己老了:)
  • @HansPassant:我似乎记得在 8080 和 Z80 上使用 NOP 进行计时循环和一些相当狡猾的自修改代码。
  • 另一种用途是早期 x86-Pentiums 上的“非法”指令rep nop 具有超线程,可在自旋锁的忙等待自旋循环期间有效地产生产量。后来的处理器为此添加了专用的pause 指令。 (这是相同的说明,只是记录在案。)
【解决方案3】:

这是一个NOP操作,用于程序延迟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2019-12-05
    • 2014-06-04
    相关资源
    最近更新 更多