Tag: x86

`testl` eax反对eax?

我想了解一些程序集。 大会如下,我对testl行感兴趣: 000319df 8b4508 movl 0x08(%ebp), %eax 000319e2 8b4004 movl 0x04(%eax), %eax 000319e5 85c0 testl %eax, %eax 000319e7 7407 je 0x000319f0 我想了解%eax和%eax之间的testl点吗? 我认为这个代码的重要性并不重要,我只是试图用自己来理解testing – 这个价值永远不会是真的吗?

在使用DIV指令之前为什么EDX应该为0?

我注意到当EDX包含一些像00401000这样的随机默认值,然后我使用这样的DIV指令: mov eax,10 mov ebx,5 div ebx 它会导致INTEGER溢出错误。 但是,如果我将edx设置为0,并执行相同的操作。 我相信使用div会导致商覆盖eax和其余覆盖edx 。 得到这个INTEGER OVERFLOW错误真的让我困惑。

如何在Windows下编译hello world?

我想在Windows下编写一些基本的东西,我正在使用NASM,但是我什么都不能工作。 如何在没有Windows上的C函数的帮助下编写和编译hello world?

为什么整数在x86上与GCC溢出导致无限循环?

以下代码在GCC上进入无限循环: #include <iostream> using namespace std; int main(){ int i = 0x10000000; int c = 0; do{ c++; i += i; cout << i << endl; }while (i > 0); cout << c << endl; return 0; } 所以这里的交易:签名整数溢出技术上是未定义的行为。 但是x86上的GCC使用x86整数指令实现整数运算 – 在溢出时换行。 因此,我会期望它会溢出 – 尽pipe这是不确定的行为。 但事实并非如此。 那么我错过了什么? 我编译这个使用: ~/Desktop$ g++ main.cpp -O2 GCC输出: ~/Desktop$ ./a.out […]

如果只需要结果的低部分,那么哪个2的补码整数运算可以在input中不调零高位的情况下使用?

在汇编编程中,通常需要从寄存器的低位计算某些值,而不保证其他位为零。 在像C这样的高级语言中,只需简单地将input转换为较小的大小,然后让编译器决定是否需要单独清零每个input的高位,或者是否可以在结束之后剔除结果的高位事实。 对于x86-64(也就是AMD64)来说,这是非常常见的,原因有很多,其中一些出现在其他ISA中。 我将用64位x86作为例子,但其目的是一般性地询问/讨论2的补码和无符号的二进制算术,因为所有现代的CPU都使用它 。 (请注意,C和C ++不保证二进制补码4 ,并且这个有符号溢出是未定义的行为。) 作为例子,考虑一个可以编译成LEA指令的简单函数2 。 (在x86-64 SysV(Linux) ABI 3中 ,前两个函数参数在rdi和rsi ,返回值是rax , int是32位types。 ; int intfunc(int a, int b) { return a + b*4 + 3; } intfunc: lea eax, [edi + esi*4 + 3] ; the obvious choice, but gcc can do better ret gcc知道,即使是负符号整数,除了从右到左,input的高位不会影响进入eax 。 因此, 它保存了一个指令字节并使用 lea […]

为什么在x86上自然alignment的variablesprimefaces上的整数赋值?

我一直在阅读这篇关于primefaces操作的文章 ,它提到了x86上的32位整数赋值是primefaces的,只要variables是自然alignment的。 为什么自然alignment确保primefaces性?

x86分页如何工作?

这个问题是为了填补关于这个问题的好的免费信息的真空。 我相信一个好的答案可以适合于一个大的答案,或者至less在几个答案中。 主要目标是为初学者提供足够的信息,以便他们可以自己学习手册,并能够理解与分页相关的基本操作系统概念。 build议的准则: 答案应该是初学者友好的: 具体,但可能简化的例子是非常重要的 所示概念的应用是受欢迎的 引用有用的资源是好的 欢迎使用操作系统使用分页function的小型离线 PAE和PSE的解释是受欢迎的 欢迎使用x86_64进行小型离线 相关的问题和为什么我认为他们不是骗局: x86页表如何工作? :标题与这个问题几乎是一样的,但是身体询问有关cr3和TLB的具体问题。 这个问题是这个问题的一个子集。 x86虚拟化是如何工作的 :body只要求来源。

如何用SSE4.2和AVX指令编译Tensorflow?

这是从运行脚本检查Tensorflow是否正在工作收到的消息: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are […]

为什么这个C ++代码比testingCollat​​z猜想的手写组件更快?

我在汇编和C ++中为Project Euler Q14编写了这两个解决scheme。 它们是testingCollat​​z猜想的完全相同的蛮力方法。 assembly解决scheme是与组装 nasm -felf64 p14.asm && gcc p14.o -o p14 C ++编译了 g++ p14.cpp -o p14 大会, p14.asm section .data fmt db "%d", 10, 0 global main extern printf section .text main: mov rcx, 1000000 xor rdi, rdi ; max i xor rsi, rsi ; i l1: dec rcx xor r10, […]

在x86上执行水平浮点vector和的最快方法

你有一个三(或四)的花车vector。 什么是总结他们最快的方法? SSE(movaps,shuffle,add,movd)总是比x87快吗? SSE4.2中的横向增加指令是否值得呢? 迁移到FPU的费用是多less,然后是faddp,faddp? 什么是最快的具体指令序列? “尝试安排事物,所以你可以一次总结四个向量”将不被接受为答案。 🙂