Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Ассемблер? Это просто! Учимся программировать (FAQ)
Ассемблер? Это просто! Учимся программировать (FAQ)
Выпуск N 056 |
Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"
Дата выхода: 2001-08-12
Вопрос №477
Здравствуйте.
Подскажите, как считать информацию, свойственную только этому компьютеру(или поставке компьютеров). Серию, дату изготовления, завод производитель или что-то в этом роде.
Или тоже самое, но с жесткого диска.
Знаю, что можно. Лет 10 назад считывал с AT286. Забыл.
С уважением Андрей.
Ответ
Здравствуйте, Андрей! В том то и дело, что 10 лет назад, тода все компы брендными были (или как это сказать?), ну там, Compaq или IBM. Там понятное дело, каждый комп на заводе собирали, все детальки к детальке подогнаны, серийная инфа уж точно дето была записана в полном объеме и сверх того (хоть в том же паспорте)... сейчас 99% компов клепают в подвалах магазинов (там же сверху и продают), 99% запчастей и коплектухи - тайвань или китай, это, конечно, не значит, что нельзя узнать дату и завод производитель, лучше всего раскрутить комп и посмотреть наклеечки всякие, штампики. А насчет дат - смотри при загрузке компа (если повезет, даже серийный номер проца). А вообще найди программку типа SiSoft Sandra Professional - 90% инфы о компе она тебе выложит.
Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 30
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №479
Уважаемые эксперты.
Не могли бы вы рассказать о протоколах POP3 и IMAP4. Наиболее интересующий вопрос - кто из них лучше.
Заранее спасибо.
Ответ
Здравствуйте, Painbringer!
Ну, кто из них лучше, судить не возьмусь :(
А вообще, в протоколе IMAP4 поддерживается возможность построения
на сервере структуры каталогов, что не предусмотрено протоколом
POP3. Однако авторизация (логин) по протоколу POP3 происходит
быстрее, так как не надо делать переход в каталог Inbox.
Других различий не знаю, глубоко не копал :(
ЗЫ: На сайте www.sources.ru есть краткие описания
обоих протоколов, так что можешь глянуть...
Отправил эксперт: Nik
Эксперт отправил ответов (всего): 58
Экспертная группа: Пользовательская работа с Windows
Вопрос №480
Как в программе, написанной на ассемблере, перезагрузить компьютер?
Ответ
Здравствуйте, Eduard!
Нажмите кнопку Reset! (100% в программе на любом языке!)
Если честно, то СПЕЦИАЛЬНОЙ команды или функции в Ассемблере нет, это может произойти только СЛУЧАЙНО (ну стек забыл почистить и вышел по ret и т.п.) Ито в Виндах такие СЛУЧАЙНОСТИ не особо проходят...
Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 31
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №480
Как в программе, написанной на ассемблере, перезагрузить компьютер?
Ответ
Здравствуйте, Eduard!
Собственно этот вопрос уже задавался (вопрос № 400).
По досом - int 19h
Приложение:
Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 29
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №480
Как в программе, написанной на ассемблере, перезагрузить компьютер?
Ответ
Здравствуйте, Eduard!
Например так:
Приложение:
Отправил эксперт: Leha
Эксперт отправил ответов (всего): 16
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №450
Здравствуйте, эксперты!
У меня не вопрос, а скорее просьба.
Я недавно начал изучать Ассемблер, вещь хорошая, ну вот по ходу изучения написал программу, которая выводит на экран наш родной триколор.
Отсюда просьба, кому не лень, взгляните, как ее можно оптимизировать, и если можно с пояснениями, какой оператор что делает. Извините за беспокойство, знаний не хватает, а писать охота.
С уважением, Вадим.
Ответ
Здравствуйте, Вадим Сурин!
Вроде как так получше будет.
Приложение:
Отправил эксперт: Василий
Эксперт отправил ответов (всего): 18
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №456
Уважаемые эксперты! Помогите пожалуйста с такой проблемой:
не могу приручить команду DIV. Делаю следующее:
mov ax,00EFh
mov bx,0007h
div bx
retn
под отладчиком все прекрасно делится (стандартный DEBUG, получ. 22 в HEXе), запускаю просто из доса - переполнение. В чем причина ?
Ответ
Здравствуйте, Дмитрий!
Все дело в формате DIV'а. Даю вырезку из руководства по TASM:
При беззнаковом делении 16-битового значения на 8-битовое
делимое должно быть записано в регистре AX. 8-битовый делитель
может храниться в любом 8-битовом общем регистре или переменной в
памяти соответствующего размера. Инструкция DIV всегда записывает
8-битовое частное в регистр AL, а 8-битовый остаток - в AH. Нап-
ример, в результате выполнения инструкций:
.
.
.
mov ax,51
mov dl,10
div dl
.
.
.
результат 5 (51/10) будет записан в регистр AL, а остаток 1 (ос-
таток от деления 51/10) - в регистр AH.
Заметим, что частное представляет собой 8-битовое значение.
Это означает, что результат деления 16-битового операнда на
8-битовый операнд должен превышать 255. Если частное слишком ве-
лико, то генерируется прерывание 0 (прерывания по делению на 0).
Инструкции:
.
.
.
mov ax,0fffh
mov bl,1
div bl
.
.
.
генерируют прерывание по делению на 0 (как можно ожидать, преры-
вание по делению на 0 генерируется также, если 0 используется в
качестве делителя).
При делении 32-битового операнда на 16-битовый операнд дели-
мое должно записываться в регистрах DX:AX. 16-битовый делитель
может находиться в любом из 16-битовых регистров общего назначе-
ния или в переменной в памяти соответствующего размера. Например,
в результате выполнения инструкций:
.
.
.
mov ax,2
mov dx,1 ; загрузить в DX:AX 10002h
mov bx,10h
div bx
.
.
.
частное 1000h (результат деления 10002h на 10h) будет записано в
регистре AX, а 2 (остаток от деления) - в регистре DX.
Так что надо было так:
mov ax,00EFh
xor dx, dx
mov bx,0007h
div bx
Отправил эксперт: Василий
Эксперт отправил ответов (всего): 19
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №477
Здравствуйте.
Подскажите, как считать информацию, свойственную только этому компьютеру(или поставке компьютеров). Серию, дату изготовления, завод производитель или что-то в этом роде.
Или тоже самое, но с жесткого диска.
Знаю, что можно. Лет 10 назад считывал с AT286. Забыл.
С уважением Андрей.
Ответ
Здравствуйте, Андрей!
Что бы считать информацию, свойственную только этому компьютеру, нужно
его включить и как экра покажет изображение нажать клавишу "Pause".
На экране будет высвечиваться следующие:
Первые строчки производитель биоса для мамки. Через пустую строку будет идти производитель мамки и какая версия биоса прошита.
Например:
ASUS P3V4X ACPI BIOS Revision 1005 - значит производитель ASUS, модель мамки P3V4X, версия биос 1005.
Следующей строкой будет указыватся процесор:
Intel(R) Pentium(R) III 500 MHz Processor
Intel(R) Celeron(E) 600 MHz Processor
За процессором будет идти строка с памятью. Но мы память будем смотреть в следующей таблице. Так как мы не знаем прошла память тест доконца или нет, так как мы его остановили кнопкой Pause.
И нас интерисует ещё последняя строчка на экране. Там у казана дата производста материнской платы и накаком чипсете она сделана.
Например:
06/12/2000-VT694X-P3V4X-00 - первые цифры это дата, а дальше чипсет на катором собрана мать и модель мамки.
После этого нажимаем любую клавишу, дожидаемся конца теста и когда на экране отобразится таблица нажимаем кнопку Pause. В этой таблице будет остальная информация.
Или тоже самое можно посмотреть установив нормальные диогностические программы для компьютера. Там будет полная информация о машине.
Отправил эксперт: Gemeni
Эксперт отправил ответов (всего): 4
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №477
Здравствуйте.
Подскажите, как считать информацию, свойственную только этому компьютеру(или поставке компьютеров). Серию, дату изготовления, завод производитель или что-то в этом роде.
Или тоже самое, но с жесткого диска.
Знаю, что можно. Лет 10 назад считывал с AT286. Забыл.
С уважением Андрей.
Ответ
Здравствуйте, Андрей!
Попробуй так:
Досовая ф-ция(int 21h)
Вход:
AX=440Dh
BX=drive(0-current,1-A,...3-C)
CX=0866h
DS:DX-адресс записи
Выход
AX- код ошибки, если СF=1
иначе запись по DS:DX заполняется
Формат записи
+0=0000h(word)
+2=Colume Serial Number(Dword)
+6=Volume Label(11 char)
+11h="FAT12 " или "FAT16 " или еще че-нить(не проверял)
+19h=19h-размер записи
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 64
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №481
По какому принципу работает программа восстановления информации на винте Tiramisu? У меня был винт, испорченный вирусом: Windows не работала совсем и не переустанавливалась. Я его сдуру "полечил" Scandisk'ом, и после перезагризки оказалось что он абсолютно пуст. С помощью этой классной программки я восстановил 600 Mb нужных данных. И очень заинтересовался, как она работает. Только не советуйте смотреть исходник - я еще начинающий.
Ответ
Здравствуйте, Wolf!
Извините, что я не даю вам ответа, но не могли бы вы кинуть
исходники этой программы мне на адрес zpsoftware@beep.ru,
или дать URL ?
Буду благодарен, эксперт Nik.
Отправил эксперт: Nik
Эксперт отправил ответов (всего): 59
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №482
Тут такое дело:
я прошЈл 14 номеров рассылки за 5 дней, и вродебы почти всЈ понял Теперь хочется самому чего-то написать, а знаний не хватает - надо следующие выпуски изучать. Но голова уже больше не воспринимает.... Как быть?
Ответ
Здравствуйте, Дмитрий!
Есть 3 варианта:
1. Собственно если ты въехал в 14 номеров, то ты уже можешь написать что то стоющее (вопросы присылай).
2. Если у тебя грандиозные задумки (написать крякер Интернета, супер архиватор (сжатие 99%), Виндовс для XT и т.п.) и тебе конкретно нехватает знаний, подожди пока спадет опухоль головы (прикладывай холодные предметы к голове, ешь колеса всякие, побольше овощей, рыбы) и грызи асм дальше.
3. Поменяй голову (извини свою предложить не могу, но поспрашивай, может у кого-то из экспертов лишняя завалялась).
Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 30
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №482
Тут такое дело:
я прошЈл 14 номеров рассылки за 5 дней, и вродебы почти всЈ понял Теперь хочется самому чего-то написать, а знаний не хватает - надо следующие выпуски изучать. Но голова уже больше не воспринимает.... Как быть?
Ответ
Ответ прост до банальности: "Во всем нужна сноровка, закалка, тренировка. При каждой неудачи давать умейте сдачи, иначе Вам удачи не видать"(с) Высоцкий.
Ну понятно, да ? Попробуй как-то поизменять программки из рассылки, погляди на них в дебагере, попробуй что-то менять. Смотри как на это реагирует дебагер. Поползай по Инету, поищи сорцы прог на ассме (их тучи!). Короче - главное не сдаваться!! Бошка не хочет думать - ЗАСТАВЬ ЕЕ!!! СТУКНИ ПО НЕЙ МОЛОТКОМ! Если не поможет - то сделай так, чтоб она рубила в том, что уже восприняла (голова). Когда она (опять же голова) будет это делать автоматом - то по идее появится место для новый записей. НУ, идею ты, думаю, понял. УДАЧИ!
Отправил эксперт: K.A. NiCK (http://www.lightstorment.f2s.com - Lightstorm entertainment home page)
Эксперт отправил ответов (всего): 44
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №482
Тут такое дело:
я прошЈл 14 номеров рассылки за 5 дней, и вродебы почти всЈ понял Теперь хочется самому чего-то написать, а знаний не хватает - надо следующие выпуски изучать. Но голова уже больше не воспринимает.... Как быть?
Ответ
Здравствуйте, Дмитрий!
Вообщето совет бесплатных докторов прямо за углом, но отвечу.
Я в таких случаях устраиваю тотальную пьянку, можно с дракой и с ментами. И вообще, послушайте старого алкоголика : лучше всего программится с похмела на больную головку...
Хотя, может кто то со мной не согласится.
Отправил эксперт: Autogen
Эксперт отправил ответов (всего): 19
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №484
Доброе время суток !
У меня возник вопрос, в рассылке Ассемблер? Это просто! выпуск 13. Объясняется работа вируса, в принципе всё понятно вот только есть в файле virus13.asm, такая строка
;jmp dword ptr cs:[off_move]
после чего регистр CS становится равен 0BF00h, вот этот факт и озадачил меня, ведь значение 0BF00h, присваивалось регистру ES, seg_move dw 0BF00h
;mov es,seg_move ; вот тут es и стал равен 0BF00h
далее по этому адресу мы и заносим вирус
;mov di,100h
;mov cx, offset Finish-100h
;mov si,100h
;rep movsb
вот теперь (как я понял), в ES c 100 - го смещения и находится наш вирус
но дальше идёт такая строка
;jmp dword ptr cs:[off_move]
и CS стал равен 0BF00h и все вроде бы хорошо, но почему изменился CS ?, ведь логичнее было бы по моему
; jmp dword ptr es:[off_move]
Ведь не трогали же мы СS,а в отладчике всё выглядит так
;jmp FAR CS:[102]
Вот в общем и суть моей проблемы, я был бы очень благодарен если бы вы смогли мне ответить, и ещё если рассылка закрылась то напишите пожалуйста где можно получить ответ.
С уважением serga
serga@unicode.kz
Ответ
Здравствуйте, serga!
Молодец что разбираешся, похоже ты еще не полностью осознаешь, что выполняет инструкция jmp dword ptr cs:[off_move]. Эта команда осуществляет безусловный переход по дальнему адресу именно изменением регистров cs и ip, всегда указывающих на команду, которая будет выполнятся следующей. Операнд команды - dword ptr cs:[off_move] указывает взять в качестве адреса перехода двойное слово, хранящееся в сегменте cs, по смещению off_move. По этому смещению в коде вируса находятся следующие данные:
; --- Общие данные ---
Off_move dw offset Lab_jmp ;смещение и
Seg_move dw 0BF00h ;сегмент адреса, куда будем прыгать
;0BF00h - адрес (сегмент) 7 страницы дисплея
;младшее слово в начале, а старшее - в конце
То есть, как и должно быть, сперва младшее слово - смещение, затем старшее слово - сегмент. Именно по этому адресу и будет выполнен переход, и именно эти значения будут содержать регистры cs:ip.
Разрядность переменной - DWORD PTR, еще и задает дальний тип перехода, т.е. определяет команду jmp far, которую ты видишь в дебагере. Так же будь внимателен, off_move - это не есть сама переменная, это смещение, по которому она хранится в памяти. Квадратные скобки иногда и не ставят, но вообще то желательно это делать.
В данной программе ты можешь заменишь jmp dword ptr cs:[off_move] на jmp dword ptr еs:[off_move], т. к. во время выполнения этой инструкции код вируса уже будет продублирован (без учета PSP) в сегмент, содержащийся в es, и следовательно будет содержать и метку off_mov, и адрес перехода.
Отправил эксперт: Alexander_K
Эксперт отправил ответов (всего): 7
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №484
Доброе время суток !
У меня возник вопрос, в рассылке Ассемблер? Это просто! выпуск 13. Объясняется работа вируса, в принципе всё понятно вот только есть в файле virus13.asm, такая строка
;jmp dword ptr cs:[off_move]
после чего регистр CS становится равен 0BF00h, вот этот факт и озадачил меня, ведь значение 0BF00h, присваивалось регистру ES, seg_move dw 0BF00h
;mov es,seg_move ; вот тут es и стал равен 0BF00h
далее по этому адресу мы и заносим вирус
;mov di,100h
;mov cx, offset Finish-100h
;mov si,100h
;rep movsb
вот теперь (как я понял), в ES c 100 - го смещения и находится наш вирус
но дальше идёт такая строка
;jmp dword ptr cs:[off_move]
и CS стал равен 0BF00h и все вроде бы хорошо, но почему изменился CS ?, ведь логичнее было бы по моему
; jmp dword ptr es:[off_move]
Ведь не трогали же мы СS,а в отладчике всё выглядит так
;jmp FAR CS:[102]
Вот в общем и суть моей проблемы, я был бы очень благодарен если бы вы смогли мне ответить, и ещё если рассылка закрылась то напишите пожалуйста где можно получить ответ.
С уважением serga
serga@unicode.kz
Ответ
Здравствуйте, serga!
Даю самый точный ответ на этот вопрос, который и кстати же, уже задавался ранее (см. FAQ 49,50)
Раз и навсегда чтоб всем было ясно:
jmp dword ptr cs:[off_move] - переход типа Far (дальний) - если адрес перехода находится в другом сегменте. Дальний переход может выполняться и в тот же самый сегмент (как в нашем случае) при условии, что в сегментной части операнда(*) указано число, совпадающее с текущим значением CS. НО у нас же несовпадает (это не важно)! поэтому:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
команда JMP просто загружает НОВОЕ значение в EIP и НОВЫЙ(!) селектор сегмента кода в CS, используя старшие 16 бит операнда(*) как новое значение для CS (0B800h) и младшие 16 или 32 бит в качестве значения IP или EIP ВОТ И ВСЕ
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(*) Что же у нас является в данном случае операндом? а вот что: dword ptr cs:[off_move] !, что равнозначно 0b800h:offset (где offset - какое то число).
p.s. а ES в этом случае вообще не при делах...
Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 34
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Подписаться на рассылки
Форма подачи вопроса
ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!
Регистрация в качестве эксперта
Архив выпусков
Ведущий рассылки,
Калашников Олег:
Assembler@Kalashnikoff.ru
ICQ No.: 68951340
URL сайта подписчиков:
http://www.Kalashnikoff.ru
______________
По вопросам сотрудничества, рекламы и спонсорства обращайтесь:
- Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
- Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
- Издание книги (спонсорство): Sponsor@Kalashnikoff.ru
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав. |
Реклама на сайте Kalashnikoff.ru
http://subscribe.ru/
E-mail: ask@subscribe.ru | Отписаться | Рейтингуется SpyLog |
В избранное | ||