Изменения

Перейти к: навигация, поиск
Обзор команд
== Команды загрузки ==
mov -- register|memory, register|memory|immediate ; команда загрузки. mov al, 5 -- ; загрузить в al 5Обычно первый аргумент команды -- то, что меняется. mov cx, di -- ; скопировать значения cx в di. Размер копируемых данных должен совпадать. movzx -- размер игнорируется; то, что осталось, заполняется нулями movcx -- размер игнорируется; то, что осталось, заполняется знаковым (старшем) битом mov(cc): cc -- условие. если cc, то mov, ничего otherwise xchg -- обмен значений регистров
bswap movzx register, register|memory ; копирование значений меньшей разрядности в регистр большей разрядности, недостающие биты заполняются нулями movsx register, register|memory ; копирование значений меньшей разрядности в регистр большей разрядности, недостающие биты заполняются знаковым битом  cmov(cc) register, register|memory ; cc --- условие. если cc, то mov, ничего otherwise  xchg register|memory, register|memory ; обмен значений  bswap register ; меняет порядок байт в регистре на обратный (little в big, big в little)
Уточнение про порядок байт:
== Работа со стеком ==
push eax -- register|memory|immediate ; положить eax значение на стек.
Сишный псевдокод:
| esp -= sizeof(eax) (// минус потому, что стек "растёт вниз", чем он больше, тем на меньшее число указывает esp (и наоборот)) | *esp = eaxВроде, эквивалентный Эквивалентный код на ассемблере: | sub esp, 4 | mov [esp], eax
pop eax -- запихать вершину register|memory ; записать значение верхнего элемента стека в eaxрегистр/память
Как это выглядит на ассемблере:
| mov eax, [esp] | add esp, 4
Стек-пойнтеру (sp) в 16-битном режиме довольно желательно бы быть чётным, в 32-битном --- кратным четырём: всё будет работать существенно быстрее.Стек --- хорошее быстрое временное хранилище. не Не слишком большое (1-2 мб).//malloc и free --- системные функции, их можно свободно использовать в любом языке (и в Си, и здесь, и в дельфи)
pusha(d) -- ; сохранить в стек все 8 регистров общего назначения popa(d) -- ; вытащить их из стека
(push|pop)ad работают с 32-битными регистрами, (push|pop)a --- c 16-битными.при При восстановлении не меняется esp (логично, дабы с esp не произошло трешака).
//"Вас никто не заставляет делать разумные вещи. Если вы хотите делать безумные вещи, вы можете это делать совершенно свободно!"
Анонимный участник

Навигация