【发布时间】:2021-07-28 13:19:41
【问题描述】:
我目前正在上一门低级编程课程,不幸的是,我在我们的教科书中找不到这些信息(大部分问题都没有包含在我们的教科书中)。我很难确定如何解决这些问题。没有关于“CPU 或任何类似的东西”的信息。问题如下:
给出每条指令的操作码和代码字节数。
(a) mov exc, 984 操作码_____ 字节数_____
(b) xchg eax, ecx Op Code_____字节数_____
还有很多,但如果有人可以帮助我了解如何做到这两个,我希望能够将其转化为其他问题。
我尝试过一件事,但不确定我看到了什么:我在 Visual Studio 2019 中创建了一个小型 *.asm 项目,并在 (a) 中添加了那一行代码并查看了列表文件。我看到它显示以下内容:
00000000 B9 000003D8 mov ecx, 984
我不确定是否可以在这里找到这些信息,我只是错过了它,或者有其他方法可以解决这个问题。
【问题讨论】:
-
x86 机器指令的编码请参考指令集参考。 Visual Studio 为您提供了反汇编,但它似乎将立即数显示为 32 位数字,这可能有点混淆(即您通常将
mov ecx, 984的编码作为b9 d8 03 00 00而不是b9 000003d8)。但总体方法是合理的。组装有问题的指令,然后向反汇编程序询问编码或查看列表是一个好方法。 -
这是有道理的。谢谢你。感谢您的帮助和信息:-)
-
@fuz:instruction-encoding 是新标签吗?对于这样的问题,我一直只使用machine-code;我不确定我们是否需要一个单独的标签来解决有关如何编码指令的问题,尽管这可能是与其他与基本无关的机器代码问题不同的问题。
-
@PeterCordes 这不是我做的标签,我只是发现它正在寻找合适的东西。
-
@fuz: 好吧,如果 [机器代码] 还有其他主要用途,除了特定指令的编码方式/机器代码的工作方式之外,那么是的,有一个单独的标签是有用的.我们可以在其中一些 [机器代码] 问答中添加或替换它。
标签: assembly x86 instruction-encoding