Исключение в инструкции по перемещению при сборке?
Я понимаю, что запрещено копировать из памяти в память при таких сценариях:
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]
место нахождения.