我很抱歉,如果这是一个错误的地方问这个,但我搜索过,总能找到不同的答案.我的问题是:
哪个更快?缓存或CPU寄存器?
根据我的说法,寄存器是直接加载数据来执行它的,而缓存只是CPU内部或内部的存储位置.
以下是我发现的让我困惑的消息来源:
2缓存| 1用于寄存器
http://in.answers.yahoo.com/question/index?qid=20110503030537AAzmDGp
缓存更快.
http://wiki.answers.com/Q/Is_cache_memory_faster_than_CPU_registers
真的是它呢?
我对手册页中的措辞感到困惑arch_prctl(2).具体来说,它指出:
64位段基的上下文切换相当昂贵. 通过在内核2.5或更高版本中使用modify_ldt(2)或使用set_thread_area(2)系统调用设置LDT,使用段选择器设置32位基址可能是更快的替代方法.只有当您想要设置大于4GB的基数时,才需要arch_prctl().可以使用带有MAP_32BIT标志的mmap(2)来分配前2GB地址空间中的内存.
这是否意味着使用此系统调用的进程的上下文切换将受到性能损失或具有哪些确切含义?
查看Linux内核的源代码后,似乎对于<4 GiB的地址使用LDT,而> 4 GiB地址使用特定于模型的寄存器.
case ARCH_SET_FS:
/* handle small bases via the GDT because that's faster to
switch. */
if (addr <= 0xffffffff) {
set_32bit_tls(task, FS_TLS, addr);
if (doit) {
load_TLS(&task->thread, cpu);
loadsegment(fs, FS_TLS_SEL);
}
task->thread.fsindex = FS_TLS_SEL;
task->thread.fs = 0;
} else {
task->thread.fsindex = 0;
task->thread.fs = addr;
if (doit) {
/* set the selector to 0 to not confuse
__switch_to */
loadsegment(fs, 0);
ret = wrmsrl_safe(MSR_FS_BASE, addr);
} …Run Code Online (Sandbox Code Playgroud) 我正在阅读MIPS中的分区,我发现了div
将$ s除以$ t并将商存储在$ LO中,余数存入$ HI
http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html
维基百科说
HI和LO用于访问乘法器/除法器结果,由mfhi(从高位移动)和mflo命令访问.
http://en.wikipedia.org/wiki/MIPS_architecture
HI和LO寄存器吗?它们是多少个寄存器?
谷歌没有显示结果,
有谁知道?
我正在读一些C文本.在"否定"和"正面价值"会话中,作者提到了以二进制形式表示负数的几种方法.
我一直都明白,并且想知道如果给出二进制数,我们能否确定它是否为负数?
例如,-92具有8位二进制形式:10100100.但是如果我们给出的话我们10100100可以说是-92,而不是其他非负数吗?
x86汇编语言不得不改变,因为x86处理器架构已经从8位变为16位变为32位,现在变为64位.
我知道在32位汇编程序寄存器名称(EAX,EBX等)中,每个名称的E前缀代表扩展意味着32位形式的寄存器而不是16位形式(AX,BX等).
这些寄存器名称的R前缀在64位中代表什么?
根据英特尔在x64中,以下寄存器称为通用寄存器(RAX,RBX,RCX,RDX,RBP,RSI,RDI,RSP和R8-R15)https://software.intel.com/en-us/articles/介绍到x64组装.
在下面的文章中,写了RBP和RSP是专用寄存器(RBP指向当前堆栈帧的基础,RSP指向当前堆栈帧的顶部). https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
现在我有两个相互矛盾的陈述.英特尔声明应该是值得信赖的,但是什么是正确的,为什么RBP和RSP被称为通用目的?
谢谢你的帮助.
我现在正在参加一个装配课程,那个检查我们家庭作业的人是一个非常迂腐的老派优化狂.例如,如果他看到,他会扣除10%:
mov ax, 0
Run Code Online (Sandbox Code Playgroud)
代替:
xor ax,ax
Run Code Online (Sandbox Code Playgroud)
即使它只使用一次.
我不是一个完整的汇编程序初学者,但我不是一个优化专家,所以我需要你的帮助(可能是一个非常愚蠢的问题,但无论如何我都会问):如果我需要将寄存器值设置为1或(-1)最好使用:
mov ax, 1
Run Code Online (Sandbox Code Playgroud)
或做类似的事情:
xor ax,ax
inc ax
Run Code Online (Sandbox Code Playgroud)
我真的需要一个好成绩,所以我试图让它尽可能优化.(我需要优化时间和代码大小)
我正在尝试为$(ARCHS_STANDARD_32_BIT)体系结构构建ios项目- armv7对于最新的iOS(iOS 7.0),我遇到以下错误:
Unknown register name 'q0' in asm
Run Code Online (Sandbox Code Playgroud)
在功能上
static void neon_asm_mat4_vec4_mul(const float* __restrict m, const int* __restrict v, int* __restrict output)
{
asm volatile
(
// Store m & v - avoiding q4-q7 which need to be preserved - q0 = result
"vldmia %1, { q8-q11 } \n\t" // q8-q11 = m
"vldmia %2, { q1 } \n\t" // q1 = v
// Convert v to floats
"vcvt.f32.s32 q1, q1 \n\t"
// result = first …Run Code Online (Sandbox Code Playgroud)