【问题标题】:What addressing mode is used for a MOV AL, ' * ' instructionMOV AL, ' * ' 指令使用什么寻址模式
【发布时间】:2019-01-13 19:49:45
【问题描述】:

我正在准备考试,但还没有找到与此类似的示例。

我可以看到mov al, '*' 正在将一个字符移动到一个寄存器中,但我不确定该特定功能使用什么寻址模式。

【问题讨论】:

  • 立即(这不是真正的寻址,因为什么都没有解决)。
  • 汇编器会将其编码中的字符(通常为 ASCII)转换为数值(星号由 value 42 表示,并且因为目标是 al,所以数值被截断为 8 位 - 全部ASCII 码确实适合 7 位,因此不需要截断,但假设您的汇编程序以其他编码运行,结果值可能是 16 位(如 UCS2 编码)甚至是可变字节长度(UTF8)。所以生成的机器代码与mov al,42 相同,但在源代码级别,“字符”为源代码阅读器提供了更多上下文。
  • @Ped7g 如标题所示,它是mov al, ' * ',所以实际上你会得到mov al, 32,因为字符常量中的第一个字符是空格。正如你所说,它被截断为操作数大小。我认为这不是故意的,所以我将mov al, '*' 放在问题正文中。
  • @PeterCordes 我认为这只是避免斜体的人不知道用反斜杠转义星号的可能性,但实际上主题中的单个星号是无害的......如果 OP会澄清它是al, '*' 还是带有空格的变体(我很难相信)。此外,它可能是从书/纸(而不是源编辑器)手动复制编写的,而 OP 没有意识到撇号和星号之间没有空格......很难说,但其他人不太可能搜索字面意思 '*',所以可能没关系。

标签: assembly x86 computer-science addressing-mode


【解决方案1】:

将文字移入寄存器时,称为立即模式。

Here's 一个有用的参考,它定义了处理器中最常用的模式,以 MIPS 指令集为例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2011-10-25
    • 2018-11-14
    • 2014-09-10
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多