понимание ключевых слов eax и mov - PullRequest
1 голос
/ 06 октября 2011

Я пытаюсь понять регистры в asm, но каждый веб-сайт, на который я смотрю, предполагает, что я что-то знаю о регистрах, и я просто не могу понять это.Я знаю о книгах на с ++ и, насколько я знаю, mov var1,var2 будет то же самое, что и var1 = var2, верно?

Но с регистром eax я полностью потерялся.Любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 06 октября 2011

Рассматривать регистры как глобальные переменные для процессора.Есть "eax", "ebx" и куча других.Кроме того, вы можете выполнять только определенные операции через регистры - например, нет инструкции прочитать из одной ячейки памяти и записать ее в другую (кроме случаев, когда местоположения обозначены определенными регистрами - см. Инструкцию movsb и т. Д.).

Таким образом, регистры обычно используются только для временного хранения значений, необходимых для какой-либо операции, но они обычно не используются в качестве глобальных переменных в общепринятом смысле.

Вы правы в том, что "mov var1, var2"по сути, это присваивание, но вы не можете использовать две переменные на основе памяти в качестве операндов;это не поддерживается.Вместо этого вы можете сделать:

mov eax, var1
mov var2, eax

..., что имеет тот же эффект, используя регистр eax как временный.

0 голосов
/ 08 октября 2011

Думайте о eax как о месте в памяти, где может храниться значение, так же, как в c ++, где int, long, ... и другие типы задают размер места в памяти переменной. Регистр eax просто указывает на место хранения в памяти, которое на компьютерах x86 составляет 32 бита. Е часть eax означает расширенный. Этот регистр -> ячейка памяти автоматически используется операторами умножения и деления и обычно называется расширенным регистром накопителя.

0 голосов
/ 06 октября 2011

eax относится к регистру процессора (по существу, переменная)

mov - это инструкция для копирования данных из одного регистра в другой. Так что, по сути, вы правы (в ручном смысле)

У вас есть пример блока сборки, который вы хотите обсудить?

...