简单的C代码,只需添加一个双精度。
void test(double *a, double *b, long n) {
for (long j = 0; j < n; j++)
for (long i = 0; i < n; i++) {
b[i] = b[i] + a[j];
}
}
Run Code Online (Sandbox Code Playgroud)
在编译器资源管理器中获取ASM结果:https : //godbolt.org/z/tJ-d39
有一addpd和二addsd。两者都是与双精度有关的。
另一个类似的锈代码,获得了更多的双精度添加工具:https://godbolt.org/z/c49Wuh
pub unsafe fn test(a: &mut [f64], b: &mut [f64], n: usize) {
for j in 0..n {
for i in 0..n {
*b.get_unchecked_mut(i) = *b.get_unchecked_mut(i) + *a.get_unchecked_mut(j);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有memchr我要使非分支的这段代码:
.globl memchr
memchr:
mov %rdx, %rcx
mov %sil, %al
cld
repne scasb
lea -1(%rdi), %rax
test %rcx, %rcx
cmove %rcx, %rax
ret
Run Code Online (Sandbox Code Playgroud)
我不确定是否cmove是分支指令。是吗?如果是这样,如何重新排列我的代码,使其不分支?
assembly x86-64 cpu-architecture micro-optimization branch-prediction
我正在尝试用汇编语言编写 XOR 运算,但我们允许使用的唯一运算是 AND 和 NOT,不是 OR,也绝对不是 XOR。我在网上到处查了一下,似乎找不到答案。我知道: XOR = (P 或 Q)和 ~(P 和 Q) 但我需要用 AND 运算重写(P 或 Q) 。这可能吗?
assembly boolean-logic boolean-expression demorgans-law boolean-algebra
我听说
strlen()C 标准库中的字符串操作(例如)访问和操作字符串的字符,一次一个字符。以上是真的吗?
有哪些解决方案可以提高字符串操作的时间性能?
所以现在我读了《ARM Cortex-M3/M4 权威指南》一书,无法理解为什么 16 位指令无法访问高级通用寄存器 R8-R12。
它说实际上很少有人可以访问这些寄存器,但大多数不能。
首先,不,我不是在谈论 C++ 范围解析运算符。
我有以下语法:
asm(
"mov R0,%0\n"
"mov R1,%1\n"
"mov R3,%2\n"
"mov R4,%3\n"
"mov R5,%4\n"
::"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
:"r0","r1","r2"
)
Run Code Online (Sandbox Code Playgroud)
冒号和双冒号是什么意思?我确实记得在动态创建变量名时与字符串连接有关。
万提前致谢!
我知道它们是唯一可以用于间接寻址的寄存器,但我找不到解释为什么我不能同时使用这些寄存器对。
为什么机器不支持这样的寻址方式[si+di]?
我正在编写一些 x86 汇编语言,但遇到了问题。最终,程序会询问用户一个问题,他们必须回答“a”或“b”。如果他们选择“a”,程序应该跳转到循环二,但如果他们选择“b”,则应该跳转到循环三。我的问题是,无论他们选择什么,程序都会打印循环二和循环三。
one:
mov eax, choice1
call print_string
call read_char
cmp al, 'a'
jl three
jmp two
two:
mov eax, choice2
call print_string
call read_char
cmp al, 'a'
jl four
jmp five
Run Code Online (Sandbox Code Playgroud) 下面的代码占用 20 个字节。然而,有一种方法可以通过中断使其变得更小。如何?
\nA\nMOV AH,9\nMOV DX,108\nINT 21\nRET\nDB 'HELLO WORLD$'\n\nR CX\n14\nN MYHELLO.COM\nW \nRun Code Online (Sandbox Code Playgroud)\n 我正在研究计算机体系结构,但我不明白是什么真正使一台机器的软件与另一台机器“兼容”。让我们以两台使用相同 intel cpu 的机器(例如 Mac OS 和 Windows)为例。现在,如果操作码相同,它们的软件怎么可能彼此不兼容?
1)有人可以概述一下兼容性词所涉及的内容吗?
2)除了CPU的操作码之外,还有哪些因素可以使两台机器相互兼容?