русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

TITLE prg_10_2


Дата добавления: 2015-01-16; просмотров: 495; Нарушение авторских прав


STACK SEGMENT PARA STACK ‘STACK’

DB 64 DUP(‘STACK’) ; Область стека

STACK ENDS

DSEG SEGMENT PARA PUBLIC ‘DATA’

Mas db 1,0,9,8,0,7,8,0,2,0 ; это заданный одномерный массив байт

Len_mas equ 10 ; количество элементов в массиве, это же количество

;можно получить как len_mas=$ - mas

DSEG ENDS

CSEG SEGMENT PARA PUBLIC ‘CODE’

ASSUME CS:CSEG, DS:DSEG, SS:STACK

START: PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG ; инициировать адрес сегмента данных

MOV DS,AX

MOV СX, LEN_MAS ; в сх – счетчик элементов массива

XOR AX,AX

XOR SI,SI

CYC1: JCXZ EXIT ; проверка сх на 0, если 0, то выход

CMP MAS[SI],0 ;сравнить очередной элемент задан. массива с 0

JNE M1 ; если не равно 0, то на m1

INC AL ; увеличение счетчика нулевых элементов

M1: INC SI ; перейти к следующему элементу

DEC CX ; уменьшить счетчик элементов на 1

JMP CYC1

EXIT: MOV AX, 4C00H

INT 21H ; возврат управления операционной системе

END START

 

Начало
Инициировать счетчик элементов, обнулить счетчик нулей и смещение первого эл-та

 


нет

CYC1: Счетчик элементов = 0 ?

 


да

Конец

 


Очередной элемент = 0 ?
нет

 


 

да

Увеличить счетчик нулей
М1: Нарастить смещение для перехода к следующему элементу

 

 


Увеличить счетчик элементов
да

 

 

 


Все элементы просмотрены?
нет да

 

 

 


Но, учитывая важность такого алгоритмического элемента, как цикл, разработчики предусмотрели специальные команды цикла

LOOP метка_перехода,

которая означает ’повторить цикл’. Выполнение команды заключается в следующем:

- вычитании 1 из регистра СХ;

- сравнении регистра СХ с нулем;

- если СХ=0, то управление передается на следующую после LOOP команду, иначе перейти на метку_перехода.



LOOPE/LOOPZ метка_перехода,

которая означает “повторить цикл, пока СХ<>0 или ZF=0”. Обе команды совершенно идентичны, поэтому используйте, при необходимости, любую по Вашему вкусу. Отличаются эти команды от предыдущей пунктом 3 или анализом окончания цикла:

- если СХ>0 и ZF=1, управление передается на метку перехода, иначе если СХ=0 или ZF=0, то выполняется следующая после команды LOOPE/LOOPZ операция.

LOOPNE/LOOPNZ метка_перехода,

которая означает, “повторить цикл, пока СХ<>0 или ZF=1”. Обе команды совершенно идентичны, поэтому используйте, при необходимости, любую по Вашему вкусу. В ней пункт 3 выполняется по следующему правилу:

- если СХ>0 и ZF=0, управление передается на метку перехода, иначе если СХ=0 или ZF=1, то выполняется следующая после команды LOOPNE/LOOPNZ операция.

Общая особенность команд цикла в том, что они используют РОН СХ как счетчик числа циклов, поэтому при их использовании не забудьте до метки_перехода послать в этот регистр нужное число!

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

Для изучения команд цикла на 3-ей лабораторной работе Вам нужно будет разработать программы, близкие к тем, что приведены в листингах 10.3-10.5 (учебник Юрова “Ассемблер)”. Листинг 10.5 показывает, как используются команды засылки счетчика циклов в стек PUSH и восстановления из стека POP для организации вложенных циклов.

 



<== предыдущая лекция | следующая лекция ==>
Процедуры | TITLE prg_10_5


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.