Topic KX_ERR from CPU FAQ base


Пожалуйста, обратите внимание на дату представленного здесь сообщения! Информация об адресах, телефонах, организациях и людях наверняка устарела и потеряла практическую ценность, обретя, однако, ценность историческую, заради которой до сих пор и хранится...


SU.HARDW.PC.CPU (2:5020/299) —————————————————————————————— SU.HARDW.PC.CPU From : Vlad Ezhergin 2:5020/630.44 Thu 29 May 97 11:06 Subj : Divide by 0 ———————————————————————————————————————————————————————————————————————————————— Hi, Sergey! Вот выдержка из Компутер Week от 15 мая : " Письмо 1 From: "Федор Волосных" To: Subject Conflict between Clipper and AMD 5k86 Date Mon,7 Apr 1997 12:45:10 +0400 [SkippeD] Отчет по исследованию причин сбоев АMD 5к86-Р90(9 октября 1996 г., "Техника-Сервис",Москва) Постановка задач:при использовании в поставляемых компьютерах процессора АMD 5k86-P90 обнаружены сбои программ Clipper,в частности программы МCITY(карта Москвы).Сбои выражаются в аварийном завершении программы с сообщением "дижидее еrror",хотя с процессорами Intel работает нормально.Hеобходимо определить причину сбоев и возможные способы их устранения. [SkippeD] Результаты исследования:удалось определить,что сбой происходит в небольшой подпрограмме,вычисляющей индекс производительности компьютера.Для этого подпрограмма подсчитывает число циклов,которое процессор успевает выполнить между двымя прерываниями от системного таймера(55 мс),при этом внутри цикла используется програмная задержка с применением асемблерных инструкций: mov cx,100(3 байта) L:loop L (2 байта) Исследованиие показало,что Intel Pentium/166 на частоте 90 МГц успевает выполнить ооло 6000 таких циклов,а АMD 5k86-P90 - около 43000(видимо ,благодаря своей внутренней RISC-архитектуре,оптимизирующей выполнение коротких ,в нашем случае 2-байтовых циклов; для сравнения:Intel Pentium/166 выполнил всего 11300 таких циклов). Выяснилось,что сбой происходит при вычислении индекса производительности процессора путем деления подсчитанного количества циклов (16-разрядное число в АX) на константу 55(d)(8-разрядное число в BH) для получения количества циклов,выполняемых за 1 мс.Деление выполняется по инструкции беззнакового деления div bh, которая предполагает ,что результатом деления 16-разрядного(АХ) числа на 8-разрядное(ВH) будет 8-разрядное чиисло(AL),не превышающее 255(d).При исполнении на Pentium это условиие выполняется(6000/55=109),a на процессоре АМD 5k86-P90 - нет (43000щ55=782).Поэтому при выполнении инструкции div происходиит ошибак-"переполнение при делени",вызывающее Int 00,что ии приводит к аварийному завершению программы с сосбщением "divide error" . Выводы:данный сбой не обусловлен дефектом процессора, а напротив, свидетельствует о его значительно более высокой производительности при выполнении коротких циклов по сравнению с процессорами Pentium.Hаличие сбоя определяется применениием некорректного спосба вычисления индекса проиизводительности процессора программой,в данном случае -МCITY(и,по всей вероятности,другими программами,использующими аналогичный способ определения быстродействия процессора). Письмо 3 From: "Informix" To: Subject:AMD&Clipper [SkippeD] нашелся другой выход.В библиотеке Цлииппер Тоолс(ct.lib или ct2.lib) необходимо найти три байта "BA 05 00"[SkippeD] и заменить их на "BA FF 00",что позволит отключить процедуру проверки скорости процессора[SkippeD] С уважением Терентьев Алексей,Ростов-на-Дону " Vлад. --- GoldEd 3.00.Alpha4+ --- * Origin: -= Who am I ? Where am I ? =- (FidoNet 2:5020/630.44)

Return to the main CPU FAQ page