![]() |
![]() |
![]() |
![]() |
Главная Кремниевые микросхемы 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 [ 52 ] 53 54 55 56 57 58 59 60 BRANCH ON NOT ZERO (ПЕРЕХОД ПО HE НУЛЮ). Эти команды записывают в счетчик команд определенные значения либо безусловно, либо при условии наличия нулевого или ненулевого значения соответственно в зависимости от того, установлен флаг нуля или нет. Мнемокоды и символическое представление операций для этих команд выглядит следующим образом: Команда Мнемокод BRANCH UNCONDITIONAL BR BRANCH ON ZERO BRZ BRANCH ON NOT ZERO BRNZ Символическое описание Если флаг нуля установлен РС-> * * * * Если флаг нуля не установлен РС-> * * * * Здесь адрес, указанный после кода операции, а PC - обозначение счетчика команд. Посмотрим, можно ли воплотить приведенную на рис. 11 2 схему алгоритма сложения первых 200 чисел в програм.му. При одинарной точности арифметических вычислений это было бы сделать трудно, так как ответ (20100io) больше максимального двоичного числа без знака, которое можно разместить в 8-разрядном регистре. Поскольку эта программа интересует нас только в качестве примера того, как можно перейти от схемы алгоритма к распечатке (листингу - listing) машинных команд в шестнадцатеричном коде, чтобы затем проанализировать, как эти команды реализуются в микро-ЭВМ, сохраним этот простой пример выполнения программы арифметического сложения, но складывать будем не все 200 чисел, а только первые 20. В этом случае полученный ответ уместится в 8-разрядном регистре как число без знака (число без знака означает, что можно не заботиться об использовании седьмого двоичного разряда для указания на то, положительное или отрицательное число получено в результате, т. е, содержимое ![]() С Stop ) Рис. 11.3. Схема алгоритма сложения первых двадцати чисел седьмого разряда может служить частью модуля числа). Схема алгоритма сложения первых 20 целых чисел приведена на рис. 11.3. Представленная списком команд, подобных тем, которые использовались в гл. 3 при описании образной модели стеллажной микро-ЭВМ, программа будет иметь следующий вид: Адрес Команда 000 LOAD 001 ADD без переноса 002 STORE 003 LOAD 004 INC аккумулятор 005 STORE 006 СОМР аккумулятора 007 INC аккумулятор 008 ADD без переноса 009 BRANCH ON NOT ZERO 010 STOP 100 Эта ячейка загружена числом 21 101 Эта ячейка загружена начальным значением N(N - 0) 102 Эта ячейка загружена начальным значением S(S = 0) Аргумент 101 102 102 101 100 ООО Комментарий Вычислить N Новое S = S-f N Запомнить новое S Вычислить N Новое N = N-H Запомнить новое N Дополнительный код нового N 21 - новое N Цикл до выполнения условия Команды о печати результата решения задачи нет. После прохождения программы ответом будет содержимое ячейки 102 (рис. 11.4). Эта программа на языке ассемблера выглядела бы следующим образом- Метка START
Адреса ячеек 100, 101 и 102 имеют отношение только к модели воображаемой стеллажьой микро-ЭВМ. Что же касается любого реального микропроцессора, то для его программирования пользуются символическими адре- ![]() oas\agr] 0021 003 \ oat j oos \ oos \ 007] m \ m \ ow Рис. 11.4. Модель памяти в виде стеллажа сами. Вместо конкретных чисел принято указывать название символических адресов, поэтому окончательная Метка .Мнемокод ялпйс Комнетарий Вычислить N Новое S = S + N Запомнить новое S Вычислить N Новое N=N+1 Запомнить новое N Дополнительный код N 21 - новое N Возврат к началу (STAR Г) Стоп Как перевести программу на языке ассемблера в программу в шестнадцатеричных кодах? Для этого прежде всего потребуется список шестнадцатеричных кодов операций воображаемого микропроцессора: Л1немокод КОД операции LDA AD ADD 6D STA 8D BR NZ 28
Это трехбайтные команды, где ** ** - адрес в памяти, откуда выбираются или где хранятся данные. |
© 2007 EPM-IBF.RU
Копирование материалов разрешено в случае наличия письменного разрешения |