【发布时间】: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