标签: machine-instruction

第一个编译器是如何编写的?

我听说过鸡肉和鸡蛋以及自责.我有几个问题.

编写第一个将某些内容转换为二进制指令的编译器是什

汇编是编译还是翻译成二进制指令?

...我发现很难相信他们用二进制编写了一个编译器.

compiler-construction machine-instruction

161
推荐指数
6
解决办法
4万
查看次数

什么是环路反演技术?

我正在阅读一篇文档,其中讨论了Java的即时编译器(JIT)优化技术.其中一个是"循环反转".文件说:

while循环替换常规do-while循环.而 do-while循环的中设置if条款.这种替换可以减少两次跳跃.

循环反转如何工作以及它如何优化我们的代码路径?

注意: 如果有人可以用Java代码的例子解释JIT如何将其优化为本机代码以及为什么它在现代处理器中是最佳的,那将是很好的.

java jit jvm machine-instruction

89
推荐指数
2
解决办法
4002
查看次数

旋转指令的目的是什么(ROL,x86上的RCL)?

我总是想知道一些CPU具有旋转指令的目的是什么(例如,ROL,x86上的RCL).什么样的软件使用这些说明?我首先想到它们可能用于加密/计算哈希码,但这些库通常用C编写,它没有映射到这些指令的运算符.
有没有人找到他们的用途?为什么他们在指令集中添加了哪些内容?

x86 assembly cpu-architecture machine-instruction

29
推荐指数
3
解决办法
3万
查看次数

ASM 8086中的ADC指令

当我ADC用于exmaple时:

AL = 01 and BL = 02, and CF = 1
Run Code Online (Sandbox Code Playgroud)

当我做这个:

ADC AL,BL 
Run Code Online (Sandbox Code Playgroud)

AL34?(CF加或不加?)

assembly machine-instruction x86-16

11
推荐指数
3
解决办法
3万
查看次数

为什么汇编指令在"lea"指令中包含乘法?

我正在开发一个非常低级别的应用程序,其中性能至关重要.

在调查生成的程序集时,我注意到以下指令:

lea eax,[edx*8+8]
Run Code Online (Sandbox Code Playgroud)

我习惯在使用内存引用时看到添加内容(例如[edx + 4]),但这是我第一次看到乘法.

  • 这是否意味着x86处理器可以在lea指令中执行简单的乘法运算?
  • 这种乘法是否会影响执行指令所需的周期数?
  • 乘法是否限制为2的幂(我会假设是这种情况)?

提前致谢.

x86 assembly disassembly machine-instruction

11
推荐指数
3
解决办法
5067
查看次数

syscall是x86_64上的指令吗?

我想检查在glibc中执行系统调用的代码.我发现了这样的事情.

ENTRY (syscall)
    movq %rdi, %rax     /* Syscall number -> rax.  */
    movq %rsi, %rdi     /* shift arg1 - arg5.  */
    movq %rdx, %rsi
    movq %rcx, %rdx
    movq %r8, %r10
    movq %r9, %r8
    movq 8(%rsp),%r9    /* arg6 is on the stack.  */
    syscall         /* Do the system call.  */
    cmpq $-4095, %rax   /* Check %rax for error.  */
    jae SYSCALL_ERROR_LABEL /* Jump to error handler if error.  */
L(pseudo_end):
    ret         /* Return to caller.  */
Run Code Online (Sandbox Code Playgroud)

现在我的问题是系统调用(在cmpq指令之前)是否是指令?其次,如果它是一个指令,ENTRY(系统调用)的含义是什么?ENTRY的同名(我不知道ENTRY是什么)和指令?其次,L(pseudo_end)是什么?

c linux gcc x86-64 machine-instruction

11
推荐指数
2
解决办法
8114
查看次数

大于和大于或等于之间是否有任何性能差异?

在今天的现代处理器中,分支条件的大于或大于或等于比较之间是否有任何性能差异?如果我有可能很容易被任何条件,没有任何轻微的优势,选择>>=或反之亦然?(这适用于Intel或AMD硬件上的编译语言)

optimization machine-instruction

10
推荐指数
2
解决办法
2523
查看次数

实际的机器代码在各个方面看起来像什么?

关于什么机器代码实际上似乎有很多意见.我听说有人说它是汇编,二进制或十六进制.

说机器代码本质上是特定处理器的一组指令是否正确?如果是这样,我想这些可以用二进制或十六进制表示法或汇编表示.但是非翻译的"实际"机器代码是什么样的?它是基于架构的字大小?或者是十六进制的所有意图和目的的默认表示?

坐在硬盘上的样子是什么样的?坐在登记册上看起来像什么?处理它的时候,它只是一组电压变化吗?

assembly hex machine-code machine-instruction

9
推荐指数
2
解决办法
7573
查看次数

指令和微操作之间的区别

机器指令和微操作有什么区别?我在这里找到了以下定义:

一个小的基本指令,串联使用以组成高级机器指令

这是我在维基百科上发现的

在计算机中央处理单元中,微操作(也称为微操作或微操作)是在一些设计中用于实现复杂机器指令的详细低级指令(在此上下文中有时称为宏指令)

我是否理解微操作是在给定周期中执行的处理器指令.比如和ADD,SUB,MUL,ST,LD一样.我错过了什么吗?

任何帮助表示赞赏.

assembly instructions machine-instruction

8
推荐指数
1
解决办法
3520
查看次数

ARM7 IT(如果那时)指令真正做了什么?

我无法绕过IT指令的功能(如果那样).该快速参考卡有这样的:

操作:If-Then
汇编程序: IT{pattern} {cond}
操作:根据模式,最多可以有条件地执行以下四条指令.pattern是一个最多三个字母的字符串.每个字母可以是T(Then)或E(Else).IT之后的第一条指令条件为cond.如果相应的字母是T,则以下指令具有条件cond,或者如果相应的字母是E,则具有cond的反转.

实际上,这个概要有点意义.体系结构手册条目并没有让我在理解之旅的任何地方:

If-Then条件指令.
句法

IT {x {y {z}}} cond

其中: x 指定IT块中第二条指令的条件开关.
y 指定IT块中第三条指令的条件开关.
z 指定IT块中第四条指令的条件开关.
cond 指定IT块中第一条指令的条件.

IT块中第二,第三和第四条指令的条件开关可以是:
T 然后.将条件cond应用于指令.
E 其他.将cond的逆条件应用于指令.

注意

可以在IT指令中对cond使用AL(始终条件).如果这样做,IT块中的所有指令必须是无条件的,并且x,y和z中的每一个必须是T或省略但不是E.操作

IT指令最多可以有条件地遵循以下四条指令.条件可以完全相同,或者其中一些条件可以是其他条件的逻辑反转.IT指令后面的条件指令构成IT块.

IT块中的指令(包括任何分支)必须在其语法的{cond}部分中指定条件.

由于(大多数)每条指令都可以轻松指定条件,因此IT指令有什么用处?

arm cpu-architecture machine-instruction

7
推荐指数
2
解决办法
2627
查看次数