在英特尔手册中,有些表包含列表Performance-Monitoring Counters,但它们对特定处理器系列非常具体.
例如,一个表列出了计数器P6 Family,另一个列表列出了Pentium.
在Ubuntu,如果我这样做cat /proc/cpuinfo,我会得到一条说明的行cpu family,但它只是一个数字.这个数字与英特尔的概念之间是否有一些映射processor family?
我也从英特尔看过这个页面,但它甚至没有提到"家庭"这个词.
顺便说一句,我是在一个X3470所以我想也许Xeon是家庭,但手册没有列出它.
我一直在努力理解来自x86汇编语言的ASCII调整指令.
我看到整个互联网信息告诉我不同的事情,但我想这是以不同形式解释的同样的东西,我仍然没有得到.
谁能解释为什么在AAA的伪代码中,AAS我们必须添加,从AL中的低阶半字节中减去6?
并且有人可以在英特尔指令集手册中解释AAM,AAD和Decimal调整指令伪代码,他们为什么这样,他们背后的逻辑是什么?
最后,有人可以举例说明这些说明是否有用,或者至少在过去它们有用的应用程序中.
我知道现在没有使用这些说明,但我仍然想知道这些说明是如何工作的,这很好.
我试图找出LLVM生成的C代码中的目的jp/ jnp指令.样品:
int main(int argc, const char * argv[]) {
double value = 1.5;
if (value == 1.5) {
value = 3.0;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
装配输出:
Ltmp4:
movsd LCPI0_0(%rip), %xmm0
movl $0, -4(%rbp)
movl %edi, -8(%rbp)
movq %rsi, -16(%rbp)
Ltmp5:
movsd %xmm0, -24(%rbp)
Ltmp6:
movsd -24(%rbp), %xmm1
ucomisd %xmm0, %xmm1
jne LBB0_2
jp LBB0_2
## BB#1:
movabsq $3, %rax
cvtsi2sdq %rax, %xmm0
Ltmp7:
movsd %xmm0, -24(%rbp)
Ltmp8:
LBB0_2:
movl $0, %eax
popq %rbp
retq
Run Code Online (Sandbox Code Playgroud)
将jne …
图灵机的定义说,禁止人们阅读/修改其指令表(程序)。确实,图灵机无法访问其自己的程序。
如果可以弱化这一限制,可以获得什么好处?如果机器可以分析和/或修改其程序。这会扩展图灵计算任务的类别吗?
我目前正在尝试使用汇编来加快Cortex-M0(Freescale KL25Z)上的某些C函数的速度。我对这个最小的测试程序有疑问:
@.syntax unified
.cpu cortex-m0
.text
.global test
.code 16
test:
mov r0, #0
adds r0, r0, #1
bx lr
Run Code Online (Sandbox Code Playgroud)
当我尝试将.s文件汇编为.o文件时,出现此错误
$ arm-none-eabi-as test.s -o test.o
test.s: Assembler messages:
test.s:8: Error: instruction not supported in Thumb16 mode -- `adds r0,r0,#1'
Run Code Online (Sandbox Code Playgroud)
该错误消息对我而言没有任何意义,根据该文档,ADDS是有效的说明。我在stackoverflow上找到了一个可能的答案,并在程序的开头添加了这一行(“ .syntax Unified”有效,就像建议的第二个答案一样)。这样就解决了这个问题,我现在可以使用ADDS和ADCS之类的指令,但是我确实收到了一个新错误:
$ arm-none-eabi-as test.s -o test.o
test.s: Assembler messages:
test.s:7: Error: cannot honor width suffix -- `mov r0,#0'
Run Code Online (Sandbox Code Playgroud)
一些使用立即值的指令会出现此错误。我正在Mac OS 10.9.5上编译。我无法通过Google或Stackoverflow找到解决方案,也不知道如何解决这些错误。
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) …Run Code Online (Sandbox Code Playgroud) 我打印了一个简单java程序的执行字节码,并注意到一些java指令是fast_xxxx而不是普通指令。
我在 JVM 规范中找不到任何相关内容。那么这些指令之间到底有什么区别,口译员何时/为何选择使用这些指令呢?
编辑:字节码是用-XX:TraceBytecodes选项打印的。
在ARM64汇编代码中,寄存器号31什么时候表示XZR,什么时候表示SP?
我注意到条件移动指令的可扩展性比普通的mov. 例如,它不支持立即数,也不支持寄存器的低字节。
出于好奇,为什么该Cmov命令比一般mov命令的限制性要大得多?例如,为什么两者不允许这样的事情:
mov $2, %rbx # allowed
cmovcc $1, %rbx # I suppose setcc %bl could be used for the '1' immediate case
Run Code Online (Sandbox Code Playgroud)
附带说明一下,我注意到在使用 Compiler Explorer 时, 的使用量比和cmovcc少得多。通常是这种情况吗?如果是,为什么它的使用频率低于其他条件句?jmpccsetcc