标签: instructions

分析说明

我想在我的代码中计算几个cpu指令.例如,我想知道有多少次添加,多少次乘法,多少次浮点运算,我的代码执行了多少个分支.我目前在Linux下使用gprof来分析我的c ++代码,但它只给出了对我的函数的调用次数,并且我手动估计了指令的数量.是否有任何工具可以帮助我?也许是一些虚拟机?

c++ profiling instructions

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

测量执行单个指令的时间

有没有办法使用C或汇编程序甚至C#来准确衡量执行ADD指令所需的时间?

c time assembly instructions

2
推荐指数
1
解决办法
3597
查看次数

英特尔 8080 仿真器测试仪

我为 Intel 8080 编写了一个模拟器,我想检查我实现的指令是否正确。是否有测试套件或方法来测试每条指令是否正确?

我的模拟器是用 C 编写的。

assembly emulation instructions test-suite intel-8080

2
推荐指数
1
解决办法
2758
查看次数

如何使用SSE2/SSE3/SSE4处理24位3通道彩色图像?

我刚开始使用SS2优化图像处理,但对于3通道24位彩色图像却不知情.我的pix数据由BGR BGR BGR ...排列,unsigned char 8-bi,所以如果我想用SSE2/SSE3/SSE4的C/C++指令实现Color2Gray,我该怎么办?是否需要对齐我的像素数据(4/8/16)?我读过文章:http://supercomputingblog.com/windows/image-processing-with-sse/ 但它是ARGB 4通道32位颜色,每次都精确处理4色像素数据.谢谢!

//Assume the original pixel:
      unsigned char* pDataColor=(unsigned char*)malloc(src.width*src.height*3);//3

  //init pDataColor every pix val
  // The dst pixel:
  unsigned char* pDataGray=(unsigned char*)malloc(src.width*src.height*1);//1 
Run Code Online (Sandbox Code Playgroud)

// RGB->灰色:Y = 0.212671*R + 0.715160*G + 0.072169*B.

optimization opencv image-processing instructions sse2

2
推荐指数
1
解决办法
2903
查看次数

装配零和相等之间的差异

我是一个在广阔的装配世界中的完全初学者,在学习的过程中,我遇到了一个奇怪的事情.

条件跳转是在标志检查的基础上完成的,以查看某些运算符如何比较.但是,似乎有两种不同的方法来进行检查.几乎每个条件跳转指令,似乎都有一个完全相同的对应物,只是用不同的符号.例如,je似乎是相同的jz.据我所知,如果在指令设置零标志之前比较两个操作数,这两条指令都会跳转.这里的说明有什么区别.一个比另一个更有效吗?是否会产生更多开销?区别仅在于可读性吗?

还有一些其他说明似乎也是一样的:

  • loopz/loope
  • jb/jc
  • jnz/jne

comparison x86 assembly instructions

2
推荐指数
1
解决办法
314
查看次数

使用 gcc 修改内存中的下一条指令

我想在获取下一条指令之前修改它,在foo 函数中的这篇文章的最佳答案中,*p指向 main 函数中的下一条指令。我想修改where*p指向的内容。例如我想将下一条指令更改为跳转指令。我怎样才能做到这一点?

void foo()
{
    void** p = search((void**)&p, __builtin_return_address(0));
    // modify content of where *p points at.
}

int main()
{
    
    foo();
    //next instruction. *p points here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想在 intel Core-i7 3632QM 处理器上使用 gcc 编译器来执行此操作。

c assembly gcc instructions self-modifying

2
推荐指数
1
解决办法
547
查看次数

x64 MOV 32位立即数到64位寄存器

本页代码部分的第二条指令:

x86

看起来像这样:MOV r9d, 0。编码如下:41 B9 00 00 00 00

唯一的问题是... Intel x64 手册中没有任何MOV指令可以获取 4 字节立即数并将其放入 64 位寄存器中。

这些是英特尔手册中的说明:

B0+ rb          MOV r8, imm8 Move imm8 to r8.
REX + B0+ rb    MOV r8***, imm8 Move imm8 to r8.
B8+ rw          MOV r16, imm16 Move imm16 to r16.
B8+ rd          MOV r32, imm32 Move imm32 to r32.
REX.W + B8+ rd  MOV r64, imm64 OI Valid N.E. Move imm64 to r64.
Run Code Online (Sandbox Code Playgroud)

该指令似乎有效,但是如何呢?

assembly x86-64 machine-code instructions immediate-operand

2
推荐指数
1
解决办法
3859
查看次数

我无法理解 ARM 中的一些指令:SBC、RSC

我不明白SBCRSCARM指令

我知道两者都处理进位标志(C)

我认为用进位 ( ADC)添加结果是有意义的,例如:

ADC r1, r2, r3   @ r1 = r2 + r3 + Carry 
Run Code Online (Sandbox Code Playgroud)

但是用进位减法/反向减法……我不明白发生了什么:(

你们能给我一个使用SBCand的例子RSC吗?

assembly arm instructions carryflag

2
推荐指数
1
解决办法
3855
查看次数

现代CPU是否有压缩指令

我一直对此感到好奇,因为压缩几乎用于所有事物。

  • 典型的现代CPU芯片的硅片上是否有任何基本的压缩支持说明?

  • 如果没有,为什么不包括在内?

  • 为什么这与加密不同?在加密中,某些CPU对AES等算法具有硬件支持?

cpu-architecture instructions

2
推荐指数
1
解决办法
983
查看次数

为什么没有实现 DIV 指令来设置 CF 而不是引发异常

我知道在组装时必须非常小心,即这样做:

          mov ah, 10h
          mov al, 00h ; dividend = 1000h
          mov bl, 10h ; divisor = 10h
          div bl      ; Integer overflow exception, /result 100h cannot fit into al
Run Code Online (Sandbox Code Playgroud)

我已经编写了一些可能不可靠的逻辑来为除法创建一个更友好的环境:

          mov ah, 10h
          mov al, 00h
          mov bl, 10h 
TryDivide:
          cmp bl,ah
          jna CatchClause
          div bl
          clc
          jmp TryEnd
CatchClause:
          stc
TryEnd:
     
Run Code Online (Sandbox Code Playgroud)

有没有人知道类似这样的事情没有实现的技术原因,我们有例外而不是标志设置/寄存器被截断?

x86 assembly cpu-architecture integer-division instructions

2
推荐指数
1
解决办法
95
查看次数