标签: instruction-set

x86-64中movq和movabsq之间的区别

我是这里的新手,刚刚开始学习汇编语言.所以,如果我错了,请纠正我,或者如果这篇文章没有任何意义我会删除.

我在讨论x86-64英特尔架构中的数据移动指令.我已经读过,常规movq指令只能有直接的源操作数,可以表示为32位二进制补码数,而movabsq指令可以有任意64位立即数作为其源操作数,并且只能有一个寄存器作为目标.

你能详细说明一下吗?这是否意味着我只能使用movabsq指令移动64位立即值?只有立即价值到登记册?我不知道如何将64位立即值移动到内存中.或者也许我错了一些重要的事情.

x86 assembly x86-64 instruction-set att

19
推荐指数
1
解决办法
8093
查看次数

在手臂组装中

以下行在arm组件中做了什么:

000031e6        2916    cmp r1, #22
000031e8        bf1a    itte    ne
Run Code Online (Sandbox Code Playgroud)

我得到了第一行(比较r1到22)但是第二行怎么样(我之前从未见过itte命令而googling没有返回任何内容)

embedded assembly arm instruction-set thumb

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

应用程序如何确定指令集是否可用并在可用时使用它?

有趣的是它在游戏和其他软件中的工作原理。
更准确地说,我正在寻求一个解决方案C++
就像是:

if AMX available -> Use AMX version of the math library
else if AVX-512 available -> Use AVX-512 version of the math library
else if AVX-256 available -> Use AVX-256 version of the math library
etc.  
Run Code Online (Sandbox Code Playgroud)

我的基本想法是在不同的 DLL 中编译库并在运行时交换它们,但这对我来说似乎不是最好的解决方案。

c++ windows assembly instruction-set cpuid

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

如何对ARM进行整数(有符号或无符号)除法?

我正在研究Cortex-A8和Cortex-A9.我知道有些架构没有整数除法,但除了转换为float,divide,转换为整数之外,最好的方法是什么?或者这确实是最好的解决方案?

干杯! =)

assembly arm instruction-set integer-division cortex-a8

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

ARM的构造SWI和SVC是完全一样的吗?

ARM程序集具有用于进入"管理员模式"的SWI和SVC指令.

令我困惑的是,为什么有两个?这里据说SVC是以前的SWI.这是否意味着基本上他们改变了助记符?它们是一样的吗?我可以互换使用吗?其中一个存在于架构之前,还有其他之后?

embedded assembly arm instruction-set

16
推荐指数
1
解决办法
7305
查看次数

在C++中,使用std :: min或if分支限制值是否更好?

编程中一种非常常见的模式是在某种更新后将值限制在最大值.我想知道的是,如果以下两段代码之间存在差异,并且是否应该首选:

value += increment;
value = std::min(value, valueMax);
Run Code Online (Sandbox Code Playgroud)

VS

value += increment;

if (value > valueMax)
    value = valueMax;
Run Code Online (Sandbox Code Playgroud)

我的想法是,这取决于CPU是否有获取两个值并产生最小值的指令.如果是这样,对std :: min的调用应该导致该指令并避免不必要的分支.如果不是,则第二个版本在值<= valueMax时避免不必要的赋值.

我对这种事情不是很了解,但我确信有老派的黑客大佬会知道这一点.我问他们:哪个更好?

c++ cpu instruction-set minimum

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

8086-为什么我们不能将立即数据移入段寄存器?

在8086汇编编程中,我们只能将数据加载到段寄存器中,首先将其加载到通用寄存器中,然后我们必须将它从这个通用寄存器移到段寄存器中.

为什么我们不能直接加载它?有没有被允许的特殊原因?

mov ax,5000H和之间有什么区别mov ax,[5000H][5000h]内存位置5000h的含义是什么意思?

x86 assembly instruction-set cpu-registers x86-16

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

x86_64,i386,ia64和其他类似的术语代表什么?

我经常遇到这些术语,并对它们感到困惑.它们是特定于处理器,操作系统还是两者兼有?

我在英特尔i7机器上运行Ubuntu 12.04.那么他们中的哪一个会申请我的案子呢?

x86-64 processor itanium instruction-set computer-architecture

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

为什么IA32不允许内存到内存mov?

在英特尔架构IA32中,诸如movl,movw之类的指令不允许作为内存位置的操作数.例如,不允许使用指令movl(%eax),(%edx).为什么?

x86 assembly instruction-set cpu-architecture

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

x86 CMP指令差异

以下两个x86指令之间的(非平凡)差异是什么?

39 /r    CMP r/m32,r32   Compare r32 with r/m32
3B /r    CMP r32,r/m32   Compare r/m32 with r32
Run Code Online (Sandbox Code Playgroud)

背景

我正在构建一个Java汇编程序,我的编译器的中间语言将使用它来生成Windows-32可执行文件.

目前我有以下代码:

final ModelBase mb = new ModelBase(); // create new memory model
mb.addCode(new Compare(Register.ECX, Register.EAX)); // add code
mb.addCode(new Compare(Register.EAX, Register.ECX)); // add code

final FileOutputStream fos = new FileOutputStream(new File("test.exe"));
mb.writeToFile(fos);
fos.close();
Run Code Online (Sandbox Code Playgroud)

输出有效的可执行文件,其中包含TEXT部分中的两条CMP指令.输出到"text.exe"的可执行文件不会有任何意义,但这不是重点.该类CompareCMP指令的包装器.

上面的代码生成(使用OllyDbg检查):

Address   Hex dump                 Command
0040101F  |.  3BC8                 CMP ECX,EAX
00401021  |.  3BC1                 CMP EAX,ECX
Run Code Online (Sandbox Code Playgroud)

差别很小:如果我使用39字节操作码:

Address   Hex dump                 Command …
Run Code Online (Sandbox Code Playgroud)

x86 assembly instruction-set cmp

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