![]() |
|
|
Реферат: Разработка программы на Ассемблере8. RLC DST, CNT; циклический сдвиг влево через перенос 9. RRC DST, CNT;циклический сдвиг вправо через перенос 10. ROR DST, CNT;циклический сдвиг влево 11. ROL DST, CNT;циклический сдвиг вправо КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ1. CALL SUBR; вызов подпрограммы с адресом SUBR;
call delay; mov .... 2. RET; возврат из подпрограммы к оператору следующему непосредственно за CALL, то есть в приведенном выше примере к MOV .. 3. JMP NAME; безусловный переход к команде с символическим адресом NAME.
jmp short name;переход к метке name, отстоящей не более ;чем на -128 или +127 байтов. jmp near name;переход к метке name, отстоящей не более ;чем на 65535 байтов, в одном сегменте. jmp name;аналогично jmp near name; 4. JA NAME или JNBE NAME; условный переход, если, например, в результате сравнения CMP DST, SRC приемник по абсолютной величине больше источника, то перейти к метке name. 5. JB NAME или JNAE NAME; условный переход, если, например, в результате сравнения CMP DST, SRC приемник по абсолютной величине меньше источника, то перейти к метке name (команды п4 и п5 выполняются по результатам выполнения операций над беззнаковыми числами). 6. JZ NAME или JE NAME; перейти, если результат операции влияющей на флаг нуля - нулевой (переход по "нулю"). 7. JNZ NAME или JNE NAME; переход по "не нулю". (команды п6 и п7 выполняются по результатам выполнения операций над числами cо знаком ). КОМАНДЫ УПРАВЛЕНИЯ ЦИКЛАМИ1. LOOP NAME; эта команда неявно уменьшает (CX) на 1 и осуществляет переход к ближней метке, если (CX) не равно 0.
.... mov cx,64h;блок операторов от метки syc до loop syc syc: ....;будет выполнен 100 раз. .... loop syc 2. LOOPZ NAME или LOOPE NAME кроме того осуществляет проверку ZF флага. Поэтому цикл заканчивается по условию, когда (CX) = 0 или (ZF) = 0 или и то и другое вместе. Т.о. эта команда служит для обнаружения первого ненулевого результата. 3. LOOPNZ, LOOPNE - выход из цикла по "нулю".
.... mov cx,1000d;цикл может быть завершен раньше 1000 next: .... ;прохода,если содержимое аккумулятора .... ;станет равным 129,т.е. равным ASCII коду cmp al,'Б';буквы Б. loopnz next 9.3.9 КОМАНДЫ ОБРАБОТКИ СТРОК (ЦЕПОЧЕК БАЙТОВ)1. LODSB; команда lodsb загружает байт адресованный регистром SI из сегмента данных, и увеличивает SI на 1, если перед этим была введена команда CLD (очистить флаг направления DF) и уменьшает SI на 1, если была использована команда STD (установить флаг направления).
.... .DATA string DB 'abcdefg' .CODE .... cld;после выполнения этих команд в AL будет mov si,OFFSET [string+2]; загружен ASCII код 'с' lodsb;причем содержимое SI будет указывать на 'd'. 2. MOVSB; эта команда перемещает один байт из ячейки памяти с адресом в регистре SI в ячейку памяти с адресом в регистре DI и увеличивает (SI) и (DI) на 1. Значение SI может находиться, как в сегменте данных DS, так и в дополнительном сегменте ES. Значение DI может находиться только в дополнительном сегменте ES.
.... .DATA msg DB 'Всё O.K.' LEN = $ - msg;LEN равно 8 .CODE .... cld lea si,msg;в SI адрес источника mov ax,0b800h;начало сегмента видеопамяти mov es,ax;поместить в дополнительный сегмент lea di,es:(0a0h * 3);4-я строка сверху mov cx,LEN;LEN - количество выводимых символов rp: movsb;переслать символ в текущую позицию экрана inc di;перешагнуть через позицию атрибута loop rp;повторить до исчерпания (CX) ....;строка 'Всё O.K.' будет выведена в 4-ю строку ;дисплея сверху. 3. REP ;префикс повторения команды. Например окончание предыдущей программы может быть записано в виде:
.... mov cx,LEN;несмотря на то,что массив'Всё O.K.'будет rep movsb;скопирован в область памяти B800:(A0 * 3), на ;экран дисплея будет выведено: ВёOK. Почему? 4. CMPSB; осуществляет сравнение байта строки источника c адресом (SI) и байта строки приемника с адресом (DI): то есть производит вычитание ((SI)) - ((DI)). Не путать с командой CMP DST, SRC в которой наоборот, производится вычитание источника из приемника. Команда CMPSB неявно уменьшает (CX) на 1 и увеличивает (SI) и (DI) на 1, если (DF) = 0. 5. REPZ или REPE; префикс повторения. Выполнение команды завершается, когда (CX) = 0 или (ZF) = 0.
.... .DATA src DB 'To be, or not to be' dst DB 'To be ,or not to be' len = $ - dst;len равно 19 .CODE .... cld; (DF) = 0 push ds;совместить адреса pop es;сегментов ds и es mov cx,len;длину строки dst переслать в cx lea di,dst;загрузить адрес(смещение) строки dst в DI lea si,src repe cmpsb;сравнивать побайтно je equal;если все байты совпали, то перейти к метке not cx;если нет - вычислить номер несовпадающих байт add cx,len; jmp notequal; equal: .... .... notequal: .... В конце этого примера номер первого несовпадающего байта (CX) = 5. КОМАНДЫ УПРАВЛЕНИЯ МИКРОПРОЦЕССОРОМ1. CLC; сбросить флаг переноса (CF) = 0. 2. STC; установить флаг переноса (CF) = 1. 3. CMC; инвертировать флаг пнреноса. 4. CLD; очистить флаг направления (DF) = 0, в этом случае операции над строками (цепочками байтов) будут производиться от младшего адреса к старшему. 5. STD; установить флаг направления (DF) = 1,обработка цепочек байтов производится от старшего адреса к младшему. 6. STI; установить флаг прерываний (IF) = 1, разрешить прерывания от внешних устройств. 7.CLI; очистить флаг прерываний. 8. NOP; холостая операция. КОМАНДЫ ПРЕРЫВАНИЙ1. INT INUM; эта команда вызывает программное прерывание, то есть переход к ячейке памяти с адресом хранящимся в четырех байтах, начиная с адреса INUM * 4, где INUM = (0...255). Это 4-х байтовое число является указателем подпрограммы обработчика данного прерывания, и иначе называется вектором прерывания.Таким образом первый килобайт памяти 256 * 4 отводится под векторы прерываний. Операции инициируемые программными прываниями определяются кодом в регистре AH, например:
.... mov ah,14d;функция вывода символа на дисплей,с последующимм mov al,31h;продвижением курсора на одну позицию вправо. int 10h;на экран будет выведена цифра '1'(ASCII код 31h). .... .DATA privet DB 'Добрый morning !','$'; .CODE .... lea dx,privet;специальная функция регистра DX mov ah,9;9 - функция вывода на экран дисплея int 21h;будет выведено приветствие .... ВЛИЯНИЕ КОМАНД НА ФЛАГИВ таблицу включены только те инструкции, которые влияют на флаги. "+" - обозначает, что команда влияет на флаг, "-" - не влияет, "1" - флаг устанавливается в 1, "0" - флаг устанавливается в 0 (сбрасывается), "#" - инверсия флага, "?" - не определенное значение флага, >1 - одиночный сдвиг, >n - многоразрядный сдвиг. ПРИМЕЧАНИЯ
1. R1,R2 - одно- или двухбайтные регистры. 2. RP - двухбайтные регистры. 3. SRC,DST -источник,приемник (регистр или ячейка па- мяти) 4. M,M1,M2 -ячейки памяти с символическими адресами M, M1 и M2. 5. CNT - счетчик,регистр CL или CX. 6. SUBR,NAME - символический адрес (метка начала подпрограммы или блока операторов). 7. Во всех командах условных переходов метка NAME должна отстоять от команды перехода не более,чем на -128 или +127 байтов. 8. INUM - номер прерывания. ОБЩИЙ РАЗДЕЛ1.1. Технико-математическое описание задачи Программа делится на две части: Первая часть программы - Сбор сведений - это часть программы, собирающая справки об оборудовании, установленном на ПК, на котором программа выполняется. Справки наводятся о следующих устройствах: - математическом сопроцессоре; - СОМ портах; - LPT портах; - дисководах; - CD-ROM приводах; - расширенном управлении электропитанием; - манипуляторе «мышь». Математический сопроцессор – это микрочип, устанавливаемый на материнскую плату, который работает совместно с основным процессором, осуществляет обработку чисел с плавающей точкой, тем самым разгружая основной процессор. Может устанавливаться опционально по желанию пользователя либо самим пользователем, т.е. может либо присутствовать, либо отсутствовать. СОМ порты – это порты с последовательным типом передачи данных, предназначенные для подключения коммуникационных, манипуляторных и других устройств, где требуется сравнительно не- большая скорость передачи данных. Количество установленных последовательных портов может варьироваться от одного до четырёх. На некоторых материнских платах существует ограничение на подключение последовательных портов, например: если это значение будет два, и если вы подключите четыре порта, то работать будут все равно два. LPT порты – это порты с параллельным типом передачи данных, предназначенные для подключения принтеров и других устройств, где требуется относительно большая скорость передачи данных, а также могут использоваться для соединения двух компьютеров между собой для обмена данными. Количество установленных LPT портов может варьироваться от одного до четырёх. Дисковод – устройство, предназначенное для чтения/записи накопителей на магнитном диске (гибкий диск). Существует четыре типа дисководов: - 360 Кб.; - 720 Кб.; - 1.2 Мб.; - 1.44 Мб. Они различаются по формату обслуживаемых дискет и максимально возможному объему данных, записываемых на дискету соотвестсвующего типа. CD-ROM привод – устройство, предназначенное только для чтения накопителей на лазерных дисках. Различаются по скорости доступа к данным и скоростью вращения лазерного диска. Обычно устанавливают не более одного привода. РУЭ (расширенное управление электропитанием) – стандарт, служащий для экономии электроэнергии. Представляет собой следующий набор функций: - автоматическое отключение электропитания; - «спящий» режим; - автоматическое отключение питания монитора; - автоматическое отключение питания жестких дисков. Может находиться в двух состояниях: включено или выключено. Вторая часть программы - диагностика памяти - проверяет на работоспособность память ПК, на котором выполняется программа. 1.2. Требования к функциональным характеристикам При запуске программы на экран должна выводиться аннотация, затем, после нажатия на любую клавишу, должен очищаться экран и появляться меню из трех пунктов: 1 – сбор сведений о системе; 2 – тест памяти; 3 – выход. Для выбора интересующего пункта необходимо нажать на клавиатуре цифры, соответствующие номерам пунктов. В случае выбора пункта «Сбор сведений о системе» выполняется последовательный вывод информации о ПК в виде списка устройств с текущим состоянием. Ниже приведена таблица со списком устройств и их возможными состояниями. Таблица 1 Таблица возможных состояний устройств
После вывода списка устройств, в программе необходимо реализовать задержку, затем возврат в меню. В случае выбора пункта «тест памяти» программа должна выполнять тестирование не менее 640Кб. памяти. В случае если память исправна, на экран выводиться сообщение «тест пройден», в противном случае «тест не пройден». Также необходимо реализовать задержку и возврат в меню. В случае выбора пункта «выход», необходимо реализовать завершение работы программы и передачу управления операционной системе DOS. 1.3. Требования техническим и программным средствам Программа выполнена на языке ассемблера 8086 процессора, соответственно ей необходим IBM PC – совместимый компьютер с процессором не ниже 8086, также программа может выполняться на компьютерах с процессорами старшего поколения (например: 80286 или 80386), т.к. особенностью архитектуры 80х86 является преемственность на уровне машинных команд: программы, написанные для младших моделей процессоров, без всяких изменений могут быть выполнены на более старших моделях. Компилированный код программы занимает всего 2 Кб – это связано с отсутствием избыточного кода, которого очень много при использовании языков высокого уровня. В связи с этим программа может легко поместиться на дискету 360 Кб. Программа работает в текстовом режиме и не использует цветовой гаммы, поэтому ей достаточно монитора CGA. Кроме того она может без всяких изменений работать на мониторах старшего поколения таких, как EGA, VGA и SVGA. Так как программа тестирует 640 Кб оперативной памяти, этот объем является минимумом. 1.3.1. Обоснования выбора языка программирования Для написания данной программы был выбран язык ассемблера. В связи с тем, что он наиболее подходит для реализации такого рода задач, т.е. где требуется доступ к портам, выполнение специальных прерываний, доступ к области памяти BIOS и т.д. Язык ассемблера, представляет собой фактически символьную форму записи машинного языка: в нем вместо цифровых кодов операций вписывают привычные знаки операций или их словесные названия, вместо адресов – имена, а константы записывают в десятичное системе счисления. Программу, записанную в таком виде, вводят в ЭВМ и подают на вход специальному транслятору, называемому ассемблером, который переводит её на машинный язык, и далее полученную машинную программу выполняют. Для любой ЭВМ можно придумать разные языки ассемблера, хотя бы потому, что можно по-разному обозначать машинные операции. В частности, и для ПК разработано несколько таких языков(ASM-86, MASM, TASM). Для реализации данной задачи был выбран язык, который создан фирмой Borland и полное название которого – турбо ассемблер, сокращенно TASM. Надо отметить, что этот язык наиболее часто используется на ПК. СПЕЦИАЛЬНЫЙ РАЗДЕЛ 2.1. Постановка задачи Разработать программу тестирования оперативной памяти и сбора сведений о ПК. Реализовать меню, в котором пользователю предлагается выбор из трёх пунктов: 1 – сбор сведений о системе; 2 – тест памяти; 3 – выход. Сбор сведений должен осуществляться в виде списка устройств с текущим состоянием. Состояние от названия устройства должно отделяться двоеточием. Список устройств и возможных их состояний см. в таблице 1. Пункт «тест памяти» должен осуществлять проверку ячеек памяти на работоспособность. Существует два типа неисправностей ячеек памяти: - «постоянные нули»; - «постоянные единицы». Вид неисправности «постоянные нули» заключается в следующем: предположим, что бит №4 в байте, изображенном на рис. 1 – неисправный. В данный момент в байт записано число ноль (восемь нулей в двоичной системе cсчисления), если считать содержимое этого байта, то на выходе получиться ноль – вроде бы он исправен. 7 6 5 4 3 2 1 0
рис. 1 Но это лишь только видимость, если в этот байт записать число FFh (восемь единиц в шестнадцатеричной системе счисления), что в двоичной системе счисления эквивалентно восьми единицам, то получится картина, представленная на рис. 2. В этом случае, если считать содержимое этого байта, на выходе получиться EFh, то есть, записывая в бит №4 единицу, мы при считывании все равно получаем ноль. Следовательно бит № 4, а значит и байт, неисправен. 7 6 5 4 3 2 1 0
рис. 2 Вид неисправности «постоянные единицы» схож с видом «постоянные нули». Разница состоит лишь в том, что в виде «постоянные нули» неисправные биты находятся всегда в нулевом состоянии, а в виде «постоянные единицы» в единичном. В связи с этим необходимо реализовать проверку ячеек памяти на два вида неисправностей: «постоянные нули» и «постоянные единицы». 2.2. Описание структуры программы Программа была реализована с помощью нескольких пользовательских процедур и макросов (см. таблицу 2). Довольно часто в программах, особенно больших, приходится несколько раз решать одну и ту же подзадачу и поэтому приходится выписывать одинаковую группу команд, решающих эту подзадачу. Чтобы избежать повторного выписывания такой группы команд, ее обычно выписывают один раз и оформляют соответствующим образом, а затем в нужных местах программы просто передают управление на эти команды, которые, проработав, возвращают управление обратно. Такая группа команд, которая решает некоторую подзадачу и которая организована таким образом, называется процедурой. Нередко бывает полезным предварительное(до начала трансляции) преобразование текста программы. Например, может потребоваться, чтобы какой-то фрагмент программы был продублирован несколько раз или чтобы в зависимости от некоторых условий в тексте программы были сохранены одни фрагменты и удалены другие. Подобную возможность предоставляют так называемые макросредства. Расширение языка ассемблера за счет этих средств обычно называют макроязыком. Программа, написанная на макроязыке, транслируется в два этапа. Сначала она переводится на, так сказать, чистый язык ассемблера, т.е. преобразуется к виду, где нет никаких макросредств. Этот этап называется макрогенерация, его осуществляет специальный транслятор – макрогенератор. На втором этапе полученная программа переводится на машинный язык. Это этап ассемблирования, его осуществляет ассемблер. Таблица 2 Таблица процедур и макросов
При выполнении программы на экран выводится аннотация, пользователь, ознакомившись с программой, нажимает на любую клавишу, и на экран выводится меню (с помощью процедуры ShowQuestion), в котором пользователь может выбрать интересующий его пункт меню: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |