我听说过鸡肉和鸡蛋以及自责.我有几个问题.
编写第一个将某些内容转换为二进制指令的编译器是什
汇编是编译还是翻译成二进制指令?
...我发现很难相信他们用二进制编写了一个编译器.
我正在阅读一篇文档,其中讨论了Java的即时编译器(JIT)优化技术.其中一个是"循环反转".文件说:
用
while循环替换常规do-while循环.而do-while循环的中设置if条款.这种替换可以减少两次跳跃.
循环反转如何工作以及它如何优化我们的代码路径?
注意: 如果有人可以用Java代码的例子解释JIT如何将其优化为本机代码以及为什么它在现代处理器中是最佳的,那将是很好的.
我总是想知道一些CPU具有旋转指令的目的是什么(例如,ROL,x86上的RCL).什么样的软件使用这些说明?我首先想到它们可能用于加密/计算哈希码,但这些库通常用C编写,它没有映射到这些指令的运算符.
有没有人找到他们的用途?为什么他们在指令集中添加了哪些内容?
当我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)
会AL是3或4?(CF加或不加?)
我正在开发一个非常低级别的应用程序,其中性能至关重要.
在调查生成的程序集时,我注意到以下指令:
lea eax,[edx*8+8]
Run Code Online (Sandbox Code Playgroud)
我习惯在使用内存引用时看到添加内容(例如[edx + 4]),但这是我第一次看到乘法.
提前致谢.
我想检查在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)是什么?
在今天的现代处理器中,分支条件的大于或大于或等于比较之间是否有任何性能差异?如果我有可能很容易被任何条件,没有任何轻微的优势,选择>了>=或反之亦然?(这适用于Intel或AMD硬件上的编译语言)
关于什么机器代码实际上似乎有很多意见.我听说有人说它是汇编,二进制或十六进制.
说机器代码本质上是特定处理器的一组指令是否正确?如果是这样,我想这些可以用二进制或十六进制表示法或汇编表示.但是非翻译的"实际"机器代码是什么样的?它是基于架构的字大小?或者是十六进制的所有意图和目的的默认表示?
坐在硬盘上的样子是什么样的?坐在登记册上看起来像什么?处理它的时候,它只是一组电压变化吗?
我无法绕过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指令有什么用处?
assembly ×5
x86 ×2
arm ×1
c ×1
disassembly ×1
gcc ×1
hex ×1
instructions ×1
java ×1
jit ×1
jvm ×1
linux ×1
machine-code ×1
optimization ×1
x86-16 ×1
x86-64 ×1