Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию (от Ассемблера до Делфи)


Информационный Канал Subscribe.Ru

Низкоуровневый язык программирования Ассемблер
урок 6
Команды условного перехода

Предположим, что вам надо повторить какое-то действие раз десять. Представили? Если да, то я могу сказать "великолепно" и предложить взгянуть на следующий алгоритм:

начало действия:
самое действие;
если мы еще не повторили действие 10 раз, то переходим на "начало действия"

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


mov cx, 0
begin:
; здесь мы что-нибудь делаем
add cx, 1
cmp cx, 10
jne begin
; продолжаем ход программы

Первая строчка записывает в регистр cx значение 0. В этом регистре мы будем считать до 10-ти.

Следующая строчка "begin:" объявляет так называемую метку, то есть то место в программе к которому мы можем перейти в будущем (begin - название метки, ":" - говорит о том, что это метка).

Далее идет коментарий "; здесь мы что-нибудь делаем". Коментарий не является программой, он представляет из себя всего лишь текст, но этот текст может быть очень полезным. Например, в данном примере я говорю вам о том, что на месте этого коментария должно быть какое-то действие, хотя сам я ничего не делаю. Чтобы сделать коментарий нужно поставить значок ";", а после него написать то, что вам нужно.

"add cx, 1" - увеличиваем наш счетчик на единицу.

"cmp cx, 10" - сравниваем cx с числом 10. В зависимости от результатов сравнения устанавливается определенный флажок (такая переменная в памяти, которая указывает определенное состояние).

"jne begin" - если был установлен флажок, который говорит о неравенстве сравниваемого числа, то мы переходим к метке "begin", иначе переходим на следующую строку. "jne" - команда условного перехода.

Последние две строчки "cmp cx, 10", "jne begin" можно описать следующим образом: если cx не равен 10, то переходим на метку "begin".

Помимо "jne" есть еще куча команд условного перехода. Заценим некоторые из них:
je label - если равно, то перейти на label
jne label - если неравно, то перейти на label
ja label - если больше, то перейти на label
jb label - если меньше, то перейти на label
На этом мои силы истекли... Остальные команды смотрите в справочниках....

Выше написанный цикл написан очень не практично, но он отражает сразу два понятия цикл и команда условного перехода. На практике вместо вышеприведенного цикла можно использовать следующий:


mov cx, 10
begin:
push cx
; какое-либо действие
pop cx
loop begin

В этом примере появилась новая для вас команда loop. Она уменьшает регистр cx на 1 и тут же сравнивает его с нулем, если нуль не достигнут, то передается управление на метку "begin". Помимо этого мы используем стек. Это дело необходимо тогда когда вы внутри этого цикла используете регистр cx. Таким образом регистр cx останется невредимым и цикл не будет нарушен.

На этом я видимо и завершу...Если что-то непонятно - пишите: evolverstation@narod.ru (спрашивать Evolver'а).



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное