Исключение в инструкции по перемещению при сборке?

Я понимаю, что запрещено копировать из памяти в память при таких сценариях:

section .data
var1 db 23
var2 db 9

section .text
global _start
_start:
mov [var1],[var2]
mov eax,1
mov ebx,0
int 80h

Но недавно я нашел пример кода, который не совсем соответствует правилу. Вот идея:

section .data
var1 dd 23
var2 dd 9

section .text
global _start
_start:
mov dword [var1],var2
mov eax,1
mov ebx,0
int 80h

Я знаю, что мы не можем передавать данные между ячейками памяти, но мне интересно, возможно ли передать ячейку памяти одной переменной в другую. Он на самом деле компилирует и выполняет свою работу.
Мой вопрос: действительно ли это работает?
Заранее спасибо, любая помощь будет оценена.

1 ответ

Решение

В этом случае var2 используется в качестве фактического литерала адреса памяти. Другими словами, он не пытается переместить что-то на этот адрес или с него, он перемещает значение адреса в [var1] место нахождения.

Другие вопросы по тегам