标签: instructions

为什么flush_dcache_page()在linux内核中什么都不做?

我发现flush_dcache_page()在x86架构上的linux内核中没有执行任何操作,如下所示

包括/asm-generic/cacheflush.h

Line 17    #define flush_dcache_page(page) do {} while (0)
Run Code Online (Sandbox Code Playgroud)

我认为 x86 arch 上有缓存刷新指令“CLFLUSH”,它可以用于此页面刷新。

然而,flush_dcache_page() 并不像上面的源代码那样运行任何 CPU 指令。

为什么flush_dcache_page()不在x86架构上运行任何指令?

它是否保证将 dcache 中的页面写入主内存?

linux cpu caching kernel instructions

5
推荐指数
1
解决办法
2226
查看次数

这条指令有什么作用( REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS: )?

我正在查看 Intel-x86 程序跟踪并遇到此指令

REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:
Run Code Online (Sandbox Code Playgroud)

我知道

REP MOVS
Run Code Online (Sandbox Code Playgroud)

导致 MOV 指令运行由 ECX 寄存器中的值指定的次数,在我的例子中是 0x2b。

我知道

BYTE PTR
Run Code Online (Sandbox Code Playgroud)

正在确定信息的大小,在这种情况下只是一个字节。

我知道

ES:[EDI]
Run Code Online (Sandbox Code Playgroud)

告诉将 BYTE PTR DS: 中的任何内容移动到 EDI 指向的地址。

我不知道逗号后面的部分是做什么的。

BYTE PTR DS:
Run Code Online (Sandbox Code Playgroud)

问题:

PTR指令为什么会这样?为什么不只是

REP MOVS BYTE ES:[EDI]. BYTE DS:
Run Code Online (Sandbox Code Playgroud)

ES和DS对应的是什么?

谢谢

x86 assembly instructions

5
推荐指数
2
解决办法
7927
查看次数

为什么riscv的JAL指令中的立即偏移位顺序改变了?

位域如下图所示

J格式

我不明白对位字段进行重新排序有什么意义。

RISC-V处理器执行该指令时是否有特殊的操作?

encoding instructions riscv

5
推荐指数
1
解决办法
1127
查看次数

java中的普通指令和快速指令有什么区别(例如aload和fast_aload)

我打印了一个简单java程序的执行字节码,并注意到一些java指令是fast_xxxx而不是普通指令。

我在 JVM 规范中找不到任何相关内容。那么这些指令之间到底有什么区别,口译员何时/为何选择使用这些指令呢?

编辑:字节码是用-XX:TraceBytecodes选项打印的。

java jvm bytecode instructions java-11

5
推荐指数
1
解决办法
335
查看次数

在 ARM64 汇编代码中,什么时候寄存器 31 XZR 与 SP?

在ARM64汇编代码中,寄存器号31什么时候表示XZR,什么时候表示SP?

assembly machine-code cpu-registers instructions arm64

5
推荐指数
1
解决办法
393
查看次数

为什么 x86 只有 1 种形式的条件移动,而不是立即或 8 位?

我注意到条件移动指令的可扩展性比普通的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

x86 assembly cpu-architecture instructions conditional-move

5
推荐指数
1
解决办法
2024
查看次数

动态与静态指令计数

动态和静态指令计数有什么区别?

一个.派生表达式以根据以下参数计算用户CPU时间:动态指令计数(N),每指令时钟周期(CPI)和时钟频率(f)

湾 解释选择"动态"指令计数作为问题3a中的参数而不是"静态"指令计数的原因

mips instructions machine-instruction

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

记忆障碍如何运作?

在Windows下,有三个编译器内部函数来实现内存屏障:

1. _ReadBarrier;

2. _WriteBarrier;

3. _ReadWriteBarrier;
Run Code Online (Sandbox Code Playgroud)

但是,我发现了一个奇怪的问题:_ReadBarrier似乎是一个无效的虚函数!以下是VC++ 2012生成的汇编代码.

我的问题是:如何在汇编指令中实现内存屏障功能?

int main()
{   
013EEE10  push        ebp  
013EEE11  mov         ebp,esp  
013EEE13  sub         esp,0CCh  
013EEE19  push        ebx  
013EEE1A  push        esi  
013EEE1B  push        edi  
013EEE1C  lea         edi,[ebp-0CCh]  
013EEE22  mov         ecx,33h  
013EEE27  mov         eax,0CCCCCCCCh  
013EEE2C  rep stos    dword ptr es:[edi]  
    int n = 0;
013EEE2E  mov         dword ptr [n],0  
    n = n + 1;
013EEE35  mov         eax,dword ptr [n]  
013EEE38  add         eax,1  
013EEE3B  mov         dword ptr [n],eax  
    _ReadBarrier();
    n = n + 1;
013EEE3E …
Run Code Online (Sandbox Code Playgroud)

c c++ assembly execution instructions

4
推荐指数
2
解决办法
1423
查看次数

如何安装py.test?

所以我是Python的新手。这可能是一个非常愚蠢的问题,但是我不知道如何将软件包安装为pytest

如果有人可以给出指示以实现这一目标,那就太好了。

python installation add-on instructions pytest

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

在postgresql中解释(缓冲,分析)

我是postgresql的新手,我试着理解explain(buffers,analyze)指令.我有一个查询,我使用explain(buffers,analyze)执行它.

第一次执行它时性能比第二次差.此外,第一次在'hit'旁边获得'read'参数,而第二次'read'不存在.

有人可以帮我理解吗?

sql postgresql instructions

4
推荐指数
1
解决办法
2156
查看次数