相关疑难解决方法(0)

LEA指令的目的是什么?

对我来说,它看起来像一个时髦的MOV.它的目的是什么,我什么时候应该使用它?

x86 assembly x86-64 x86-16

632
推荐指数
15
解决办法
54万
查看次数

括号在x86 asm中的含义是什么?

给出以下代码:

L1     db    "word", 0

       mov   al, [L1]
       mov   eax, L1
Run Code Online (Sandbox Code Playgroud)

括号([L1])代表什么?

x86 assembly

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

LEA或ADD指令?

当我手写组装时,我通常会选择表格

lea eax, [eax+4]
Run Code Online (Sandbox Code Playgroud)

在表格上..

add eax, 4
Run Code Online (Sandbox Code Playgroud)

我听说lea是一个"0时钟"指令(如NOP),而'add'则不是.但是,当我看到编译器生成的程序集时,我经常看到后一种形式而不是第一种.我足够聪明地相信编译器,所以任何人都可以了解哪一个更好?哪一个更快?为什么编译器选择后一种形式呢?

x86 assembly

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

lea和offset之间的差异

ar db "Defference $"
Run Code Online (Sandbox Code Playgroud)

有什么区别

mov dx,offset ar
Run Code Online (Sandbox Code Playgroud)

lea dx,ar
Run Code Online (Sandbox Code Playgroud)

我认为两者都在做同样的工作,但这两者之间有什么区别

x86 assembly masm tasm

12
推荐指数
1
解决办法
1万
查看次数

如何将函数或标签的地址加载到寄存器中

我正在尝试将“main”的地址加载到 GNU 汇编器中的寄存器 (R10) 中。我没办法。在这里,我有什么和我收到的错误消息。

main:
   lea main, %r10
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下语法(这次使用 mov)

main:
   movq $main, %r10
Run Code Online (Sandbox Code Playgroud)

使用以上两种方法,我都会收到以下错误:

/usr/bin/ld: /tmp/ccxZ8pWr.o: relocation R_X86_64_32S against symbol `main' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

使用 -fPIC 编译不能解决问题,只会给我同样的错误。

assembly gcc x86-64 att addressing-mode

10
推荐指数
1
解决办法
5302
查看次数

LEA和几个指令如何工作?

我不完全理解前两行的含义,以及最后两行的区别.

LDS SI,[BX]
LES DI,[BX]
LEA DI,5000h 
MOV DI,5000h
Run Code Online (Sandbox Code Playgroud)

我认为LEA在DI中加载5000h,MOV在DI中加载5000h的内容.我对吗??

x86 assembly

4
推荐指数
1
解决办法
1607
查看次数

在不是地址/指针的值上使用LEA?

我试图了解地址计算指令的工作原理,尤其是leaq命令.然后当我看到leaq用于进行算术运算的例子时,我感到困惑.例如,以下C代码,

long m12(long x) {
return x*12;
}
Run Code Online (Sandbox Code Playgroud)

在组装中

leaq (%rdi, %rdi, 2), %rax
salq $2, $rax
Run Code Online (Sandbox Code Playgroud)

如果我的理解是正确的,那么leaq应该移动任何(%rdi, %rdi, 2)应该2*%rdi+%rdi评估的地址%rax.我感到困惑的是,因为值x存储%rdi在内,这只是内存地址,为什么%rdi乘以3然后左移这个内存地址 2等于x乘以12?是不是当我们%rdi用3时,我们跳到另一个没有值x的内存地址?

c x86 assembly memory-address

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

方括号在x86汇编中的含义是什么?

我对装配很新,并且有一些非常基本的问题.

这四个命令有什么区别?

mov ebx, eax
mov [ebx], eax
mov ebx, [eax]
mov [ebx], [eax]
Run Code Online (Sandbox Code Playgroud)

他们说括号的意思是"得到地址的价值".但那么,第一线真正做到了什么呢?它不会将eax的价值转移到ebx吗?如果是这样,那么括号的重点是什么?

memory x86 assembly intel-syntax

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

LEA在内部做什么?

这个问题说LEA指令可以用来做算术.

据我了解,而不是:

inc eax
mov ecx, 5
mul ecx
mov ebx, eax
Run Code Online (Sandbox Code Playgroud)

我可以简单地写

lea ebx, [(eax + 1) * 5]
Run Code Online (Sandbox Code Playgroud)

LEA版本只是一条指令,而不是4.但是,我不明白LEA如何在没有inc和的情况下进行算术运算mul.

LEA版本在任何方面都更快,或者LEA是否只是在后台运行原始指令?

编辑:这个问题不是关于LEA的目的,而是它如何在内部工作.

x86 assembly

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

标签 统计

assembly ×9

x86 ×8

x86-64 ×2

addressing-mode ×1

att ×1

c ×1

gcc ×1

intel-syntax ×1

masm ×1

memory ×1

memory-address ×1

tasm ×1

x86-16 ×1