问题标签 [instructions]

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 投票
8 回答
86592 浏览

assembly - `testl` eax 对 eax?

我试图了解一些装配。

汇编如下,我感兴趣的testl行:

我试图理解testl介于%eax和之间的那个点%eax?我认为这段代码的细节并不重要,我只是想用它本身来理解测试——这个值不总是正确的吗?

0 投票
8 回答
8433 浏览

c - 每个 C 指令有多少个 asm 指令?

我意识到这个问题不可能绝对回答,但我只是在了解大致数字:

给定一个合理大小的 C 程序(数千行代码),平均会生成多少条 ASM 指令。换句话说,现实的 C 与 ASM 指令比率是多少?随意做出假设,例如“使用当前的 x86 架构”。

我试图谷歌这件事,但我找不到任何东西。

附录:注意到这个问题带来了多少混乱,我觉得需要解释一下:我想通过这个答案知道,实际上是知道“3GHz”是什么意思。我完全清楚每赫兹的吞吐量因架构、硬件、缓存、总线速度和月球位置而有很大差异。

我不是在追求一个精确和科学的答案,而是一个可以放入可理解的尺度的经验答案。

这不是一个简单的地方答案(正如我注意到的那样),这是我最大的努力。我知道每行 C 的 ASM 结果行的数量取决于您在做什么。与- 我知道这i++一点不在同一个街区。sqrt(23.1)此外,无论我从 C 中得到什么 ASM,ASM 都会被解释为处理器内的各种微码集,这又取决于您运行的是 AMD、Intel 还是其他东西,以及它们各自的世代。我也知道这一点。

到目前为止,我得到的大致答案是我一直在追求的:一个足够大的项目平均每 1 行 ANSI-C 大约 2 行 x86 ASM。一旦流水线被填满并且给定足够大的样本,今天的处理器可能平均每个时钟周期大约有一个 ASM 命令。

0 投票
2 回答
1601 浏览

assembly - 递归汇编调用虽然源代码中没有递归

我有一个来自转储的代码片段,我想了解它。最困扰我的是(看似)递归调用,例如

bd604: e8 fc ff ff ff 调用 bd605 + 0xb5

他们在做什么?我不在原始函数中使用递归。

谢谢@schnaader

似乎呼叫使 cld 并跳转到 EAX

编辑:我的功能的完整 dmp

0 投票
3 回答
1119 浏览

assembly - 等效指令数

我有一个问题(就像我一样)......

但是......如果我有一个用 C 或 C++ 或任何你想要的代码编写的选择算法......修复了一个编译器,我可以确定指令的数量,但这些指令彼此不同:x ADD,y MUL,z MOV , f FADD, t FMUL (F 代表 FLOATING)...是否有一种方法或等式或其他东西允许以“等效指令”的数量编写指令数量来比较不同的算法?你们中是否有人使用这种类型的指标?是垃圾吗?

谢谢

马可

第 2 部分:我知道它通常依赖于 uP 和架构。我的问题是:确定在不同软核架构上实现的不同算法的执行时间。在 y 轴上我必须写下时间,在 x 轴上,指令的数量和图形的点由架构类型参数化(请原谅我的英语)。但是在 x-axix 上,我认为最好使用类似“等效指令”的数量......

这是一个垃圾的想法吗?

0 投票
4 回答
678 浏览

time - 平均教学时间

假设我们平均每 20,000,000 条指令有一个页面错误,一条正常指令需要 2 纳秒,而一个页面错误导致指令需要额外的 10 毫秒。考虑到页面错误,平均指令时间是多少?

0 投票
2 回答
1202 浏览

assembly - 64位汇编的32位指令

我开始将一个用 C 语言编写的程序移植到 64 位机器上,并用汇编语言编写了几段代码,其中包含用于 32 位机器(如ljmp)的指令。

是否有地方/文档有汇编指令,用于 32 位机器和对应的 64 位机器?如果没有,我在哪里可以找到列出 32 位和 64 位机器的所有指令的文档?


很明显,我是这种情况的新手。让我们澄清一些观点。

我在早期移植操作系统。它是在考虑 x86 机器的情况下编写的。现在,我希望它在 x86_64 上运行。

它是在考虑了 UNIX 的 Linux 机器中编写的。我几乎可以肯定原作者是在英特尔机器上编写的。我也在英特尔,但我也想在 AMD 上运行操作系统。

使用的编译器是 gcc。

0 投票
6 回答
1865 浏览

c++ - 分析说明

我想在我的代码中计算几个 cpu 指令。例如,我想知道我的代码执行了多少次加法、多少次乘法、多少次浮点运算、多少个分支。我目前在 Linux 下使用 gprof 来分析我的 c++ 代码,但它只给出了对我的函数的调用次数,并且我手动估计了指令的数量。是否有任何工具可以为我解决问题?也许是一些虚拟机?

0 投票
6 回答
43035 浏览

assembly - 在两个内存地址之间移动

我正在尝试学习汇编(所以请耐心等待),但在这一行出现编译错误:

错误是

我怀疑这个错误的原因仅仅是一个 mov 指令不可能在两个内存地址之间移动,但是半小时的谷歌搜索我无法确认 - 是这样吗?

另外,假设我是对的,这意味着我需要使用寄存器作为复制内存的中间点:

推荐使用什么寄存器(或者我应该使用堆栈代替)?

0 投票
2 回答
892 浏览

turing-machines - 图灵机指令表

图灵机的定义说禁止读取/修改它的指令表(程序)。确切地说,图灵机无法访问它自己的程序。

如果可以削弱这种限制,可以带来什么好处?如果一台机器可以分析和/或修改它的程序。这会扩展图灵可计算任务的类别吗?

0 投票
4 回答
12326 浏览

binary - 可执行文件究竟是如何工作的?

我知道可执行文件包含指令,但这些指令到底是什么?例如,如果我想调用MessageBoxAPI 函数,指令是什么样的?

谢谢。