Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

алгоритм декрементирования 16 разрядного значения

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
qwertyu
Гость





СообщениеДобавлено: Пн Сен 27 2004 15:01    Заголовок сообщения: алгоритм декрементирования 16 разрядного значения Ответить с цитатой

Процессор обрабатывает 8 битные данные.
Надо написать алгоритм декрементирования 16 разрядного
значения (можешь описывать как угодно, лишь бы понятно было).
Имеем: инкремент регистра, декремент, логические операции -
и/или/исключающее или, проверка нулевого результата, проверка
отдельно взятого бита, переход на заданный адрес (все операции применимы к байту). Чтоб просто было и красиво.
L-младшая часть(8бит), H-старшая часть(8бит)

if L>0 then
dec(L);
else
dec(H); L=255;
end

1. dec - уменьшение на единицу
Фрагмент будет написан на ассемблере, соответственно там нет
штук типа else и тд. Там есть проверка байта на ноль и безусловный переход на метку. если истино. если ложно, то пропуск команды перехода.
Соответственно если в регистре 1 ( в любом) то делается декремент
с проверкой и выполняется действие при истине. А по идее должно
выполнится действие. Если сделать декремент от 0, то в регистр запишется число 225, проверка на ноль даст отрицательный результат. Отдельно проверку на ноль можно сделать с помощью
логических операций и/или/исключающее или - эти операции
изменяют флаг (устанавливают бит в 1 если операция дает нулевой
результат).
помогите пожалуйста написать алгоритм ,а не программу.
Вернуться к началу
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Пн Сен 27 2004 18:41    Заголовок сообщения: Ответить с цитатой

Под какую такую архитектуру пишешь? БК 8086 имел 16и разрядную
архитектуру если не ошибаюсь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Go



Зарегистрирован: 27.09.2004
Сообщения: 6
Откуда: Russia

СообщениеДобавлено: Вт Сен 28 2004 01:42    Заголовок сообщения: Ответить с цитатой

ето видимо k50xx
Цитата:

Соответственно если в регистре 1 ( в любом) то делается декремент
с проверкой и выполняется действие при истине.
- вот етого не очень понял,
пример твоего кода приведи?
и в чем задача - просто в алгоритме ?-
или чтобы код верно работал?
[
repeat
repeat
al<-al-1
until (al=0)
ah <-ah-1
al<-255
until ah=0
]
если я точно помню - я реализовывал все просто -
просто делал декремент младшей части -
если флаг стн-ся нулевым делал прин. декр. старшей
и ее явную проверку на 0
(возможно использовал стек)
- в конце концов можно использовать стек для
сохранения значений регистра (если тебя это беспокоит)
и проверять его явно на 0. Very Happy
_________________
Спокойно! - кричал админ и
думал: идем ко дну...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FUKS



Зарегистрирован: 14.04.2002
Сообщения: 148
Откуда: Москва

СообщениеДобавлено: Вт Сен 28 2004 10:54    Заголовок сообщения: Re: алгоритм декрементирования 16 разрядного значения Ответить с цитатой

qwertyu писал(а):
Фрагмент будет написан на ассемблере ... помогите пожалуйста написать алгоритм ,а не программу.

Алгоритм проще расписать в виде программы. Если набор команд позволяет, то можно сделать так:
Код:

    xor A,A  ; Или mov A,0 (А - регистр) - обнулить A
    dec L
    adc A,0  ; Поместить в A значение флага переноса (происходит при L=0)
    sub H,A  ; И вычесть его из H

Если команды adc нет, то то же самое с переходом:
Код:

    dec L
    jnc NC  ; Переноса нет
    dec H
NC:

В общем, надо вычитать из H значение флага переноса (1) после dec L.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...