Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Ассемблер? Это просто! Учимся программировать (FAQ)
"Ассемблер? Это просто! Учимся программировать (FAQ)"
Выпуск № 215
от 14.03.2002, 02:05
Администратор: Калашников Олег
Сайт Администратора: Программирование на Ассемблере
Старейшины рассылки |
1. Broken Sword - ответов: 387. 2. Painbringer (нечто наподобие домашней страницы) - ответов: 369. 3. Sensey - ответов: 322. 4. Dron (Операционная система с нуля!) - ответов: 267. 5. DiGiT - ответов: 257. |
Вопрос № 173 |
Имеется программа(она в приложении). Очень простая, выполняет чтение с эхом символа с клавиатуры(01h int 21h)
Нужно составить программу(изменить), чтобы она повторяла действие первой, но с отключеным эхом ввода и использованием стандартной функцией вывода. Я вроде бы знаю что это просто и надо применить функцию чтения символа без эха с клавиатуры(07 int 21) она такая же как и 01h только выводит сивол с клавиатыры без ожидания его ввода и без проверки нажатия ctrl+c. Но не могу реализовать т.к это пока трудно для меня. И если я этого не пойму то все... Помогите, начинающему.
Приложение:
Отправитель: Kova
Вопрос отправлен: 08.03.2002, 14:46
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS
_______________
Отвечает Broken Sword
Приветствую Вас, Kova!
У тебя какой-то гибрид экзешника и ком-а. Модель памяти тайни, а сегмента два, и где entry point? короче, оно у меня не компилилось, я переделал и все теперь работает. Каждый раз в цикле в ah заносишь 1 - зачем? оно и так там... и вообще прицепил еще les... к чему? для адреса переменную целую выделять.... вообщем, что то ты перемудрил.
НИКОГДА НЕ ПИШИ EXE-файлы - они совершенно ни к чему.
это ты зря страдаешь. сущ. 0Ah ф-ция 21h интерапта для этого.
еще, по моему, и та версия, если не считать компильских ошибок, работает, просто, мне кажется, ты не совсем правильно толкуешь "без эха" - в данном случае "без эха" - это БЕЗ ВЫВОДА НА ЭКРАН!
p.s. Т.к. я отвечаю 2 раз на один и тот же вопрос - оцени ответ как "не считать за ответ"
Приложение:
Отправлено: 08.03.2002, 15:42
Отправитель: Broken Sword (регистрация: 28/12/2001, ответов на счету: 387)
ICQ#64476575
Украина, Одесса
_______________
Отвечает Guess Who
Здравствуйте, Kova!
"сивол с клавиатыры без ожидания его ввода и без проверки нажатия ctrl+c." - так действует функция 06h 21 прерывания.
Смотри приложение, там одна программа, которая производит считывание клавиши с помощью функции 07h, а вторая с помощью 06h, 21 прерывания.
Приложение:
Отправлено: 08.03.2002, 18:32
Отправитель: Guess Who (регистрация: 20/02/2002, ответов на счету: 8)
Вопрос № 174 |
Салам алекум господа эксперты!
Помогите советом, как разогнать комп.
Материнская плата Pc Partner с чипсетом i810,проц celeron
600 Socket-370 FC-PGA, опреративка РС133.
На плате есть джамперы переключения частоты шины- 66/100/133
после установки в положение 100- комп отказывается
запускаться совершенно.
В биосе выставляются частоты шины 66/75/83, значение on- только на 66Mhz остальные- off.
Подскажите возможен- ли разгон вообще, если- да, то
поподробней как это можно сделать.
Все соображения по этому поводу просьба высылать мылом.
Заранее очень признателен.
Отправитель: Alex (alex_gorgevsky@mail.ru)
Вопрос отправлен: 08.03.2002, 20:44
Подгруппа: Модели, виды и типы компьютеров (hard)
_______________
Отвечает Painbringer
Приветствую Вас, Alex!
Дык ты коэффициент умножения то меняешь? поставь шину сто уножение для начала шесть.
Отправлено: 09.03.2002, 00:19
Отправитель: Painbringer (регистрация: 28/12/2001, ответов на счету: 369)
URL: http://limanski.narod.ru - нечто наподобие домашней страницы
ICQ 146861957
Россия, Дзержинск, Нижегородская обл.
_______________
Отвечает DivX
Приветствую Вас, Alex!
Аналогичная штуковина и у меня. Должна выставится хотя бы на 83 МГц. Со старым кулером у меня проц плохо выдерживал 95 МГц, поставил новый , теперь нормально работает. Основная проблема в том, что на 100 данный экземпляр не ставится (даже при повышении напряжения, он и так разогнан intel), и нужны промежуточные между 83 и 100 режимы. Есть софтовые програмки типа SoftFSB, которые вроде позволяют "плавно" изменять частоту, но они активизируются только в Виндозе. Если хочешь поэкспериментировать, приготовь нормальный кулер(celeron'у в принципе много не надо) и термопасту.
Отправлено: 09.03.2002, 03:02
Отправитель: DivX (регистрация: 28/12/2001, ответов на счету: 221)
_______________
Отвечает progmas
Доброе время суток, Alex!
Разогнать можно почти всегда, но стоит ли это делать. Если тормозит винда, то добавь лучше мозгов (ОЗУ). Разогнаный проц часто дохнет!!!
Отправлено: 09.03.2002, 13:05
Отправитель: progmas (регистрация: 28/12/2001, ответов на счету: 26)
URL: http://a-kireev.narod.ru - HOMEPAGE
_______________
Отвечает Magistrblack
Добрый день, Alex!
Посмотри получше биос, есть ли там выставить вручную или снять автоопределение и т.д. В общем должно получиться, но 83 максимум. А то что на 100 не идет это нормально
Отправлено: 11.03.2002, 09:25
Отправитель: Magistrblack (регистрация: 06/03/2002, ответов на счету: 5)
Самара
Вопрос № 160 |
Вычитал в мартовском журнале “Chip”, что есть фирмы, занимающиеся восстановлением информации на винчестере. Мол для них стертые, замененные файлы восстановить вообще не проблема, восстанавливают информацию даже после форматирования. Ну на счет стертыхфайлов понятно, ведь они не стираются, а просто область, кот. они занимают помечается как свободная. Тяжелее понимаю как на счет замененных файлов, и уже совсем не укладывается в голове восстановление после форматирования. Не сказки ли все это? А если нет, то объясните пожалуйста как это работает. Может кроется что-то в файловой системе (в таблице размещения файлов или еще где). И пожалуйста подскажите где взять информацию по файловым системам.
Отправитель: pasha
Вопрос отправлен: 07.03.2002, 12:18
Подгруппа: Пользовательская работа с Windows
_______________
Отвечает Sensey
Доброе время суток, pasha!
Форматирование - то же стирание, в ФАТе помечается блок как неиспользуемый, и все.
А точнее это - замена первого байта в имени файла на спецсимвол, какой - не помню, 2?? какой-то.
Это на пользовательском уровне.
Тут вот еще Шегеда подсказывает, что даже после перезаписи файла на винте остается остаточная намагниченность, по которой с помощью спец датчиков можно понять, что было записано до перезаписи.
Отправлено: 07.03.2002, 12:39
Отправитель: Sensey (регистрация: 28/12/2001, ответов на счету: 322)
Тел.: (0572) 41-76-04 д.
Украина, Харьков
_______________
Отвечает LAO
Доброе время суток, pasha!
1) Насчет замещения файлов. При записи файла на диск система ищет ближайщие свободные кластера от начала ФАТ. Представь себе след. ситауцию: файл Ф1 занимает кластера 101,102,103,105,110, а совбодные кластера в ФАТ - 80,83,84. При замещении Ф1 он займет кластера 80,83,84,101,102. Во всяком случае, так было в старых версиях ДОС. А в 103,105 и 110 информация сохранится. Хоть что-то :))
2) Информации море, начиная с классического R. Jourdain и... Войди в Yandex и задай искать "FAT", "FAT32" и пр.
Отправлено: 07.03.2002, 14:46
Отправитель: LAO (регистрация: 05/03/2002, ответов на счету: 29)
Россия, Москва
Вопрос № 177 |
Здравствуйте!У меня такой вопросец-как преобразовать код процедуры(см.приложение), чтобы при снятии{}она начала работать,а то компиляторпишет ошибку!
Приложение:
Отправитель: kVitamin (kvitamin@mail.ru)
Вопрос отправлен: 09.03.2002, 04:04
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS
_______________
Отвечает Dzik
Доброе время суток, kVitamin!
Вставь после асм begin,
а после всего end;
Отправлено: 09.03.2002, 09:17
Отправитель: Dzik (регистрация: 15/02/2002, ответов на счету: 22)
URL: http://www.gamefort.km.ru - Разработка игрушек
Новосибирск
_______________
Отвечает Joker
Доброе время суток, kVitamin!
{.....}
interface
{.....}
var
Mx,My:Word;
Mb:Word;
{.....}
implementation
{....}
Procedure GetMouseState;assembler;
asm
mov ax, 03
int 33h
mov mx, cx
mov my, dx
mov mb, bx
end;
{.....}
Отправлено: 10.03.2002, 13:08
Отправитель: Joker (регистрация: 12/01/2002, ответов на счету: 29)
Россия, Волгоград
Вопрос № 178 |
Доброе время суток.
Имеется электрическая схема устройства. Формат растровый, bmp. Может есть программка , которая могла бы распознать данный рисунок и перевести его в векторную форму, т.к. качество печати растра неприемлимо.
Отправитель: Эксперт DivX
Вопрос отправлен: 09.03.2002, 04:49
Подгруппа: Пользовательская работа с Windows
_______________
Отвечает progmas
Здравствуйте, DivX!
Если плохой растр, то вектор врятли будет лучше. Попробуй что-нибудь, типа ColrelDraw, Photoshop
Отправлено: 09.03.2002, 12:58
Отправитель: progmas (регистрация: 28/12/2001, ответов на счету: 26)
URL: http://a-kireev.narod.ru - HOMEPAGE
_______________
Отвечает GL
Здравствуйте, DivX!
Существует специальная программа для перевода растра в вектор Adobe Streamline. Есть ещё такая же функция в XaraX. Из тех, что я пробовал, предпочтительнее XaraX (~1.2 мб, качал отсюда http://www.xara.com/downloads/software/xaraxdl.exe).
Отправлено: 09.03.2002, 13:09
Отправитель: GL (регистрация: 02/03/2002, ответов на счету: 21)
Амурская обл., Благовещенск
_______________
Отвечает LAO
Приветствую Вас, DivX!
Воспользуйся пакетом CorelDraw - импортируй BMP и сохрани в формате Corel'а. Я делал именно так.
Отправлено: 09.03.2002, 20:09
Отправитель: LAO (регистрация: 05/03/2002, ответов на счету: 29)
Россия, Москва
_______________
Отвечает Painbringer
Здравствуйте, DivX!
В полный корел входила какая то хрень для преобразования растра в вектор. как работала? не знаю, но говорят что не плохо именно для такой вот хреновины как чертежи всякие там.
Отправлено: 09.03.2002, 22:43
Отправитель: Painbringer (регистрация: 28/12/2001, ответов на счету: 369)
URL: http://limanski.narod.ru - нечто наподобие домашней страницы
ICQ 146861957
Россия, Дзержинск, Нижегородская обл.
_______________
Отвечает freeseacher
Приветствую Вас, DivX!
Перевести мона и даже прог не мало, начиная с Flash 5 у него такая опция есть convert и еще где-то видел прогу которая специализировано чертежи да схемы в вектор перегоняет. Наверняка в listsoft найдешь.
RasterVect 4.4 beta
http://www.softbest.ru/366cool.shtml
Отправлено: 10.03.2002, 09:28
Отправитель: freeseacher (регистрация: 03/02/2002, ответов на счету: 34)
Тел.: 8(3832)366362
Новосибирск
_______________
Отвечает kostik
Доброе время суток, DivX!
Навряд ли существует такая программа! шибко умной она должна быть!А вот переводящих из векторного формата в растровый, тааких завались!
Отправлено: 13.03.2002, 14:50
Отправитель: kostik (регистрация: 01/02/2002, ответов на счету: 79)
URL: http://www.ospedia.boom.ru - Что-то вроде домашней странички
mrkirov@mail.ru ICQ UIN #151014798
Россия, Хабаровск
Вопрос № 175 |
Привет эксперты
Пробовал установить МАСМ61 под WindowsXP PRO вроде всё встало, но при попытке запустить файл ml.exe пищет:
ml.exe is not a valid Win32 application.
Запускать пробовал из окна DOS.
Help please.
Отправитель: Sivan (tariel@pisem.net)
Вопрос отправлен: 08.03.2002, 21:49
Подгруппа: Работа с MASM/TASM
_______________
Отвечает BMR
Приветствую Вас, Sivan!
путь к директории с ml надо поставить.
Отправлено: 09.03.2002, 00:28
Отправитель: BMR (регистрация: 10/02/2002, ответов на счету: 105)
Россия, Пенза
Вопрос № 179 |
Подскажите как вывести число, объявленное, например как:
chislo db 25
Каким прерыванием и какой функцией?
Отправитель: Maxim
Вопрос отправлен: 09.03.2002, 05:52
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS
_______________
Отвечает Broken Sword
Приветствую Вас, Maxim!
Ну нету, нету такой ф-ции и тем более прерывания!!! И быть не может, сколько можно об этом говорить! 99% ф-ций прерываний БИОС и ДОС на вывод в качестве входного параметра получают ASCII код числа, оставшийся один процент - в экзотических форматах типа BCD. Поэтому вот тебе краткие алгоритмы на все типы чисел.
1. Двоичное число (b): с ним никаких проблем нету - сдвигаешь себе регистр и в зависимости от флага CF рисуешь нолик или единичку (но тут опять же, все сводиться к выводу используя ASCII коды нуля или единицы, а как же иначе то!!!)
2. Шестнадцатиричное число (h): с ним уже есть проблемы. Вариантов много, один из них создать таблицу 0123...CDEF и потом используя XLAT выводить опять же по одному символу числа... (и тут все сведется к выводу ASCII кода)
3. Десятичное число (d): тут уже куча проблем. Алгоритмы самые извращенные. Я делаю так - делишь свое число в цикле на 0Ah, полученный остаток и есть один из символов десятичного числа (здесь справа налево), к-рый, опять же, преобразовав в ASCII-код нужно выводить.
Отправлено: 09.03.2002, 11:12
Отправитель: Broken Sword (регистрация: 28/12/2001, ответов на счету: 387)
ICQ#64476575
Украина, Одесса
_______________
Отвечает 10ck
Хай, Maxim!
Прерывание 10h, функция 9h - вывод строки
Прерывание 21h, функция 2h - вывод символа
Отправлено: 09.03.2002, 19:36
Отправитель: 10ck (регистрация: 18/02/2002, ответов на счету: 42)
Россия, Нижний Новгород
_______________
Отвечает BMR
Приветствую Вас, Maxim!
1. Делишь на 10
2. Если результат >=0 то
2.1. к коду "0" прибавить Результат
2.2. вывести на экран
3. Если результат<0 то
3.1. к числу + "0"
3.2. вывести
3.3 выйти
3. Вычесть из числа значение (результат*10)
4 на шаг 1
Отправлено: 10.03.2002, 23:46
Отправитель: BMR (регистрация: 10/02/2002, ответов на счету: 105)
Россия, Пенза
_______________
Отвечает GL
Приветствую Вас, Maxim!
Чтобы вывести на экран число, надо преобразовать его в ascii-символы. Как конкретно это делается смотри в предыдущих выпусках рассылки, уже много раз отвечали на этот вопрос.
Отправлено: 11.03.2002, 13:04
Отправитель: GL (регистрация: 02/03/2002, ответов на счету: 21)
Амурская обл., Благовещенск
Вопрос № 181 |
Уважаемые эксперты.
Убил винду, поставил по новой и вдруг исчез CD Burner,повторил,
та же картина..до убития винды все было ок..
С чем связано это? Винда МЕ.
спасибо
Отправитель: oleg
Вопрос отправлен: 09.03.2002, 13:15
Подгруппа: Пользовательская работа с Windows
_______________
Отвечает наСИльник
Здравствуйте, oleg!
Не знаю что такое CD Burner, но если у тебя в винде не отображается CD то посмотри прописан ли СД в командных файлах. Если нет то пропиши.
З.Ы. По-моему у кого то я наблюдал такое и он для того чтобы открыть D:\ Загружался под Дос набирал там WIN т.е. загружал винду из под Доса. И тоды у него находился СД :-)))))))))))
Отправлено: 09.03.2002, 14:34
Отправитель: наСИльник (регистрация: 27/02/2002, ответов на счету: 32)
ICQ#114552395
Russia, Orsk
_______________
Отвечает LAO
Здравствуйте, oleg!
Не помню, чтобы такое приложение входило в число штатных Винда МЕ. Вероятно, оно устанавливалось отдельно и было убито вместе с Виндой. Переустановите приложение с дистрибутива.
Отправлено: 11.03.2002, 01:56
Отправитель: LAO (регистрация: 05/03/2002, ответов на счету: 29)
Россия, Москва
Вопрос № 182 |
Ув. эксперты! Есть в асме такая ошибка - divide overflow, она же - #DE. У Зубкова сказано, что вызывается она аж в 2-х случаях: деление на 0 и переполнение при делении... Вот деление на 0 - это понятно, а что такое переполнение при делении и с чем его едят(откуда оно берётся)? Есть реальный пример, где скачет эта ошибка, но интересует теория появления...
Отправитель: Эксперт Sslash (sslash@ukr.net)
Вопрос отправлен: 09.03.2002, 14:19
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS
_______________
Отвечает Broken Sword
Доброе время суток, Sslash!
#DE - Divide Error (overflow - это лишь частный случай :)
вектор 0 (вектора исключений)
Действительно, возникает только в двух случаях:
IF SRC = 0
THEN #DE; (* divide error *)
FI;
IF OpernadSize = 8 (* word/byte operation *)
THEN
temp ¬ AX / SRC;
IF temp > FFH
THEN #DE; (* divide error *) ;
ELSE
AL ¬ temp;
AH ¬ AX MOD SRC;
FI;
т.е. если делитель равен 0, или, как в данном случае, если AX/делитель>0FFh, ясно? или, в случае DX:AX/делитель>0FFFFh и т.д.
Просто интересные факты про #DE:
- в 8086 процах после возникн. #DE CS:IP указывает на саму инструкцию, вызвавшую #DE, а начиная с 80386 - на следующую
- возникает ДО(!) обработки div или idiv
- вычитал, что #DE генерят не только DIV и IDIV, а еще и AAM и AAD (но они по сути юзят DIV)
p.s. первый ответ был больше, больше интересных фактов я нарыл, но какая то падла на секунду выключила свет, поэтому все что удалось вспомнить - вот..
Отправлено: 09.03.2002, 15:52
Отправитель: Broken Sword (регистрация: 28/12/2001, ответов на счету: 387)
ICQ#64476575
Украина, Одесса
_______________
Отвечает Dron
Здравствуйте, Sslash!
Что и на что делит процессор?
берем к примеру 16-битные регистры.
делимое храниться в dx:ax (то есть 32 бита)
делимое храниться где угодно, но только 16 бит.
в результате частное попадает в ax (16 бит)
остаток попадает в dx (тоже 16 бит)
если например 10000000 / 10, то в частное получится 1000000 и его невозможно уместить в ax, вот тебе и переполнение при делении.
Отправлено: 11.03.2002, 11:12
Отправитель: Dron (регистрация: 28/12/2001, ответов на счету: 267)
Информзащита
Адрес: Москва
URL: http://asmdev.narod.ru/asmos.html - Операционная система с нуля!
2144510
Россия, Москва
_______________
Отвечает vitya
Добрый день, Sslash!
В компьютере все числа хранятся в регистрах, ячейках памяти или что угодно. Скажем длина слова 80 байтов (long double)
из которых часть мантисса, часть степень (число с плавающей запятой). Теперь, когда вы делите 1 на 0.000000000000000001
результирующее число будет 100000000000000000, а представьте, что делите еще на меньшее, то есть у вас происходит переполнение, о чем и говорится. Из математики зхе известно,
что 1/x->в беско x->0.
Отправлено: 11.03.2002, 14:10
Отправитель: vitya (регистрация: 03/01/2002, ответов на счету: 37)
103935193
Armenia, Yerevan
_______________
Отвечает Ayl
Доброе время суток, Sslash!
Ошибка при делении - это очень просто. В асме деление выглядит так (на примере 16-разрядных регистров):
Имеется делимое - либо регистр ax, либо пара dx:ax.
В качестве делителя используется в первом случае байтный регистр или память, а во втором - словный.
Частное от деления записывается в младшую часть делимого, а остаток - в старшую. Т.е., в первом случае у нас частное будет в al, а остаток в ah, а во втором частное будет в ax, а остаток - в dx.
Предположим теперь, что мы делим большое число (например, 65535) на маленькое (например, 2). Причем используем первый вариант.
Тогда перед выполнением деления у нас будет такая вещь:
ax = 65535
bl = 2
После выполнения команды div bl мы должны получить:
65535 = 2 * 32767 + 1
и записать в регистр ah число 1, а в регистр al - 32767. Но в байтный регистр мы может записать только число 255! Поэтому в этом случае будет ошибка.
Отправлено: 12.03.2002, 11:51
Отправитель: Ayl (регистрация: 28/12/2001, ответов на счету: 169)
Россия, Санкт-Петербург
Форма отправки сообщения |
Заполните приведенную ниже форму для того, чтобы отправить вопрос. Дополнительную информации по пользованию формой для подписчиков и экспертов можно получить, нажав на знак вопроса в соответствующем разделе, при этом информация будет отображена в отдельном окне.
В почтовых программах форма не работает!!! Открывайте рассылку в браузере Internet Explorer, где и набирайте Ваш вопрос.
© 2000 - 2002 Россия, Москва. Авторское право: Калашников О. А. |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||