问题标签 [machine-language]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
208 浏览

assembly - x64 计算向前跳跃

如果你有一条向前跳转的指令,有没有办法计算偏移地址,或者你只是在第二次通过时计算绝对跳转?

像这样:

在这种情况下,编译器是否只使用绝对跳转?我的意思是可以在这样的简单情况下计算偏移量,但是随着标签的增多,它的成本会成倍增加,更不用说相互嵌套的跳转和标签了......

0 投票
2 回答
3995 浏览

assembly - 在ARM cortex m0中,第一条指令是什么?

我正在尝试学习使用 cortex m0 处理器。我有一个 stm32f0 开发板,可以让我查看每个地址的每一位并轻松上传新的二进制文件。我一直在阅读大量有关许多规则和功能的手册,但仍然不知道程序计数器在重置时从哪里开始,它期望什么类型的参数,我什至不知道如何编写诸如 add 之类的东西或二进制形式的 str/ldr。我读过的手册中是否遗漏了这些基本知识?

它说 m0 有一个完整的降序堆栈,但似乎表明起点在另一端(0x00000000)。如果向量表也可以用外行的术语来解释,那就太好了。

0 投票
2 回答
554 浏览

c - 文件的机器代码(可执行文件)?

如何访问可执行文件的机器代码(二进制文件)?

细节

  • 我在 Ubuntu (Linux) 上
  • 我想访问 .exe 文件的机器代码(二进制文件)(文件遵循 PE 格式)
  • 我正在使用 C 来实现
0 投票
1 回答
159 浏览

c - __interceptor_strchr 做什么?

我的函数在此机器指令之后立即崩溃(由于堆栈溢出):

做什么__interceptor_strchr(char const*, int)

0 投票
1 回答
172 浏览

c - 该机器代码如何防止缓冲区溢出?

以下是三个不同 .s 文件的一部分。.c 文件已使用三个不同的选项进行编译:

  1. -fno-inline -fstack-protector-strong,
  2. -fno-inline -fsanitize=地址,
  3. -fno-inline -fno-stack-protector -zexecstack。

以下是 .s 文件的内容:

谁能告诉我这些代码如何防止缓冲区溢出?

0 投票
1 回答
131 浏览

machine-language - 机器语言的语法是否因机器而异?

我有一个关于机器语言的问题。如果我编写一个程序,使用机器语言打印“Hello World”,我的语法会根据我正在编写代码的机器而有所不同。

0 投票
1 回答
1042 浏览

assembly - 机器语言中加减法的基本帮助

我目前正在开始学习机器语言和汇编。我正在处理的程序相当简单,只是十进制和十六进制数的基本加减法,但由于某种原因,我无法得到实际答案。

免责声明:是的,这是一项大学作业。不,我不想让你为我做这件事。我向我的教授寻求帮助,但他的解释只会让我更加困惑 - 所以我希望 stackoverflow 社区可以帮助澄清我的错误在哪里,以便我可以修复它。

我在模拟 H1 和 V1 计算机的 Windows 平台上的“sim”中运行它,所以它是一个模拟环境。

这是日志文件:

所以,这应该做的是:

45(10) + 45(16) - 13(10) - 13(16) + b(16) + (-5)(10)

(10) 是 base10, (16) 是十六进制。为了我自己的理智,当我将这些值输入到程序中时,我将它们转换为 base10 以保持它们的一致性(每个数字旁边的 t 告诉编译器使用 base10)。

这是我对其工作原理的理解:

我告诉它加载内存插槽 10(是的,我知道我在这里浪费了很多内存),我将其设置为初始值 45。然后我在插槽 11 中添加 45,在 12 中减去 13,在 19 中13(十六进制中 13 的十进制形式),14 中的 11,然后 15 中的 -5。然后我将这些全部存储在插槽 16 中。

接下来,在停止程序之前,我以十六进制和十进制形式打印存储在内存插槽 16 中的数字。

到目前为止,我在这一切上都是正确的吗?还是我在某个地方出错了?这就是我很好奇的地方。

现在我的结果是 43,但如果我的数学是正确的,实际的结束数字应该是 59。

任何帮助将不胜感激!

0 投票
0 回答
52 浏览

loops - 汇编语言中由 * 组成的三角形的用户控制网格大小

输入网格大小 (1-9):3

这是我到目前为止的代码:

此代码有效并打印三角形。然而,它进入了一个无限循环,而不是打印网格大小为 3。如果我将代码“N .FILL M”更改为“N .FILL 3”,它将打印出网格大小为 3。任何帮助将不胜感激。谢谢

0 投票
2 回答
302 浏览

assembly - 指令集架构是二进制(不可读)还是人类可读的?

  1. 如果我是正确的,ISA 是机器语言中的一组指令。那么指令是 ISA 0/1 二进制序列吗?
  2. 为什么我看到 ISA 中的说明是书中人类可读的文字?

    ISA 中表示指令的人类可读单词是否与 ISA 汇编语言中使用的助记符相同?

    ISA 中指令的人类可读文字是 ISA 的一部分吗?

    如果是,是否有一个翻译过程可以将 ISA 中的人类可读指令翻译成机器语言,就像汇编程序将汇编语言翻译成机器语言一样?

谢谢。

0 投票
1 回答
1898 浏览

assembly - 将 PEP/8 汇编伪操作转换为十六进制机器语言

我正在阅读教科书Computer Systems 4th Edition。下面的问题是在 Pep/8 虚拟计算机的上下文中。在练习中,我得到了这个问题:

将以下汇编语言伪操作转换为十六进制机器语言:

  1. .ASCII "熊\x00"
  2. .BYTE 0xF8
  3. .WORD 790

我试图将这些值转换为十六进制,但我无法理解教科书对该过程的解释,而且我觉得这本书没有给出太多解释。

对于第一个答案,我认为这是在 ASCII 转换表中的简单查找:

42 65 61 72 00

本练习的答案如下:

  1. 42 65 61 72 00
  2. F8
  3. 0316

尽管知道这些答案,但我不知道如何获得 2 和 3 的答案

这是 Pep/8 汇编器和模拟器的下载链接。这是汇编程序的源代码