Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: алгоритм декрементирования 16 разрядного  (Прочитано 7789 раз)
0 Пользователей и 1 Гость смотрят эту тему.
qwertyu
Гость
« : 27-09-2004 11:50 » 

Процессор обрабатывает 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 если операция дает нулевой
результат).
помогите написать алгоритм а не программу..
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 27-09-2004 12:12 » 

Вроде все просто:
Код:

  sub cl,1
  jnc skip
  dec ch
skip{
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Xeysan
Гость
« Ответ #2 : 27-09-2004 12:47 » 

Если речь идет про х86, то можно проще...
Код:

dec cl
sbb ch, 0


Есть еще вариант dec cx...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 28-09-2004 03:13 » 

Xeysan, ошибалься... декремент не влияет на флаг переноса

лучше так:
//cx=cx-1
sub  cl,1
sbb  ch,0
Записан

Xeysan
Гость
« Ответ #4 : 28-09-2004 13:46 » 

Да, ...каюсь  Отлично
Записан
dedOK
Гость
« Ответ #5 : 03-10-2004 15:50 » 

Т. к. заем из старших 8 бит происходит только при равенсте младших 8 бит 0, то:
Код:
or L,L
jnz _1
dec H
_1{ dec L
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines