2015-12-09 2 views
1

Я понимаю, что это запрещено копировать из памяти в память в сценарии, как это:Исключение в инструкции по перемещению сборки?

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', как вы здесь, но это другой операционный результат, чем в первом примере. –

+0

ОК, спасибо;) – misty

+2

'mov [var1], [var2]' было бы попыткой скопировать значение _var1_ в _var2_. Оба операнда являются операндами памяти, поэтому вы не можете этого сделать. 'mov dword [var1], var2' перемещает указатель на _var2_ в _var1_. Указатель - это просто немедленное значение (например, константа), поэтому эта операция разрешена с помощью _MOV_ –

ответ

3

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

+0

Понимаю, это похоже на константу, как упоминалось выше. Спасибо. :) – misty

Смежные вопросы