Связь с администрацией сайта:       

demo

Среди толпы я одинок

Administrator

Administrator

Приносим свои извинения

Воскресенье, 05 Ноябрь 2017 00:00
Уважаемые пользователи и гости сайта! 
Приносим свои извинения за длительное отсутствие. Напоминаем Вам, что сайт работает на полном энтузиазме его администраторов и авторов статей. Поэтому не всегда удается уделять ему время.
Жизнь - штука непредсказуемая. Мы постараемся, в будущем, заранее уведомлять о подобного рода ситуациях. 
Вы всегда можете помочь сайту своей интересной статьей или наблюдением. Да и просто связаться с нами через социальные сети. 
Благодарим за понимание и еще раз приносим извинения. 

Глава 10 - команды операций сдвигов

Воскресенье, 05 Ноябрь 2017 00:01
Команды сдвига перемещает все биты в поле данных либо вправо, либо влево, работая либо с байтами, либо со словами. Каждая команда содержит два операнда: первый операнд – поле данных – может быть либо регистром, либо ячейкой памяти; второй операнд – счетчик сдвигов. Его значение может быть равным 1, или быть произвольным. В последнем случае это значение необходимо занести в регистр CL, который указывается в команде сдвига. Число в CL может быть в пределах 0-255, но его практически имеющие смысл значения лежат в пределах 0-16 (0-31).
 
Все арифметические команды устанавливают флаги CF, AF, SF, ZF, OF и PF в зависимости от результат операции. Применяются команды как к 16-ти так и к 32-х разрядным регистрам. Это относится практическик любым командам.
 
Команды арифметического сложения ADD и ADC
Команда ADD выполнят целочисленное сложение двух операндов, представленных в двоичном коде. Результат помещается на место первого операнда, второй операнд не изменяется. Команда корректирует регистр флагов в соответствии с результатом сложения. Существуют две формы сложения: 8-битовое и 16-битовое. В различных формах сложения принимают участие различные регистры. Компилятор следит за тем, чтобы операнды соответствовали друг другу. На следующих рисунках иллюстрируются различные варианты команды ADD. 
 

 

Информация данного и последующих разделов относится к синтаксису и правилам применения команд процессора, её важно знать! Хотя если что то не понятно то ничего страшного - суть будет ясна на практических примерах.
 
Команда MOV
Команда MOV – основная команда пересылки данных, которая пересылает один байт или слово данных из памяти в регистр, из регистра в память или из регистра в регистр. Команда MOV может также занести число (непосредственный операнд) в регистр или память. В действительности команда MOV это целое семейство машинных команд микропроцессора. На приведенном ниже рисунке представлены различные способы, которыми в микропроцессоре можно пересылать данные из одного места в другое. Каждый прямоугольник означает здесь регистр или ячейку памяти. Стрелки показывают пути пересылки данных, которые допускает микропроцессор. Необходимо также помнить, что все команды микропроцессора могут указывать только один операнд памяти.
 
Загрузка и выполнение программ
При загрузке программ в оперативную память DOS (дисковая операционная система) инициализирует как минимум три сегментных регистра: CS, DS и SS. При этом совокупности байтов, представляющих команды процессора (код программы), и данные помещаются из файла на диске в оперативную память, а адреса этих сегментов записываются в CS и DS соответственно. Сегмент стека либо выделяется в области, указанной в программе, либо совпадает (если он явно в программе не описан) с самым первым сегментом программы. Адрес сегмента стека помещается в регистр SS.
Программа может иметь несколько кодовых с егментов и сегментов данных и в процессе выполнения специальными командами выполнять переключения между ними. Для того чтобы адресовать одновременно два сегмента данных, например, при выполнении операции пересылки из одной области памяти в другую, можно использовать регистр дополнительного сегмента ES. Кодовый сегмент и сегмент стека всегда определяются содержимым своих регистров (CS и SS), и поэтому в каждый момент выполнения программы всегда используется какой-то один кодовый сегмент и один сегмент стека.
Причем если переключение кодового сегмента – довольно простая операция, то переключать сегмент стека можно только при условии четкого представления логики работы программы со стеком, иначе это может привести к зависанию системы.
 
Выражения
В языке ассемблера выражения могут быть использованы в инструкциях или директивах и состоят из операндов и операторов. Операнды представляют значения, регистры или адреса ячеек памяти, используемых определенным образом по контексту программы. Операторы выполняют арифметические, логические, побитовые и другие операции над операндами выражений. Ниже даны описания наиболее часто используемых в выражениях операторов.
 

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

 

Структура программы

Программа на ассемблере состоит из строк вида:
метка[:] команда/директива операнды ;коментарий
Все данные поля необязательны т.е. строка может быть и пустой! Метка может быть любой комбинацией символов но не должна начинаться с цифры, кроме того не стоит использовать знаки $ и ?. Коментарием может быть всё что угодно. В том случае когда метка располагается перед командой процессора то после неё обязательно надо поставить двоеточие, что указывает ассемблеру создать переменную с именем метки и значением равным адресу команды. Вот например забегая вперёд
loop: lodsw ;читаем слово в еаx
cmp eax,78;если 78 то прекратим
loopne loop

 

Разработчики ролевой игры Divinity: Original Sin 2 приглашают отечественных геймеров поучаствовать в тестировании проекта и получить за это подписанное коллекционное издание, фирменную толстовку и возможность увидеть свое имя в титрах.
 
Дана строка. Если ее длина больше 10, то оставить в строке только первые 6 символов, иначе дополнить строку символами 'o' до длины 12.
Дана строка. Если она начинается на 'abc', то заменить их на 'www', иначе добавить в конец строки 'zzz'