Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (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

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта

Архив выпусков


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное