gpt4 book ai didi

assembly - x86 汇编中的方括号是什么意思?

转载 作者:行者123 更新时间:2023-12-02 22:00:37 31 4
gpt4 key购买 nike

我对汇编非常陌生,有一些非常基本的问题。

这四个命令有什么区别?

mov ebx, eax
mov [ebx], eax
mov ebx, [eax]
mov [ebx], [eax]

他们说括号的意思是“获取地址的值”。但是,第一行到底有什么作用呢?它不会将 eax 的值移到 ebx 中吗?如果是的话,那么括号的意义是什么?

最佳答案

让我们举一个非常简单的例子,假设我们有一个只有两个寄存器的 CPU,EAX 和 EBX。

mov ebx, eax

只需将eax中的值复制到ebx寄存器

 | EAX : 01234567 |   ---->   | EAX : 01234567 |
| EBX : 00000000 | ====> | EBX : 01234567 |
<小时/>

现在让我们添加一些内存空间

ADDRESS           VALUE
00000000 6A43210D
00000004 51C9A847
00000008 169B87F1
0000000C C981A517
00000010 9A16D875
00000014 54C9815F

mov [ebx], eax

eax中的值移动到ebx中包含的内存地址。

 | EAX : 01234567 |   --no-->   | EAX : 01234567 |
| EBX : 00000008 | --change--> | EBX : 00000008 |

ADDRESS VALUE
00000000 6A43210D -> 6A43210D
00000004 51C9A847 -> 51C9A847
00000008 169B87F1 =====> 01234567
0000000C C981A517 -> C981A517
00000010 9A16D875 -> 9A16D875
00000014 54C9815F -> 54C9815F
<小时/>

mov ebx, [eax]

将值从eax中包含的内存地址移动到ebx

 | EAX : 00000008 |    ->     | EAX : 00000008 |
| EBX : 01234567 | ====> | EBX : 169B87F1 |

[No change to memory]
ADDRESS VALUE
00000000 6A43210D
00000004 51C9A847
00000008 169B87F1
0000000C C981A517
00000010 9A16D875
00000014 54C9815F
<小时/>

mov [ebx], [eax]

最后,您可能会认为这会将值从 eax 中包含的内存地址移动到 ebx 中包含的内存地址。

 | EAX : 00000010 |   --no-->   | EAX : 00000010 |
| EBX : 00000008 | --change--> | EBX : 00000008 |

ADDRESS VALUE
00000000 6A43210D -> 6A43210D
00000004 51C9A847 -> 51C9A847
00000008 169B87F1 =====> 9A16D875
0000000C C981A517 -> C981A517
00000010 *9A16D875 -> 9A16D875
00000014 54C9815F -> 54C9815F

但是 x86 架构不允许这种组合。 You cannot move from memory to memory

因此,括号的使用相当于 dereferencing 操作。

关于assembly - x86 汇编中的方括号是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48608423/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com