| | | | | | | | | РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты в разделе Номер выпуска: | 1640 | Дата выхода: | 17.12.2016, 20:15 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 35 / 13 | Вопросов / ответов: | 1 / 1 | Консультация # 190283: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Архитектура х86 - К сожалению больше информации о ассемблере не скажу, но надеюсь она и не понадобится т.к. вопрос состоит не в написании программы, а в описании несколько строчек, элементарных для эксперта=) Итак что я делаю - в задании я использую прерывания INT 8 (П... Консультация # 190283: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Архитектура х86 - К сожалению больше информации о ассемблере не скажу, но надеюсь она и не понадобится т.к. вопрос состоит не в написании программы, а в описании несколько строчек, элементарных для эксперта=) Итак что я делаю - в задании я использую прерывания INT 8 (Прерывания таймера), то есть ввожу команду INT 8, и с помощью клавиши F1 перехожу в биос. Там идут команды по системному таймеру, как показано на рисунку который прикрепил, мы добавляем в переменную SI значения 40, копируем значения в DS, в SI вставляем 006С, дальше добавляем 0001 в SI, добавляем по команде ADC и с помощью CMP сравниваем прошло ли 24 часа с момента запуска таймера, и переходим по адресу B853, тут вопрос - что значит CMP [SI], 00B0 ? Что с чем сравнивает, что такое 00B0, почему именно такое значения, как оно связанно с таймером. Заранее спасибо уважаемые эксперты
Дата отправки: 12.12.2016, 18:27 Вопрос задал: porsiya (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, porsiya! Счетчик тиков - двойное слово, которое находится в сегменте данных ДОСа по адресу 40h:6ch Не два слова, а одно двойное, сначала младшее слово, следом - старшее. Прерывание таймера int 8 происходит через каждые примерно 55 мс (или 18.2 раза в секунду) и увеличивает на 1 счетчик тиков. Приведенный фрагмент кода как раз и делает эту операцию, кроме того, сравнивает с количеством тиков за сутки, чтобы выполнить некоторые операции. Количество тиков за сутки равно 1800b0h = 1573040, ибо 1573040 * 0,054925494583735950770482632355185 сек = 60*60*24 сек = 1 сутки 0,054925494583735950770482632355185 сек - период одного тика (примерно 55 мс) 1/0,054925494583735950770482632355185 сек = 18,206481481481481481481481481543 раза в сек Теперь по коду. Для понимания я добавил некоторые возможные строки выше и ниже приведенного фрагмента
push ax ;сохраним ax xor ax, ax ;обнулим ax push ds ;сохраним сегментный регистр сегмента данных ;-------------- push si ;сохраним используемый регистр mov si, 40h ;зададим адрес сегмента данных ДОСа mov ds, si mov si, 6ch ;по смещению 6ch находится двойное слово - счетчик тиков таймера ;считаем тики, которые примерно раз в 0.055 мс (0,054925494583735950770482632355185 мс) add word ptr [si], 1 ;инкремент младшего слова, adc word ptr [si+2], 0 ; затем сложение с переносом старшего ;дальше самое интересное ;чтобы отсчитать сутки, надо насчитать 1800b0h тиков ;вот и получается: cmp [si+2], 18h ;сначала сравниваем старшее слово jnz L_B853 ;не равно - уходим куда-то cmp [si], 0b0h ;потом младшее ;-------------- ;напишу, что по идее дальше jnz L_B853 ;не равно - уходим туда же mov word ptr[si], 0 ;досчитали - обнуляем счетчик mov word ptr[si+2], 0 mov word ptr[si+4], 1 ; и взводим флаг переполнения по адресу 70h (в сегменте 40h) or al, 8 ;пометим, что у нас переполнение! L_B853: push ax ;в ax признак переполнения (или 0, или 8), сохраняется в стеке, ; ; чтобы не испортить ;... ;что-то там делаем...
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! | | | | | | | |
| | | | | | | | | РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты в разделе Номер выпуска: | 1639 | Дата выхода: | 16.12.2016, 19:45 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 35 / 13 | Вопросов / ответов: | 1 / 1 | Консультация # 190277: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: програмку нужно переделать в режим прерывания. написано у compmodel ... Консультация # 190277: Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
програмку нужно переделать в режим прерывания. написано у compmodel
RD #0 ;сначала будет 0 wr R1 ;здесь будем накапливать наше число RD #5 ;максимум 5 цифр wr R5 ;сохраним RDI #101 ;команда очистки буфера out 1 ; для клавиатуры RDI #102 ; команда сброса ошибки out 1 ; для клавиатуры RDI #10 ; команда разрешения МВУ OUT 1 ; для клавиатуры без прерываний (по опросу) RDI #103 ; команда установки посимвольного ввода out 1 ; для клавиатуры LOOP:IN 2 ; читаем регистр состояния клавиатуры DIV #10 ; делим на 10, чтобы второй разряд готовности стал в первом разряде WR R3 ; сохраним DIV #2 ; разделим на 2 MUL #2 ; умножим на 2 SUB R3 ; отнимем сохранное JZ LOOP ; если четное, то нет кода в буфере, идем на цикл IN 0 ; считываем код с клавиатуры wr R2 ; сохраним jz SAVE ; было просто нажатие на "Завершить ввод" sbi #48 ; <\'0\' ;проверим на цифру js RESET ; игнорируем, на сброс клавиатуры sbi #10 ; >\'9\' jns RESET ; игнорируем, на сброс клавиатуры adi #10 ;восстановим число 0-9 wr r2 ; сохраним rd r1 ; наше число mul #10 ; умножаем на 10 add r2 ; добавляем введенный символ wr r1 ; и на сохранение jrnz r5,RESET ; ждем максимум 5 цифр SAVE:rd #100 ;адрес ячейки, куда запишем результат wr r0 ; будем адресовать через R0 rd r1 ; введенное число wr @r0 ; сохраняем в памяти hlt ; останов RESET:RDI #101 ; команда сброса out 1 ; в клавиатуру RDI #103 ; команда установки посимвольного ввода (сбрасывается при сбросе) out 1 ; в клавиатуру jmp LOOP ; на чтение состояния клавиатуры Дата отправки: 11.12.2016, 19:37 Вопрос задал: misha.ya.ndex (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, misha.ya.ndex! Где-то так:
RD #0 ;сначала будет 0 wr R1 ;здесь будем накапливать наше число RD #5 ;максимум 5 цифр wr R5 ;сохраним ;настроим клавиатуру RDI #24 ;задаем адрес отработки прерывания клавиатуры ;точный адрес можно посмотреть в окне "программа" WR 100 ;фиксированный адрес ячейки 0 прерывания (клавиатуры) RDI #101 ;команда сброса OUT 1 RDI #11 ;разрешение и работа по прерыванию OUT 1 RDI #103 ;посимвольный режим OUT 1 EI ;разрешаем прерывания LOOP: ;основной цикл rd r5 ;циклим, пока в регистре r5 не 0 jnz LOOP ;заканчиваем работу rd #80 ;адрес ячейки, куда запишем результат wr r0 ; будем адресовать через R0 rd r1 ; введенное число wr @r0 ; сохраняем в памяти hlt ; останов ;Т.к. у нас основной цикл непустой, ;в анализе переполнения буфера клавиатуры используется аккумулятор ;то в прерывании необходимо сохранить аккумулятор KEYBOARD: ;прерывание от клавиатуры WR R9 ;сохраним аккумулятор в регистре IN 0 ;читаем код wr R2 ; сохраним jz FINISH ; было просто нажатие на "Завершить ввод" - завершаем работу sbi #48 ; <\'0\' ;проверим на цифру js RESET ; игнорируем, на сброс клавиатуры sbi #10 ; >\'9\' jns RESET ; игнорируем, на сброс клавиатуры adi #10 ;восстановим число 0-9 wr r2 ; сохраним rd r1 ; наше число mul #10 ; умножаем на 10 add r2 ; добавляем введенный символ wr r1 ; и на сохранение jrnz r5,RESET ; ждем максимум 5 цифр ;ввели все 5 разрядов, R5=0 - автоматом завершится и основной цикл RD R9 ;восстанавливаем аккумулятор IRET ;возврат из прерывания RESET:RDI #101 ; команда сброса out 1 ; в клавиатуру RDI #103 ; команда установки посимвольного ввода (сбрасывается при сбросе) out 1 ; в клавиатуру RD R9 ;восстанавливаем аккумулятор IRET ;возврат из прерывания FINISH:RDI #0 ;обнулим счетчик разрядов, чтобы завершился основной цикл! wr r5 rd r9 ;восстановим аккумулятор IRET ;возврат из прерывания  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 12.12.2016, 21:40 5 нет комментария ----- Дата оценки: 12.12.2016, 22:36 | Рейтинг ответа: 0 |
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! | | | | | | | |
| | | | | | | | | Рассылка для владельцев сайтов, веб-мастеров и сайтостроителей Почему Ваш бизнес-сайт не работает?Выпуск #96, 2016-12-07 | | | Добрый день, уважаемый читатель! Вы читаете меня уже давно - возможно, 5 лет или даже 10. И сегодня я хочу попросить Вас о помощи в связи с моей книгой - нужно буквально 15 секунд. Моя книга «Экспресс-маркетинг» вошла в число 12 лучших бизнес-книг года по версии «Озона» и сейчас идёт голосование за 1-е место. Борьба острая, каждый голос важен. Если Вы считаете, что моя книга полезна - я прошу Вас сейчас проголосовать за меня. Ссылка на страницу голосования - http://www.ozon.ru/premia/2016/books/4-3.html Там надо нажать на кнопку «Голосовать», через секунду откроется форма для голосования. В ней можно поставить «лайки» во всех Ваших соцсетях. А также дополнительно можно нажать большую кнопку «Голосовать» посреди страницы. Буду признателен за Вашу поддержку - сейчас каждый голос важен. Заходите на http://www.ozon.ru/premia/2016/books/4-3.html прямо сейчас - и голосуйте. Вместе мы победим! Как со мной списаться Пишите мне на адрес a-l@kursy.ru. Если же письмо осталось без ответа или вернулось (что иногда случается из-за ошибок спам-фильтров), Вы можете послать мне письмо через форму на этой странице - такие письма я получаю всегда. Пишите мне. Предлагайте свои сайты для разбора. Присылайте свои идеи для рассылки. Делитесь своим опытом. Задавайте вопросы. Рассказывайте о себе и своём бизнесе. Пишите! Всего доброго! С уважением, Александр Левитас, доктор сайтов. P.S. Присоединяйтесь ко мне в соцсетях: Facebook, ВКонтакте, Twitter, Instagram, LinkedIn, YouTube, Живой Журнал, Google+, Мой круг, Одноклассники Если Вы хотите нанять меня для подробного анализа Вашего бизнес-сайта - пожалуйста, не забудьте ответить в своём письме на следующие вопросы (без этой информации я едва ли смогу Вам помочь): - Адрес сайта?
- Какова главная задача сайта?
- Каких людей Вы хотите привлечь на сайт?
- Какие конкретные действия они должны совершить в результате посещения сайта?
- Являетесь ли Вы владельцем или менеджером сайта?
- С какими проблемами Вы столкнулись?
- Что Вы делали или делаете сейчас для решения этих проблем?
Анализ будет касаться как дизайна сайта, так и его эргономичности (юзабильности), эффективности продающих текстов, оптимальных способов рекламы и так далее. | | P.P.S. Если Вы считаете, что этот выпуск рассылки будет интересен кому-то из Ваших коллег или друзей и может помочь ему в работе - пожалуйста, перешлите ему это письмо. | | | Copyright © Александр Левитас, 2016-12-07. Письма, присланные автору рассылки, могут быть опубликованы в рассылке - в полном объёме или частично - без предварительного уведомления. Если Вы не хотите, чтобы Ваше письмо было опубликовано - пожалуйста, явно укажите это в начале письма. Спасибо. | | | | | | | | | | |
| | |